Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.01;
Скачать: CL | DM;

Вниз

Проблема с Listbox в runtime   Найти похожие ветки 

 
_Dragon ©   (2004-07-15 15:22) [0]

Суть проблемы: создаю форму в runtime, "помещаю" на нее Listbox и кнопу, при нажатии на которую в листбокс должна добавиться строчка. Нажатие - Exeption! Ладно. Попробовал так: TListbox(form.findcomponent("List")). ... - история с Еxeption повторяется. Пробовал через указатель на Items - не проходит. Помогите пожалуйста...


 
clickmaker ©   (2004-07-15 15:26) [1]

полностью код приведи


 
_Dragon ©   (2004-07-18 19:23) [2]

Счас ...



procedure ShowForm;
var Form:TForm;
   List:TListbox;

procedure _OnClick;
begin
List.Items.Add("строка");
end;

begin
Form:=TForm.Create(Application);

 with Form do
  begin
   Left:=100; top:=100;
   Width:=200; Height:=300;
   Color:=$00FFAD;
   BorderStyle:=bsSingle;
   Caption:="Форма";

   List:=TListBox.Create(Form);
    with List do
     begin
      Parent:=Form;
      Align:=alTop;
      Height:=200;
      items.Add("Создание");      // Здесь все работает
     end;

    with TButton.Create(Form) do
     begin
      Parent:=Form;
      width:=100; Height:=25;
      left:=50; top:=220;
      Caption:="Батон";
      Name:="Button";
      @OnClick:=@_Onclick;    // Это место меня волнует больше всего
     end;

    try
     ShowModal;
    Finally
     Free;
    end;
  end;
end;

end.



 
Palladin ©   (2004-07-18 19:27) [3]

1 Обработчик события должен быть методом класса
2 Присваивание проводится без всяких @


 
_Dragon ©   (2004-07-18 19:35) [4]

Угхм... Насчет присваивания адресов процедур: если не трогать Листбокс, то все работает при нажатии на кнопу


 
Sergey Kaminski ©   (2004-07-19 03:00) [5]

Никаких @.
_OnClick должна быть объявлена как procedure _OnClick(Sender: TObject) of object, то есть быть методом класса.


 
_Dragon ©   (2004-07-19 13:12) [6]

Каким образом это сделать??? Delphi ругается на все попытки объявить _onclick методом класса.


 
clickmaker ©   (2004-07-19 13:26) [7]


> _Dragon ©   (19.07.04 13:12) [6]


type
 TForm...
 ...
 private
   procedure _OnClick(Sender: TObject);
 end;
 

procedure TForm._OnClick(Sender: TObject);
begin
 ...
end;


 
_Dragon ©   (2004-07-19 13:34) [8]

Млин ... сделал ... теперь Exeption вылазит при попытке создания формы! Ругается, что не может найти класс TButton, хотя модуль подключен :-(

Вот код:

...
Type TForm1 = class(TForm)
     private
      procedure _Onclick(Sender:TObject);
    end;

procedure TForm1._Onclick(Sender:TObject);
begin
TListBox(Self.FindComponent("List")).Items.Add("??????");
end;

procedure ShowForm;
var Form:TForm1;
   List:TListbox;
begin
Form:=TForm1.Create(Application);
...


 
Анонимщик ©   (2004-07-19 13:45) [9]

Нужно зарегистрировать все классы, которые ты будешь создавать для этой формы.
RegisterClass(TButton);
...
UnRegisterClass(TButon);


 
_Dragon ©   (2004-07-19 13:49) [10]

Опять при создании формы Exeption вылазит, но уже "Invalid property value" что делать?!?!?!?!?!?!?!??!?!


 
Анонимщик ©   (2004-07-19 13:53) [11]

Во-первых, трассировать под отладчиком до последнего.
Во-вторых, в каком именно месте ругается? Что за вэлью с ивалид проперти?


 
_Dragon ©   (2004-07-19 13:56) [12]

Гы ... При трассировке именно на строке
Form:=TForm1.Create(Application);
и вылазит ошибка! А что она значит, я не представляю.


 
Анонимщик ©   (2004-07-19 14:10) [13]

Трассировать до конца - это значит трассировать с исходниками борланда, в т.ч модуль forms.pas (и не только).


 
_Dragon ©   (2004-07-19 14:13) [14]

Понятно...
З.Ы.
Может в Асе поболтаем??? Очень хочется пообщаться со знающим кодером: 311829532


 
Анонимщик ©   (2004-07-19 14:20) [15]

На форум лучше иди


 
_Dragon ©   (2004-07-19 14:22) [16]

я и так здесь


 
Анонимщик ©   (2004-07-19 14:23) [17]

В чат хотел сказать


 
_Dragon ©   (2004-07-19 14:27) [18]

я понял...
Зы: ну и в асю постучать тоже можно...


 
Palladin ©   (2004-07-19 15:16) [19]

Знающих такой неадертальностью мучить не стоит, для подобных случаев существует много литературы, а так же информации в интеренете... за то время пока ты пытался выяснить ответ на этот вопрос сам бы давно уже все нашел...


 
Mim1 ©   (2004-07-19 17:27) [20]


> Попробовал так: TListbox(form.findcomponent("List")). ...
> - история с Еxeption повторяется.

Если список создавался вот таким кодом


>  List:=TListBox.Create(Form);
>     with List do
>      begin
>       Parent:=Form;
>       Align:=alTop;
>       Height:=200;
>       items.Add("Создание");      // Здесь все работает
>      end;


То Findcomponent его не найдет так как он ищет по имени компонента, и у вас оно не определяется. т.е. нехватает
>     with List do
>      begin
name := "List";


 
_Dragon ©   (2004-07-21 01:46) [21]

Sorry, не тот код. Но даже при таком раскладе, обращение к List через Findcomponent все равно приводит к Exeption


 
_Dragon ©   (2004-07-21 01:50) [22]

Кстати, решение подсказал Анонимщик (Greets!) - создать форму статически, убрать ее из списка автосоздаваемых форм, а затем просто создавать ее и кидать все что нужно ...



Страницы: 1 вся ветка

Текущий архив: 2004.08.01;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.052 c
14-1089915956
Piter
2004-07-15 22:25
2004.08.01
Что на улице творится... ужас!


3-1089202599
Zhekson
2004-07-07 16:16
2004.08.01
как при помощи визуальных компон. формировать код SQL?


11-1046110368
KSV
2003-02-24 21:12
2004.08.01
Плагин


6-1086005410
Ruwer, inc.
2004-05-31 16:10
2004.08.01
Как в indy HTTPServer вовремя обработать запрос и послать ответ.


3-1089192594
Fast
2004-07-07 13:29
2004.08.01
Explorer like ComboBox