Главная страница
    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.036 c
2-1128588035
The sound
2005-10-06 12:40
2005.10.30
Добавление записи в фаил


2-1128532929
747
2005-10-05 21:22
2005.10.30
Текстовый квест - нужна помощь.


2-1128514304
NightLord
2005-10-05 16:11
2005.10.30
Принтер


14-1128934702
Igorek
2005-10-10 12:58
2005.10.30
Как писать хорошие книги по программированию


1-1128429401
tw
2005-10-04 16:36
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский