Dilma писал(а):
В базовом классе делается метод для всех листов. В классе для ListBox он перекрывается с таким кодом:Не работает, я уже проверял. Вызов нужно делать только перед самим добавлением, иначе, любое обращение к очереди возвращает память на место. Вот так можно сделать в WinList-e, и это работает для обоих методов: и doText, и doLoad
procedure THIWinList.SetStrings;
var
List:PStrList;
i:integer;
aName: array [0..255] of Char;
begin
Control.Perform(WM_SETREDRAW, 0, 0);
List := NewStrList;
List.SetText(Value, false);
Control.Clear;
if List.Count > 0 then
begin
GetClassName(Control.Handle, aName, 256);
if string(aName) = 'obj_LISTBOX' then
begin
Control.Perform(LB_INITSTORAGE, 0, Length(List.Text));
for i := 0 to List.Count - 1 do
Control.Perform(LB_ADDSTRING, 0, cardinal(PChar(List.Items[i])));
end
else if string(aName) = 'obj_COMBOBOX' then
begin
Control.Perform(CB_INITSTORAGE, 0, Length(List.Text));
for i := 0 to List.Count - 1 do
Control.Perform(CB_ADDSTRING, 0, cardinal(PChar(List.Items[i])));
end
else
for i := 0 to List.Count-1 do
Control.Add(List.Items[i]);
end;
List.free;
Control.Perform(WM_SETREDRAW, 1, 0);
end;
Dilma писал(а):
В базовом классе делается метод для всех листовТоже не катит. Не хотят с таким изменением нормально работать классы Edit, работают нормально только тогда, если не менять главный алгоритм