Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.30;
Скачать: CL | DM;

Вниз

Уничтожение 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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.052 c
2-1128845162
!Trinix
2005-10-09 12:06
2005.10.30
Открытие приложений


14-1128680608
__DATA__
2005-10-07 14:23
2005.10.30
Для чего исползуется протокол NetBios?


5-1106759236
Митяй2
2005-01-26 20:07
2005.10.30
Как знать, что мышь покинула кнопку?


2-1128689534
Id
2005-10-07 16:52
2005.10.30
Не могу создать базу


2-1128605830
Толян
2005-10-06 17:37
2005.10.30
Массивы