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

Вниз

TEdit+TlistBox+AV   Найти похожие ветки 

 
Elast   (2005-02-08 09:15) [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;


 
Чапаев ©   (2005-02-08 09:28) [1]

MyListBox:=TListBox.Create(nil); а так?


 
Elast   (2005-02-08 09:30) [2]

Было и так с тем же результатом.


 
Семен Сорокин ©   (2005-02-08 09:59) [3]

Трабла здесь:
TEdit(Ptr((TListBox(Sender).Tag))).SetFocus;
потому как на Edit1Enter у тебя явно убиваетися Листбокс:
MyListBox.Free

а после MyKeyPress происходит еще KeyUp, т.е. вместо явного Free попробуй указать так:
PostMessage(MyListBox.Handle, CM_RELEASE, 0, 0)


 
Elast   (2005-02-08 10:54) [4]

AV ушло, но я не знаю как закрыть (уничтожить) ЛистБокс. CM_RELEASE этого не делает.


 
Плохиш ©   (2005-02-08 11:07) [5]


procedure TForm1.Edit1Enter(Sender: TObject);
begin
if MyListBox <> nil then
  FreeAndNil(MyListBox);
end;

procedure TForm1.MyKeyPress(Sender : TObject; var Key: Char);
var Id : LongInt;
   tmpEdit: TEdit;
begin
if Key = #13 then begin
  Key := #0;
  tmpEdit := TEdit(Ptr((TListBox(Sender).Tag)));
  tmpEdit.Text := (Sender as TListBox).Items[(Sender as TListBox).ItemIndex];
  tmpEdit.SetFocus;
end;
end;


PS. TComboBox свой пишешь?


 
Семен Сорокин ©   (2005-02-08 11:14) [6]


> Elast   (08.02.05 10:54) [4]
> AV ушло, но я не знаю как закрыть (уничтожить) ЛистБокс.
> CM_RELEASE этого не делает.

не удаляй его, а просто скрой с глаз (Hide or Visible := false), и проверяй в Edit1KeyPress:
if not Assigned(MyListBox) then
MyListBox := TListBox.Create(Self);

и не забудь:
MyListBox.Items.Clear;

:)


 
Elast   (2005-02-08 11:17) [7]

Вообще-то, хотел TEdit приспособить да AV не пускает, т.е. ничего не изменилось...


 
Плохиш ©   (2005-02-08 11:19) [8]

Хм, отладчик в руки и вперёд.


 
Elast   (2005-02-08 11:22) [9]

Хорошо тем у кого отладчик есть. А другие советы по устранению AV?


 
Экспериментатор   (2005-02-08 11:40) [10]

Странно как то строки добавляешь

> Items[0] := "aaa";
>    Items[1] := "bbb";
>    Items[2] := "ccc`";      

Может быть
Items.Add("aaa");
Items.Add("bbb");
Items.Add("ccc");


 
Плохиш ©   (2005-02-08 11:42) [11]

Что в D6 отключены кнопки F7/F8 и средства просмотра значений переменных?


 
Экспериментатор   (2005-02-08 11:51) [12]

вот в MyKeyPress(Sender : TObject; var Key: Char);
и сделай
MyListBox.Free;
а в Edit1Enter(Sender: TObject); не делай ничего.


 
Elast   (2005-02-08 11:53) [13]

Наверное, я не знаю что можно увидеть при MyListBox.Free



Страницы: 1 вся ветка

Текущий архив: 2005.02.20;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.041 c
11-1090761872
OSokin
2004-07-25 17:24
2005.02.20
Чем KOL лучше?


14-1106953523
GanibalLector
2005-01-29 02:05
2005.02.20
Набережных С. - мастер!


6-1102339475
Новенький
2004-12-06 16:24
2005.02.20
Аттач..


9-1100536487
Kobik
2004-11-15 19:34
2005.02.20
Диздок


14-1106820760
Dimedrol
2005-01-27 13:12
2005.02.20
Cordless optical mouse





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