Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Компоненты";
Текущий архив: 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
2-1128090671
Profik
2005-09-30 18:31
2005.10.30
MailSlot


14-1128440750
LordOfRock
2005-10-04 19:45
2005.10.30
Наткнулся в Интернете...


4-1121785751
Valera
2005-07-19 19:09
2005.10.30
При перехвате сообщения WMEraseBkgnd получаю HDC больше Integer


4-1125233954
Станислав
2005-08-28 16:59
2005.10.30
Фоновое окно


2-1128666945
Wolferio
2005-10-07 10:35
2005.10.30
Печать на матричные принтера





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский