Вверх ↑
Этот топик читают: Гость
Ответов: 4291
Рейтинг: 666
#31: 2012-09-26 14:19:18 ЛС | профиль | цитата
Итак, дано фрагмент процедуры TXPMenu._MeasureItem файла XPMenus.pas:

#pas
VAR Bound:integer;
bb:packed record
Height:word;
Width:word;
ShiftWidth:word;
end absolute Bound;
Он значит "Объявить переменную Bound. Объявить структуру bb и разместить её в адресном пространстве переменной Bound (absolute Bound)". Вопрос: каким образом структура размером 6 байт может поместиться в памяти, выделенной для переменной Bound размером 4 байта?
карма: 22

0
Гость
Ответов: 17029
Рейтинг: 0
#32: 2012-09-26 15:04:13 правка | ЛС | профиль | цитата


Редактировалось 4 раз(а), последний 2020-03-01 06:27:17
карма: 0

0
Ответов: 4291
Рейтинг: 666
#33: 2012-09-26 15:09:43 ЛС | профиль | цитата
Не подходит. Packed значит, что поля типа word (2 байта) не будут автоматически дополнены до Dword (4 байта) в целях оптимизации (в зависимости от настроек компилятора). Размер структуры всёравно будет 6 байт (без Packed мог бы быть 8, но не меньше 6-ти).

------------ Дoбавленo:
Работают MenuEx, PopupMenuEx
Работает ProgressBarRush
карма: 22

1
Голосовали:Konst
Ответов: 210
Рейтинг: 52
#34: 2012-09-29 17:25:51 ЛС | профиль | цитата
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
слтв
0
Ответов: 4291
Рейтинг: 666
#35: 2012-09-29 22:04:07 ЛС | профиль | цитата
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;

карма: 22

0
Ответов: 210
Рейтинг: 52
#36: 2012-09-30 13:07:34 ЛС | профиль | цитата
Netspirit писал(а):
не смог установить, где именно в KOL возникает эта ошибка

искать не стоит...
Книга о KOL (с.9) писал(а):
при инициализации объектов ни в коем случае нельзя инициализировать все возможные поля (которые, в свою очередь, являются объектами). Эту операцию следует по возможности откладывать "на потом". Например, при создании визуального объекта в KOL инициализация шрифта для окна этого объекта выполняется в самом минимальном возможном объеме. Т.е., шрифт "наследуется" от родительского оконного объекта, при этом, на самом деле, вызывается заглушка - указатель на функцию, которая начинает указывать на действительную функцию, только если в программе модифицировался хотя бы один параметр шрифта.

карма: 1
слтв
0
Ответов: 258
Рейтинг: -27
#37: 2012-09-30 21:02:30 ЛС | профиль | цитата
У меня с этим компилятором прога стала запускаться в 2 раза быстрее, но не работает onmouseleave в Edit или SetFocus в Label

(у меня фокус в проге должен был переноситься в Edit на Label, так это перестало работать, хотя это не важно)
------------ Дoбавленo в 20.59:
и ещё один плюс нового компилятора в том что virustotal теперь вирусов не видит в каждом полученном exe файле
------------ Дoбавленo в 21.01:
будет ли когда-нибудь доступна компиляция для x64 ?
карма: 0

0
Ответов: 4291
Рейтинг: 666
#38: 2012-10-01 11:04:50 ЛС | профиль | цитата
Сборка программ для x64 пока сложнореализуема. И просто любопытно, зачем Label фокус?
------------ Дoбавленo в 11.04:
Cubone писал(а):
не работает onmouseleave в Edit

Не подтверждается.
карма: 22

0
Ответов: 258
Рейтинг: -27
#39: 2012-10-01 16:07:51 ЛС | профиль | цитата


Netspirit писал(а):
И просто любопытно, зачем Label фокус

ну не важно но на старом компиляторе фокус перемещался на label с вот такой схемой

code_29210.txt
карма: 0

0
файлы: 1code_29210.txt [480B] [278]
Гость
Ответов: 17029
Рейтинг: 0
#40: 2012-10-01 16:30:24 правка | ЛС | профиль | цитата


Редактировалось 4 раз(а), последний 2020-03-01 06:27:17
карма: 0

0
Ответов: 4291
Рейтинг: 666
#41: 2012-10-01 16:33:34 ЛС | профиль | цитата
А никому не кажеться, что в 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

карма: 22

0
Разработчик
Ответов: 25651
Рейтинг: 2085
#42: 2012-10-01 17:14:49 ЛС | профиль | цитата
Netspirit писал(а):
А никому не кажеться, что в Win.pas в процедуре THIWin.Init должно быть

Тогда -1 работать не будет, только что проверил
карма: 19

0
Ответов: 4291
Рейтинг: 666
#43: 2012-10-01 17:19:47 ЛС | профиль | цитата
А если еще сделать:
if _prop_TabOrder <> 0 then

А отрицательные TabOrder вообще корректно работают?
карма: 22

0
Разработчик
Ответов: 25651
Рейтинг: 2085
#44: 2012-10-01 17:22:46 ЛС | профиль | цитата
Netspirit, а на кой черт это вообще надо, я че-то не совсем понял. Че должно дать условие if _prop_TabOrder <> 0
карма: 19

0
Ответов: 4291
Рейтинг: 666
#45: 2012-10-01 17:27:35 ЛС | профиль | цитата
Просто изначальный фрагмент какой-то непонятный. Мне показалось, что должно быть (с учетом твоего замечания):
if _prop_TabOrder <> 0 then begin
   Style := Style or WS_TABSTOP;
   LookTabKeys := [tkTab];
   TabOrder := _prop_TabOrder;
end else
   TabStop := False;

карма: 22

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)