Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.02.20;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.664 c
1-1107778004
snowkam
2005-02-07 15:06
2005.02.20
консоль


3-1106645184
DimonNew
2005-01-25 12:26
2005.02.20
Проверить - существует ли параметр в ADOCommand


1-1107260551
Vetal
2005-02-01 15:22
2005.02.20
Посоветуйте Grid и DBGrid пожалуйста


1-1107436283
JohnKorsh
2005-02-03 16:11
2005.02.20
Возможно ли стирание программой своего EXE файла ?


3-1106063063
Asail
2005-01-18 18:44
2005.02.20
Запрет на добавление новых записей через dbGrid ...





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