Форум: "Основная";
Текущий архив: 2004.08.01;
Скачать: [xml.tar.bz2];
ВнизПроблема с 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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.035 c