Форум: "Компоненты";
Текущий архив: 2005.10.30;
Скачать: [xml.tar.bz2];
ВнизУничтожение ListBox Найти похожие ветки
← →
Elast (2005-02-08 18:48) [0]Уважаемые мастера! В соседней ветке я задавал этот вопрос. Попробуюеще раз. В следующем коде я при нажатии в TEdit формирую TListBox и передаю выбранное значение в TEdit, при уничтожении списка получаю AV. Подскажите, где ошибка.
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var TagPtr : Pointer;
begin
MyListBox := TListBox.Create(Self);
with MyListBox do begin
Parent := Panel1;
Tag := LongInt(Sender as TEdit);
OnKeyPress := MyKeyPress;
Items[0] := "aaa";
Items[1] := "bbb";
Items[2] := "ccc`";
SetFocus;
end;
end;
procedure TForm1.Edit1Enter(Sender: TObject);
begin
if MyListBox <> nil then
MyListBox.Free;
end;
procedure TForm1.MyKeyPress(Sender : TObject; var Key: Char);
var Id : LongInt;
begin
if Key = #13 then begin
Key := #0;
TEdit(Ptr((TListBox(Sender).Tag))).Text := (Sender as TListBox).Items[(Sender as TListBox).ItemIndex];
TEdit(Ptr((TListBox(Sender).Tag))).SetFocus;
end;
end;
← →
Cobalt © (2005-02-08 19:47) [1]>MyListBox.Free;
FreeAndNil
Это раз.
← →
Юрий Зотов © (2005-02-08 20:01) [2]Не проверял, но должно работать.
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
with TListBox.Create(Self) do
begin
Parent := Panel1;
Tag := Integer(Sender);
OnKeyPress := MyKeyPress;
Items.Text := "aaa"#13#10"bbb"#13#10"ccc";
SetFocus
end
end;
procedure TForm1.WMUserPlus101(var Message: TMessage);
begin
inherited;
TObject(Message.WParam).Free
end;
procedure TForm1.MyKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
begin
Key := #0;
with TListBox(Sender) do
TEdit(Tag).Text := Items[ItemIndex];
PostMessage(Handle, WM_USER + 101, Integer(Sender), 0)
end
end;
Ответил на вопрос только потому, что он может иметь отношение к разработке компонентов (Edit с выбором из списка). Но в следующий раз примите во внимание, что вопросы, нарушающие тематику конференции могут быть удалены (об чем сказано в правилах). Здесь не свалка и каждый вопрос надо задавать в той конференции, которая ему соответствует.
← →
Elast (2005-02-09 11:30) [3]Юрий Зотов © (08.02.05 20:01) [2]
Спасибо за ответ. Частично Ваши предположения о сути вопроса верны. В соседней ветке длительный диалог ни к чему не привел ...
Я выкрутился сам (наверное, коряво): при покидании ЛистБокса делаю Визибле False, а перед созданием ЛистБокса, при необходимости, его уничтожаю FreeAndNil. Но почему при AV в моем коде (по моей версии) существовала ссылка на объект при отсутствии оного я не понял. Извините за многословие.
Страницы: 1 вся ветка
Форум: "Компоненты";
Текущий архив: 2005.10.30;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.06 c