Главная страница
    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.45 MB
Время: 0.04 c
1-1128432113
Dell3r
2005-10-04 17:21
2005.10.30
Find in DBRichEdit


14-1128763750
Buss
2005-10-08 13:29
2005.10.30
Сайт


9-1118826181
Долгов Артем
2005-06-15 13:03
2005.10.30
Diablo heroes to Image


14-1128840322
Старшеклассник
2005-10-09 10:45
2005.10.30
Расчет IP адресов в локальных сетях


14-1128690438
fran
2005-10-07 17:07
2005.10.30
off top: Есть ли дефрагментатор диска NTFS с кластером 8к?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский