#pas
VAR Bound:integer;
bb:packed record
Height:word;
Width:word;
ShiftWidth:word;
end absolute Bound;
Этот топик читают: Гость
Ответов: 4630
Рейтинг: 749
|
|||
Итак, дано фрагмент процедуры TXPMenu._MeasureItem файла XPMenus.pas:
|
|||
карма: 26 |
|
Гость
Ответов: 17029
Рейтинг: 0
|
|||
Редактировалось 11 раз(а), последний 2022-09-20 00:27:27 |
|||
карма: 0 |
|
Ответов: 4630
Рейтинг: 749
|
|||
Не подходит. Packed значит, что поля типа word (2 байта) не будут автоматически дополнены до Dword (4 байта) в целях оптимизации (в зависимости от настроек компилятора). Размер структуры всёравно будет 6 байт (без Packed мог бы быть 8, но не меньше 6-ти).
------------ Дoбавленo: Работают MenuEx, PopupMenuEx Работает ProgressBarRush |
|||
карма: 26 |
| ||
Голосовали: | Konst |
Ответов: 211
Рейтинг: 52
|
|||
CriDos писал(а): Если в схеме присутствует более 1 кнопки (Button ), программа уходит в цикл и постоянно грузит ЦП.Для пользователя среды: Если в схеме присутствует более 1 кнопки, одна из них должна быть с установленным свойством DefaultBtn в true Netspirit, Для разработчика кодогенератора: необходимо исключить назначение свойства DefaultBtn := False, если оно явно не определено в True ( отличается от INI). Т.е. в CodeGen.dpr где-то в теле функции SetProp (завтра посмотрю), необходимо исключить установку значения для выше указанного свойства в False. Примерный фильтр (на память) if ElIsDefProp(e,i) and (PropGetName(p)='DefaultBtn') and (ElGetClassIndex(e) = Cl_WinElement) then continue; P.S. обсуждалось в этой ветке http://delphimaster.ru/cgi-bin/forum.pl?id=1292331932&n=10 |
|||
карма: 1 |
|
Ответов: 4630
Рейтинг: 749
|
|||
Minkovsky, спасибо, я тоже к этому пришел. Но решил все проще - в hiButton.pas в THIButton.Init вместо
Control.DefaultBtn := _prop_DefaultBtn; сделал
if _prop_DefaultBtn then Control.DefaultBtn := true; Правда, не смог установить, где именно в KOL возникает эта ошибка - в TControl.SetDefaultBtn вроде нет, похоже, в одной из процедур обработки сообщений.
Что-то подобное сделал и для Ctrl3D (иначе рисовало рамки вокруг компонентов при False). Кстати, были вылеты GroupBox на этом месте: procedure THIWin.Init;
Оказалось, эта конструкция в новом компиляторе работает не так, как ожидалось:
... Color := _prop_Color; ... end; constructor THIGroupBox.Create(Parent: PControl);
begin ... Control.Font.Create; ... end; |
|||
карма: 26 |
|
Ответов: 211
Рейтинг: 52
|
|||
Netspirit писал(а): не смог установить, где именно в KOL возникает эта ошибкаискать не стоит... Книга о KOL (с.9) писал(а): при инициализации объектов ни в коем случае нельзя инициализировать все возможные поля (которые, в свою очередь, являются объектами). Эту операцию следует по возможности откладывать "на потом". Например, при создании визуального объекта в KOL инициализация шрифта для окна этого объекта выполняется в самом минимальном возможном объеме. Т.е., шрифт "наследуется" от родительского оконного объекта, при этом, на самом деле, вызывается заглушка - указатель на функцию, которая начинает указывать на действительную функцию, только если в программе модифицировался хотя бы один параметр шрифта. |
|||
карма: 1 |
|
Ответов: 258
Рейтинг: -27
|
|||
У меня с этим компилятором прога стала запускаться в 2 раза быстрее, но не работает onmouseleave в Edit или SetFocus в Label
(у меня фокус в проге должен был переноситься в Edit на Label, так это перестало работать, хотя это не важно) ------------ Дoбавленo в 20.59: и ещё один плюс нового компилятора в том что virustotal теперь вирусов не видит в каждом полученном exe файле ------------ Дoбавленo в 21.01: будет ли когда-нибудь доступна компиляция для x64 ? |
|||
карма: 0 |
|
Ответов: 4630
Рейтинг: 749
|
|||
Сборка программ для x64 пока сложнореализуема. И просто любопытно, зачем Label фокус?
------------ Дoбавленo в 11.04: Cubone писал(а): не работает onmouseleave в EditНе подтверждается. |
|||
карма: 26 |
|
Ответов: 258
Рейтинг: -27
|
|||
Netspirit писал(а): И просто любопытно, зачем Label фокусну не важно но на старом компиляторе фокус перемещался на label с вот такой схемой code_29210.txt |
|||
карма: 0 |
| ||
файлы: 1 | code_29210.txt [480B] [903] |
Гость
Ответов: 17029
Рейтинг: 0
|
|||
Редактировалось 12 раз(а), последний 2022-09-20 00:26:52 |
|||
карма: 0 |
|
Ответов: 4630
Рейтинг: 749
|
|||
А никому не кажеться, что в Win.pas в процедуре THIWin.Init должно быть:
if _prop_TabOrder > 0 then begin
Style := Style or WS_TABSTOP; LookTabKeys := [tkTab]; TabOrder := _prop_TabOrder; end else TabStop := _prop_TabOrder <> 0; // Или TabStop := false |
|||
карма: 26 |
|
Разработчик
Ответов: 26160
Рейтинг: 2127
|
|||
Netspirit писал(а): А никому не кажеться, что в Win.pas в процедуре THIWin.Init должно бытьТогда -1 работать не будет, только что проверил |
|||
карма: 22 |
|
Ответов: 4630
Рейтинг: 749
|
|||
А если еще сделать:
if _prop_TabOrder <> 0 then
А отрицательные TabOrder вообще корректно работают? |
|||
карма: 26 |
|
Разработчик
Ответов: 26160
Рейтинг: 2127
|
|||
Netspirit, а на кой черт это вообще надо, я че-то не совсем понял. Че должно дать условие if _prop_TabOrder <> 0
|
|||
карма: 22 |
|
Ответов: 4630
Рейтинг: 749
|
|||
Просто изначальный фрагмент какой-то непонятный. Мне показалось, что должно быть (с учетом твоего замечания):
if _prop_TabOrder <> 0 then begin
Style := Style or WS_TABSTOP; LookTabKeys := [tkTab]; TabOrder := _prop_TabOrder; end else TabStop := False; |
|||
карма: 26 |
|