Главная страница
    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.043 c
14-1106762330
Nic87
2005-01-26 20:58
2005.02.20
Появился новый сайт по программированию!


1-1107790807
Алекс
2005-02-07 18:40
2005.02.20
Как программно нарисовать стрелку?


1-1107752017
dreamse
2005-02-07 07:53
2005.02.20
Как узнать что программа запущена с компакт диска ?


1-1107869503
Endy
2005-02-08 16:31
2005.02.20
ListBox + Win98 + много элементов = ошибка


14-1105952859
Denis_
2005-01-17 12:07
2005.02.20
Как установить Windows Xp на NTFS





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