Текущий архив: 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