Главная страница
    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.038 c
3-1106404347
sloug
2005-01-22 17:32
2005.02.20
есть код программы


14-1107349002
Nifrit
2005-02-02 15:56
2005.02.20
проблема с Com портом


14-1107074354
Sniper-Max
2005-01-30 11:39
2005.02.20
Win9x, Win2K и сеть... тормозят в месте по сетке :(


1-1107727510
Raider
2005-02-07 01:05
2005.02.20
Как сделать так


14-1107255697
Dimedrol
2005-02-01 14:01
2005.02.20
Мелодию конвертнуть в "кнопки" для Nokia





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