Вверх ↑
Разработчик
Ответов: 26305
Рейтинг: 2146
#1: 2009-11-08 17:19:34 ЛС | профиль | цитата
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;
------------ Дoбавленo в 17.25:
Dilma писал(а):
В базовом классе делается метод для всех листов

Тоже не катит. Не хотят с таким изменением нормально работать классы Edit, работают нормально только тогда, если не менять главный алгоритм
карма: 22

0