Forum Replies Created
-
AuthorPosts
-
alex000Participant'Mike-Aiki' wrote:Я всегда устанавливаю делфийский пакет (должны быть установлены Delphi), ставлю Delphi Compiler -> Linking -> Linker Output = “Generate all C++ Builder files (including package libs)”.
Да, я знаю про этот способ, но разницы быть не должно – компилятор Delphi все равно один и тот-же.
'Mike-Aiki' wrote:При этом всё в билдере собирается нормально, да и размер exe-шника сильно худеет. 🙄А вот с этого места поподробнее: сильно это – сколько? В моем случае acntBCB2006_R.lib получается весом 4.57MB.
'Mike-Aiki' wrote:Кстати, в этом случае в Sconst.hpp описанной тобой строки просто нет. ^_^Вероятно, мы используем разные версии С++Builder – я использую BDS2006, а в Sconst.pas написано:
Code:{$IFNDEF D2007}
LONG_PTR = Longint;
{$ENDIF}alex000ParticipantВстроенные в Delphi скины если и повлияют на популярность AlphaControls, то очень не скоро.
Далеко не каждая фирма согласна заплатить ~$2000 за встроенную поддержку скинов, пусть и в комплекте с 64-битным компилятором и другими плюшками – Delphi 7 все еще не плох 🙂
alex000ParticipantНичего страшного, я не тороплюсь, можно и подождать 🙂
alex000Participant'avail' wrote:другое дело переделать VCL проект с AC на огнемакаку, не представляется реальным.
На данный момент, да – это довольно сложно, но в будущем должны появится конверторы VCL->FM: http://midafiremonkey.wordpress.com/
alex000ParticipantЯ неверно задал вопрос: запустите отдельно C++Builder (а не весь RAD Studio Xe) – в Start Menu должны быть несколько ярлыков – нужен “C++Builder XE” который запускает только C++Builder и там посмотрите в Components->Install Packages… и есть ли что-то по кнопке “Components”.
Но в любом случае непонятно, что вы делаете не так 🙁
Попробуйте все-таки удалить компоненты полностью – включая файлы acntDelphiXE.bpl и acntBuilderXE.bpl – найдите и удалите все эти файлы.
alex000ParticipantРад что все разрешилось 🙂
Только с моих исследований толку мало – только панику нагоняю 😉
Support, так в чем же было дело? или “оно само прошло” ?
Жаль если второе – самое ценное здесь, узнать причину проблемы, ведь это может пригодится в будущем:
Был один случай – у клиента программа просто перестала запускаться, (скорее всего после обновления windows)
А как раз недавно с помощью Application Verifier я нашел повреждение кучи в одной из сторонних dll, используемых программой.
С этим повреждением все прекрасно работало годами и мысль что программа перестала запускаться именно из-за этого, пришла мне в голову совершенно случайно, и.. таки она оказалась верной 🙁
Возможно с тех пор я излишне опасаюсь повреждений памяти, поэтому прошу прощения если напрасно развожу здесь панику :a8:
alex000ParticipantСтранно…
Только что попробовал “в чистую” установить – все видно.
Не знаю, посмотрите – в Components->Install Packages… – там видны AlphaControls ? А там же по кнопке “Components” в списке что-то есть? Вы уверены что удалили компоненты полностью (включая acntDelphiXE.bpl/acntBuilderXE.bpl)?
alex000ParticipantВ таком случае вопрос закрыт.
Спасибо!
September 8, 2011 at 1:46 pm in reply to: TsPageControl – При закрытии таба крестиком – List index out of bounds #46625alex000ParticipantСпасибо!
alex000ParticipantНет никаких новостей по теме? Куда делся автор темы?
Неприятно знать, что где-то глубоко прячется повреждение памяти, пусть даже оно происходит только под Delphi седьмой версии и то не у всех.
Хотя, может быть это и не такая страшная проблема, но хотелось бы добраться до истины 🙂
alex000ParticipantЧтобы компоненты были видны и в Delphi и в C++ Builder, нужно ставить только пакет для Delphi со включенной опцией Project options->Linker->Linker output->Generate all C++ Builder Files.
Поищите внимательнее – в Delphi XE она расположена: Project options -> Delphi Compiler -> Output – C/C++ -> C/C++ Output file generation = Generate all C++Builder files (including package libs)
alex000ParticipantАльфа не причем – http://www.sql.ru/forum/actualthread.aspx?bid=20&tid=834158
alex000Participant'Michael' wrote:Просьба изменить у TsDateEdit режим ручного ввода значения.
1. Когда пользователь ввел число и месяц (оставил год пустым) – то при выходе из компонента пожалуйста заполняйте текущий год.
Пример: __.__.____ -> 01.01.____ -> (Выход) -> 01.01.2011
Почему именно на текущий?
А вдруг программа выписывает туристические путевки на следующий год? Или какие нибудь налоговые отчеты за прошлый?
Кроме того, это можно сделать самостоятельно с помощью событий вроде OnAcceptDate или OnExit.
alex000Participant'Support' wrote:А система какая? WinXP?
Да, обычая XP sp3.
KMPlayer если не ошибаюсь, у меня был версии 2.9.3.1431, если это важно.
alex000ParticipantЯ провел еще кое-какие исследования Project1.exe из первого сообщения и вот что нашел:
При создании как первой так и второй формы – вызывается процедура TacMainWnd.Create (в отладчике показывалась как Project1.acSBUtils.TacStaticWnd.Create_0048C74C) которая вызывает Ac_SetWindowTheme что и приводит к повреждению памяти в модуле uxtheme.dll.
Это безумие :36: – под отладчиком я добавил Sleep(0) перед вызовом Ac_SetWindowTheme – и нет повреждения! :a1:
Кому посылать проклятия непонятно: альфа не виновата в повреждении памяти, тк повреждается участок который принадлежит uxtheme.dll -> виновник микрософт.
повреждение проявляется только под Delphi 7 -> виноват Борланд.
На сколько мне известно, во время Sleep(0) управление получают остальные процессы/потоки – видимо что-то, что должно произойти в другом потоке – успевает это сделать и повреждения не происходит. Возможно, это как-то связано с потоками, с синхронизацией.
Так же видимо есть объяснение, почему этого не происходит под другими версиями Delphi – эта функция не вызывается вообще! Т.е. SetWindowTheme в проекте собранном под BDS2006 не вызывается ни разу.
Если бы кто-то у кого еще повторяется данный баг выложил exe, можно было бы сравнить и выяснить в этом ли единственная причина.
Прилагаю пропатченный Project1.exe из первого сообщения – там добавлен Sleep(0) перед вызовом Ac_SetWindowTheme, и он под отладчиком не останавливается! [attachment=5070:Project1_sleepmod.zip]
alex000ParticipantИ все-таки это повреждение памяти – забивка Int 3 NOP`ами не помогает.
Между тем – проблему заметили и в английской ветке форума: http://www.alphaskins.com/forum/index.php?showtopic=6458
Хоть у меня и нет Delphi 7 – я провел некоторые исследования.
Во-первых – поиск по “Heap block modified after it was freed.” наводит, например сюда, где описана техника ловли таких ошибок под MSVC. Для Делфи этот способ не подходит но у FastMM есть ключ CheckHeapForCorruption который здесь может быть в тему – стоить погонять альфу с этим ключом.
Далее – в call-stack в момент остановки есть ссылки на uxtheme.dll – что наводит на мысль что это как-то связано с темами windows.
Просмотр в Changelog.htm от версий 7.42-7.44 показал что есть как минимум одно исправление связанное с темами – в acSBUtils.pas v7.43 добавлено в секцию uses – {$IFDEF DELPHI7UP}Themes, {$ENDIF}.
Кстати, Changelog.htm вещь конечно классная, но так ведь можно рассекретить все исходники. Стоило ли включать лог в версию без исходников?
Так вот, добавление Themes в секцию uses вроде бы ничего не меняет (кроме, возможно порядка выполнения initialization/finalization), но это навело на мысль сравнить Themes.pas от Delphi 7 и BDS2006.
Там обнаружились только 2 отличия:
Delphi 7:
Code:constructor TThemeServices.Create;
begin
FThemesAvailable := InitThemeLibrary;
FNewComCtrls := GetComCtlVersion >= ComCtlVersionIE6;
UpdateThemes;
end;Delphi 2006:
Code:constructor TThemeServices.Create;
const
ComCtlVersionIE6 = $00060000;
begin
inherited Create;
FThemesAvailable := InitThemeLibrary;
FNewComCtrls := GetFileVersion(comctl32) >= ComCtlVersionIE6;
UpdateThemes;
end;Описание исправления на QC: http://qc.embarcadero.com/wc/qcmain.aspx?d=10004
И второе:
Delphi 7:
Code:finalization
InternalServices.Free;
end.Delphi 2006:
Code:finalization
if not IsLibrary then
InternalServices.Free;
end.Что это значит на QC я не нашел, но есть объяснение на stackoverflow: http://stackoverflow.com/questions/5008903/why-does-themes-pas-leak-the-tthemeservices-singleton-when-linked-into-a-dll
Не знаю на сколько эти отличия серьезны, он учитывая что Heap Corruption есть только под Delphi 7, эту теорию стоит проверить.
Сорри что сообщение получилось адски длинным :ph34r:
Если короче:
– Стоит попробовать FastMM с ключом CheckHeapForCorruption.
– Тем у кого проблема воспроизводится стоит попробовать добавить к проекту Themes.pas от Delphi 2006 (см. приложение) и посмотреть что получится.
[attachment=5060:Themes.pas from Delphi2006.zip]
alex000ParticipantЗабавно, такой эффект действительно проявляется при включенных ExtendedBorders.
Возможно, что KMPlayer в этом не виноват, а это глюк стандартного обработчика видео, так как если переключить его в настройках (Настройки->Конфигурация->Обработка видео->Обработчик->Обраб-к) на какой-нибудь другой (VMR9, например) то эффекта Малевича не наблюдается.
alex000ParticipantНасчет локализации – Попробуйте заменить sStrings.res на локализованный из папки ResRussiansStrings.res
Насчет шрифта – можно скриншот?
alex000Participant'sylar' wrote:Подскажите пожалуйста, можно ли цвет выделенной записи сделать под цвет скина? Спасибо.
Для нового вопроса – создайте новую тему.
На Ваш вопрос – да, можно, в модуле DBGridEh есть класс TDBGridEhStyle, нужно создать наследника этого класса и переопределить в нем метод HighlightDataCellColor, в котором если включен скин и текущая строку выделена – присвоить AColor нужный цвет (например, DefaultManager.GetHighLightColor(); – цвет выделения из текущего скина).
Далее Вам нужно воспользоваться функцией SetDBGridEhDefaultStyle(), где указать Ваш класс наследник от TDBGridEhStyle.
По моему это все описано в хелпе к EhLib.
alex000Participant'Cinemaizer' wrote:я к ней (Дельфи) и так и эдак, со словами и без слов… в том и проблема, что теперь не получается 🙂 ошибку словить в смысле.
В этом вся суть таких ошибок повреждения памяти 🙂 Они не проявляют себя в 99% случаев.
Call-stack тоже не поможет – скорее всего мы увидим последствия повреждения, которое может быть никак не связано с его причиной.
Кидание SkinProvider на форму могло помочь просто потому что изменился порядок линковки модулей и повреждается какой-то другой участок памяти.
В моем случае причиной повреждения памяти был модуль скомпилированный другой версией Delphi, но благополучно прилинкованный к проекту. Оказалось, что в разных версиях делфи слегка отличается работа со строками – в результате имеем повреждение памяти и вот такие остановки под отладчиком в совершенно разных местах и иногда неожиданные падения проги.
Application Verifier тогда помог мне найти причину проблемы.
Суммируя тему:
– как минимум 3 человека заметили остановку под отладчиком при использовании AC версии 7.44 и более поздних.
– В версии 7.41 остановка не происходит
– Проблема наблюдается только под Delphi 7.
– Скорее всего причина в повреждении памяти (heap corruption) – какой-то блок освобождается дважды
Думаю, было бы неплохо чтобы кто-нибудь еще выложил .exe для изучения под AppVerifier.
Прошу прощения что могу помочь только теоретически, к сожалению у меня нет Delphi 7 🙁
-
AuthorPosts