Главная страница
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.49 MB
Время: 0.027 c
4-1105366282
SiDoff
2005-01-10 17:11
2005.02.20
Как узнать что написано в строке адреса у проводника ...


1-1107762699
syte_ser78
2005-02-07 10:51
2005.02.20
опять о систрее


14-1107042303
i-s-v
2005-01-30 02:45
2005.02.20
Помогите с Corel Ventura 4.0


14-1107325755
Zhekson
2005-02-02 09:29
2005.02.20
Как получить изофоту из массива значений?


1-1107707185
Mr-JAck
2005-02-06 19:26
2005.02.20
перевод градусов от одного вида к другому.