-
Возникла забавная штука: программа, скомпилированная под Windows 95 (на виртуальной машине), в таком же Delphi6, на ней запускается без проблем. Скомпилированная под XP, со всеми теми же исходными файлами, на этой же виртуальной машине уже не запускается. Говорит, что Файл ZOOMER.EXE связан с отсутствующим компонентом OLEAUT32:VarNot. Я фигею, и думаю: а как быть, что, компилировать на виртуальной машине, чтобы везде запускалось?
Порылся по исходникам, объявлено это дело в VarUtils. Теперь вот кумекаю, а как бы от этого гадства избавиться. В исходниках VCL, которые стоят на win95, этот модуль отличается (т.е. исходники НЕ ТЕ ЖЕ). Как-то это по-свински даже, можно было бы и предупредить.
-
Прикольно). А разве Зумер не на КОЛ написан? При чем там VCL?
-
Используется KOLOLERE, без OLE картинки в RichEdit не вставляются. Сложность вопроса в том, что без OLE собрать можно, заменив Variants. Но тогда нет картинок в rich edit и нужна альтернатива типа своего memo с картинками. Пока так оставлю, OLE добавляется в W95 и NT4 при установке IE4. Думаю, что сейчас уже практически никто не использует W95 и NT4, но всё-таки вдруг. Хотелось бы, чтобы хотя бы запускалось это под 95/NT4, пусть и без справки (где и нужен RichEdit). Вариант видится такой: делать систему справки всё-таки в виде отдельного приложения, вытаскивающего нужные графические ресурсы из Zoomer.exe. Собственно, надобность в собственной системе справки как раз в том, чтобы сэкономить на общем объёме за счёт графики в справке, которая "воруется" из ресурсов приложения и не дублируется. А меня всё-таки удивило то обстоятельство, что "современный" Delphi установился на старую ось в другой конфигурации исходников / библиотеки, ни о чём не предупреждая. В исходниках, где я рылся, в VarUtils, в начале не хватает целого блока кода, а именно: uses
SysUtils, Types;
const
GenericVarUtils = False;
GenericVarUtils = True;
GenericVariants = GenericVarUtils;
GenericOperations = GenericVariants;
GenericSafeArrays = GenericVarUtils;
GenericSafeArrayUsesLibC = GenericSafeArrays;
Да и дальше идут различия. Получается, что Delphi проверяет, что за система, на которую он устанавливается. И соответствено морфируется под неё. Но что-то я не припомню, чтобы об этом где-то предупреждение было. Хоть в страницу "Секреты Delphi" пиши.
-
Я в шоке! IMHO, рулить надо в сторону NT2000. 9x неперспективен.
-
> Думаю, что сейчас уже практически никто не использует > W95 и NT4, но всё-таки вдруг.
Still in use here!
-
Вот-вот. Я и говорю, что всё еще используется, и достаточно широко. На стареньких ноутбуках, например. В общем, я подумал, и наверное, проще отказаться от rich edit, и использовать для форматирования - контролы, внутри ScrollBox. Некоторые вещи становятся невозможны, как рисунок внутри строки текста, если строка занимает параграф. Зато становятся более возможны такие вещи, как таблица. Я над этим поработаю.
А пока что мне удалось "победить" очень медленную работу с очень большими jpeg'ами, когда отключён Fit to window. Правда, победа неполная. Когда масштаб мелкий (5, 10, 25, 50%), всё неплохо крутится. И даже для 100% ещё терпимо, тормоза почти полностью возвращаются на масштабе 75%. Полная победа была бы, если бы удалось так подправить модуль jpeg'а, чтобы можно было получить непосредственно указанный квадратик из него, не восстанавливая всё прочее изображение. Или даже если это невозможно, то хотя бы не выделять память для всего изображения сразу, пропуская ненужные пиксели при построчном восстановлении. Потому что для постера размером 8000х20000 нужно выделить единовременно 0,5 Гигабайта (и ещё их заполнить), а это тяжко. Займусь этим вскорости, а пока выложил 401E с победой частичной.
-
Кстати, забыл добавить: в 401Е удалось победить ситуацию, когда наг-экран не считал при наличии модального окна, например, диалога выбора папки. И инсталлер с унинсталлером вернул к стилю GRush. Дело даже не в красоте, а просто так будет одинаково во во всех системах, и мне не надо будет мучиться с настройками под каждую версию винды (а то я вдруг заметил, что под 95 в стандартном варианте вдруг заголовок обрезан, и ещё какие-то мелкие артефакты полезли).
-
// WinXP SP2, админские права, v 4.01E
А я еще багу откопал :) Если инсталлер свернуть, а потом развернуть (щелчком в панеле задач или кнопкой свернуть все), то он говорит, что установился и закрывается.
Автоопределение не занятых ассоциаций так и не работает...
Опа! Это вы поправили или от чего-то это зависит? Тут не вылетает при нажатии на Option and About до появленя нага (кстати откуда это название взялось?) Зато и доп панель не появляется... (только когда зумер в собственном стиле, а не виндовом)
Еще в зумерском стиле заголовок GroupBox, или что там в выборе стиля используется, перечеркнут борднром.
Нажал на Option and About и не успело появится окошко, как вылез наг. Ну я нажал требуемую цыфру и снова нажал на настройки. В результате окно настроек не закрывалось и жрал зумер почти 100% процессорного времени...
А отчего зависит когда наг появляется? Просто он иногда выскакивает секунд через 10 после закрытия предыдущего...
Уменьшаем изображение (<100%), проскроливаем колесом мыши по тумбам. Ставим fit to window (* при активном тумбе) - размер картинки не меняется, еще раз * - меняется, но не помню, на весь экран или на 100%. Теперь скролим список в обратную сторону. Картинки теже, но дополнены черным кажется до 100%. * всегда меняет галочку fit to window, но не всегда меняет изображение... Вообще * работает фиг знает как... С картинки больше экрана - нормально, а если маленьше, то до 100% и то не всегда с первого раза. С большого изображения * -> на весь экран (Скажем с 800% на 102%), а - потом приходится прощелкивать предыдущие увеличения (т.е. 800 -> 400 -> 200, хотя реально остается 102%)...
Да вот еще что после всяких манипуляций во время написания предыдущего пункта, закрытие зумера не приводило к его выгрузке, во всяком случае оставалась подсказка и некий процесс zoomer.exe. При этом все это чудо загружало проц почти на 100%...
Может сделать так, чтоб загружаемое изображение всегда было видно целиком? Т.е. если не влазит на экран - сразу уменьшать?
-
> [107] Unknown Mystic © (31.07.07 22:16) > (кстати откуда это название взялось?)
nagscreen - раздражающий экран [en]
> [99] Vladimir Kladov (30.07.07 18:18)
Кстати, а зачем такой огромный размер? Не по КОЛовски как-то :)
-
Только сейчас заметил... На рабочем столе создался какой-то ярлык на зумерский хелп...
При установке на рабочий стол ярлык не кидался. сетап лежал на рабочем столе.
-
2Unknown Mistic: Вот спасибо, сейчас буду фиксить. show/Hide installer'а: разобрался. Автоопределение не занятых ассоциаций так и не работает - Вы о чём говорите, о кнопке Unused в инсталлере? У вас действительно есть типы из списка, ни с чем не связанные? (Допускаю, что такими могут быть например tiff, psd, tga - без установленных других просмотрщиков или редакторов: проверяется наличие в реестре ветки .ext для соответствующего расширения в HK_Classes_root). Или все-таки о том, что не переназначается ассоциация на какой-то из привязанных ранее расширений? Тогда вопрос: на какую программу назначен (чем продолжает открываться), и какой тип, чтобы мне посмотреть конкретно, под 2К. Под ХП вроде бы все ассоциации нормально отбираются у прежних владельцев (и что забавно, возвращаются, если галку снять). доп панель не появляется... (только когда зумер в собственном стиле Что за доп. панель? Наг? Панель с первыми подсказками при входе? Не пойму, поясните тугодуму. GroupBox, , перечеркнут борднром - да, прозрачный потому что. В принципе, группа необязательна, и самих радиобоксов достаточно, уберу. Нажал на Option and About и не успело появится окошко, как вылез наг Вполне может быть, что и не успело. Но в цикл модальностой обработки сообщений, наверное, уже попало. Посмотрю, что можно сделать, чтобы учесть факт модальности ещё до того, как создастся окно. Сейчас при появлении модального окна корректируется порядок обработки сообщений (на нормальный, исковеркан он как раз для обычного случая, без модальности, чтобы кое-что оптимизировать). отчего зависит когда наг появляется? Просто он иногда выскакивает секунд через 10 после закрытия предыдущего Совершенно случайно. Иногда и быстрее чем серез 1сек. А иногда и 5 минут ждать приходится. Если ставить барьер по времени, чтобы наг не появлялся как минимум какое-то указанное время, то в принципе появляется лазейка: найти этот барьер, и сделать так, чтобы программа считала, что этот барьер времени еще не пройден.
Уменьшаем изображение - вот оно, то, что уменя не получалось воспроизвести. На этот раз связано с кэшированием недавно загруженных изображений. Причём, это только с jpeg-ом такое, и даже понятно почему (у него есть режим загрузки половинок, четвертинок и осьмушек - в буфере осталось загруженное, но с другой степенью уменьшения). Ну теперь понятно, как поправить.
* работает фиг знает как Вообще-то мне казалось, что понятно. Отыскивается ближайший масштаб, при котором картинка по возможности вписана в рамки окна при выходе из Fit to window, при переключении в Fit to window большое уменьшится, а вписанное - оно и так вписано уже. чтоб загружаемое изображение всегда было видно целиком - так это же и есть Fit to window.
Я понял, что не понравилось потом приходится прощелкивать предыдущие увеличения (т.е. 800 -> 400 -> 200, хотя реально остается 102% Это можно посмотреть, именно для уменьшения в режиме Fit, чтобы корректировалось. Некоторые технические сложности.
оставалась подсказка и некий процесс zoomer.exe Иногда виснет а иногда и падает. Но довольно редко. Разве у вас ни разу не висли другие программы? (Может, картинка большая попалась, может что-то заело на выходе, поток какой-нибудь не остановился). У моей жены winword на старом компе тоже вылетает с зависанием процесса. Пришлось научить, как находить зависший процесс в диспетчере задач, и грохать его там. Оно бы здорово сделать так, чтобы никогда ничегно не висло, но мир, увы, не идеален. Вообще, если есть установленный на машине msvc++, то можно попробовать приаттачить зависший процесс и хотя бы взглянуть, сколько там потоков застыло, и нет ли дедлока (про это он сам скажет при нажатии на кнопку стоп, если имеет место). Отладчик Delphi, к сожалению, слабоват для отладки уже запущенных процессов.
На рабочем столе создался какой-то ярлык Странно. А не в главном меню? У меня прописано в главном меню чтобы создавался линк (кстати, у него должна быть "неправильная" иконка, я пока не придумал, как сделать правильную).
2ANTPro: очень много кода ушло на графические библиотеки, пришлось задействовать практически всё, что есть, на случай, если одна библиотека не может, используется пара других. Причём примерно половина - это KolCxTiff. Gdi+ задействуется вообще в последнюю очередь, т.к. лажается очень часто, и работает жутко медленно, на больших изображениях. Но иногда (редко) берёт форматы, которые не берутся другими либами.
-
Да именно об Unused в инсталлере. В том то и дело, что он обзывает .bmp и еще какие-то не связанными... Хотя реально, они должны быть связаны. Во всяком случае в "свойства папки" -> "типы файлов" запись соответствующая есть. В реестре - посмотрю. Причем повторю, в первой выложенной версие, даже после неудачной попытки ассоциировать выбранные типы, при следующей инсталляции, сетап верно определял, что они уже "заняты".
> Что за доп. панель? Панелька с дополнительными кнопками. Это та которая включается предпоследней кнопкой в тулбаре.
> Если ставить барьер по времени, чтобы наг не > появлялся как минимум какое-то указанное время, то в принципе > появляется лазейка: найти этот барьер, и сделать так, чтобы > программа считала, что этот барьер времени еще не пройден.
Зачем? Можно его минимум просто увеличить :) Наверное... Ну хорошо, а найдут максимум и поставят максимально возможное значение, сколько там? Даже если 65024, то наг уже не проблема. Правда если под время 1 байт отвести, тогда не поможет... ("А иногда и 5 минут ждать приходится." => сейчас больше байта :) )
А вообще, в чем проблема найти максимум и заставить программу считать, что он еще не наступил, если вы считаете, что можно так сделать с минимумом?
> * работает фиг знает как Вообще-то мне казалось, что понятно. > Отыскивается ближайший масштаб, при котором картинка по > возможности вписана в рамки окна при выходе из Fit to window, > при переключении в Fit to window большое уменьшится, а > вписанное - оно и так вписано уже.чтоб загружаемое изображение > всегда было видно целиком - так это же и есть Fit to window. >
Ну во-первых, первое нажатие * должно переводить картинко либо в весь экран, либо "ближайший масштаб ...". Реально - часто ни то, ни другое. Например, не раз у меня при нажатии * масштаб изменился: 10% -> 9%
Далее, из-за того что * не всегда с первого раза растягивает на весь экран - происходит не соответствие галочки Fit to window и изображения. Помоему такое всегда случается, если нажать * сразу после выбора тумба.
С прощелкиванием - вообще странно. В чем проблема? Нажатие "-" должно переводить в тот же масштаб, что и повторное нажатие "*", а "+" - соответственно в следующий за тем, куда переводит повторная "*".
Да, кстати, не помню спрашивал или нет. Как вернуть тумбы после двойного щелчка на одном из них?
>> Может сделать так, чтоб загружаемое изображение всегда было >> видно целиком? Т.е. если не влазит на экран - сразу уменьшать?
> так это же и есть Fit to window.
Но по умолчанию же картинки не Fit to window, как я понимаю? Тем более, что качество у Fit to window должно быть хуже, чем у обного из "стандартных" масштабов. Вот я и говорил, что может сразу загружать картинку в виде, который получается при двойном нажатии *.
> Иногда виснет а иногда и падает. Но довольно редко. Разве > у вас ни разу не висли другие программы?
Мы ведь тестеры, а не пользователи, купившие эту программу... Кроме того это было несколько раз. На той машине и дельфи то нет, а msvc++ у меня вообще нигде нету.
> На рабочем столе создался какой-то ярлык Странно. А не в > главном меню? У меня прописано в главном меню чтобы создавался > линк (кстати, у него должна быть "неправильная" иконка, > я пока не придумал, как сделать правильную).
Прошу прощения, я не правильно выразился... Так что еще раз с начала: На рабочем столе создался какой-то ярлык на зумерский хелп... (картинка у него действительно левая) При установке на рабочий стол ярлык не кидался. (под этим я имел ввиду, что обе галочки в сетапе были сняты. Помоему создание ярлыка в меню и создание ярлыка на рабочем столе - не помню точно, а новый сетап качать не охота. Как-нибудь потом с исправлениями...) ZoomerSetup.exe (или просто Setup.exe?) лежал на рабочем столе.
-
2Unknown Mystic обзывает .bmp и еще какие-то не связанными Странно, у меня такого не было. Может, накладки какие-то после нескольких установок/удалений. Надо тогда посмотреть, куда они связаны, до установки. доп. панель - да, у меня тоже. исправил. В e версии будет. Тут и изменение внешнего стиля на виндовый помешало: тулбар никак не хотел показывать все кнопки, пока не отключил tboflat. насчет барьера наг-скрина: в том-то и дело, что сейчас нет никакого барьера, ни максимума, ни минимума. Поставить любой барьер - равносильно предоставить лазейку. Я сейчас подправил вероятности, выскакивает чуть реже, но доставать будет всё равно. 10% -> 9% - это просто ошибка округления вниз. Буду использовать Round (до этого был аналог Trunc, точнее целочисленная формула W1 * 100 div W2). Нажатие "-" должно переводить в тот же масштаб, что и повторное нажатие "*", а "+" - соответственно в следующий за тем, куда переводит повторная "*" - а если точно 100% например, и как раз вписано в окно? Ведь и такое бывает. Тогда * не должно ничего менять, кроме режима для следующей команды. Хотя нет, меняет: это неправильно считается минимальный подходящий масштаб, лишний раз уменьшает, сейчас поправлю тоже. Как вернуть тумбы Enter, popup menu->Switch view file list, F1 тоже работает. Еще двойной клик, но это только если картинка вписана в экран.
по умолчанию же картинки не Fit to window - сделать этот режим стартовым? Можно.
msvc++ нужен, я это очень понял при отладке зумера. Delphi входил в ступор, даже при непосредственной отладке, а msvc++ хотя бы показывал адреса подпрограмм в стеках потоков. Пару серьезных проблем удалось выявить с его помощью.
создался какой-то ярлык на зумерский хелп... (картинка у него действительно левая) При установке на рабочий стол ярлык не кидался. (под этим я имел ввиду, что обе галочки в сетапе были сняты - вот оно в чём дело. Главное меню не создавалось, а линк на справку пытался себя тем нее менее куда-то создать. Забавно, что он нашёл место на работчем столе. Надо просто внести создание этого линка внутрь своего if then begin...end; (а я-то смотрел в участок кода, где линк на саму программу создаётся на рабочем столе).
Я тут глючок с иконками нашёл. Вроде поправил, но очень необычный случай: при белом фоне, тумб иконки был черно-белым. Я полагаю, на данном этапе сверх-серьёзных багов уже практически не осталось, которые бы мешали публиковать программу официально. Публикуются программы и в более незавершённом виде. На следующую версию у меня очень большой список todo, но я стараюсь уже не трогать по возможности ничего, что не является багом.
Сейчас буду закачивать 401e.
-
> насчет барьера наг-скрина Тогда не понял... А как определяется когда он вылазит? Ежесекундно генерится число и проверяется его значение? Ну так это тоже в общем-то барьер...
Т.е. последовательность 10% -- (нажата *) --> 9% -- (нажата *) --> 102% Это нормально? (Ошибка округления - не в счет)
> а если точно 100% например Во первых это довольно редко бывает, что Fit to window = "стандартному" масштабу. И в любом случае лучше, чем прокручивать гораздо большее число масштабов, хотя соответствие "стандартному" масштабу можно и проверить...
> по умолчанию же картинки не Fit to window - сделать этот > режим стартовым? Можно. Если не ошибаюсь, вы говорили, что у Fit to window качество хуже, чем у стандартных масштабов, поэтому на мой взгляд это плохой вариант. Да и кроме того зачем растягивать картинку, если при 100% она и так почти на пол экрана? Только качество ухудшится, да лишнее время на масштабирование.
> Забавно, что он нашёл место на работчем столе. Скорее в папке из которой сетап запускался, а у меня он на рабочем столележал.
> Сейчас буду закачивать 401e. "е" вроде была уже... В общем следующую за ней скачаю - дальше тестить :))
А нововведения, это да - опасно вводить. Глюков натащить можно. Да и на тест много времени уйдет...
Да кстати, а вы не хотите этот todo в хелп запихнуть? Как "ожидаемое в следующих версиях" или еще как-то?..
-
С барьером всё сложнее. Таймер там как один из источников, но на самом деле не только он один. Вдаваться в подробности мне не хочется, да я уже и сам в деталях "плаваю". Смысл в том, что инициироваться наг может в нескольких местах программы, более того, он ещё и несколькими способами отображается, на случай, если один из способов заглушат. В общем, барьера и вправду нет - по совокупности источников. В таймере, как одном из барьеров, есть верхний барьер, но гораздо чаще срабатывает не от него.
10% -- (нажата *) --> 9% -- (нажата *) --> 102% "Подходящий" масштаб начинает отыскиваться от 100% сначала вверх, потом уменьшается вниз, пока размер больше вписанного (при выключении Fit'а). Мне показалось так удобно (команды "1" тогда ещё не было, это был заодно и способ минимальным числом операций приблизиться к 100%). В 401e (е маленькое, предыдущий вариант был 401E) исправлен показ масштаба уже.
зачем растягивать - Fit window только сжимает. Если получилось больше 100%, то это потому, что сначала изображение увеличено в 2**n, а потом уменьшено, чтобы быть вписанным.
он нашёл место на рабочем столе - он пытался указать путь в главном меню на несуществующую папку, а родителем главного меню является рабочий стол. Хотя может быть, винда создала ярлык в этом случае в рабочей директории, которая совпала со стартовой.
todo в хелп запихнуть - не, не хочу. Вдруг мои планы изменятся. Или не получится что-нибудь из запланированного. Пусть будет сюрприз.
-
Рано радовался: нашёл еще один баг, с загрузкой тумбнайлов двухцветных битмапов. Кстати, если кто не в курсе, в KOL.TBitmap можно построить произвольную палитру, через DibPalEntries[ 0..DibPalEntryCount-1 ]. Применил неправильную формулу, получился черный прямоугольник. В 401F будет.
-
Наконец-то мне удалось поймать за хвост зависание на выходе. Сначала глазам не поверил, потом убедился: и правда прога висит на обработчике WndProcTransparent. Обидно то, что окно в этот момент уже невидимое. В общем, небольшую поправочку (разумеется, опциональную) к KOL.pas пришлось придумывать, такие дела.
И наг опять визуально что-то не всегда считает. Думал, убрал возможную причину. С исправлением в WndProcTransparent считает вроде. Вот и думаю теперь: а при чём он тут?
-
Выложил 401F. Наг должен считать, прога не должна виснуть на выходе. Исправлена работа с 2хцветными битмапами.
-
Кто-нибудь скачал 401F ? Мне интересно. Кстати, zoomer@ все еще не пашет, если кто-то еще присылал запросы на регистрацию, просьба повторить на vk@.
-
Обновил до 401f. Решено 2 проблемы: Enter при старте, и многократный [-] в режиме Fit window больше не нужен после нескольких лишних [+].
|