Форум: "Основная";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];
ВнизДинамическое создание кнопок Найти похожие ветки
← →
Destroyer (2004-06-23 17:40) [0]Я создаю динамически кнопки в своей процедуре :
procedure createbuttons;
var mainbuttons:array [1..42] of TSpeedButton;
begin
mainbuttons[n]:=tSpeedButton.create(self);!!!
// ^--здесь ругается на self, undeclared undentifier
mainbuttons[n].top:=1;
mainbuttons[n].left:=mainbuttons[n].width+2;
mainbuttons[n].Parent:=form1.panel3;
end;
Как сделать так, чтобы компилятор не ругался?
← →
YurikGL © (2004-06-23 17:42) [1]
> // ^--здесь ругается на self, undeclared undentifier
поставь application.
← →
Destroyer (2004-06-23 17:58) [2]В каком месте?
← →
YurikGL © (2004-06-23 18:02) [3]
> mainbuttons[n]:=tSpeedButton.create(self);
mainbuttons[n]:=tSpeedButton.create(application);
← →
TUser © (2004-06-23 18:18) [4]А self ты действительно не определил. В классе TForm1 али еще где-нибудь, self - это данный экземпляр класса. А здесь у тебя класса нет.
← →
Aramis (2004-06-23 19:11) [5]Еще один выход из положения
В определений класса Tform1 (например, до PRIVATE)поставь обьявление:
procedure createbuttons;
а заголовок твоей процедуры переделай так:
procedure tform1.createbuttons;
begin
//тут на self ругаться не будут уже :)
end;
← →
Destroyer (2004-06-23 19:20) [6]Всем спасибо!
← →
Destroyer (2004-06-23 21:59) [7]И еще вопрос.
Я создал динамически много кнопок и эдитов, теперь надо при нажатии на каждую кнопку считать из соответствующего эдита текст. Например при нажатии на первую кнопку считывается текст из первого эдита и т.д. Я делал так:
procedure createbuttonsCD;
begin
mainbuttons[nCD]:=tSpeedButton.create(application);
mainbuttons[nCD].left:=nCD*mainbuttons[nCD].width+5;
mainbuttons[nCD].OnClick:=form1.specmainbuttonCDclick;
mainbuttons[nCD].Parent:=form1.panel1;
end;
mainbuttons - массив из кнопок
событию OnClick присваивается событие скрытой кнопки form1.specmainbuttonCDclick :
procedure TForm1.specmainbuttonCDClick(Sender: TObject);
begin
showmessage(editCD[nCD].Text);
end;
nCD - это номер элемента массива кнопок.
Но так у меня при нажатии на любую кнопку выводится текст эдита под номером nCD, а я хочу чтобы выводился текст эдита под номером соответствующим этой кнопке.
Есть мысли?
А есть какой-нибудь способ без использования скрытой кнопки?
← →
GuAV © (2004-06-23 22:02) [8]
> А есть какой-нибудь способ без использования скрытой кнопки?
Удали ёе, она уже не нужна :)
> Есть мысли?
Tag. свойтво Tag.
← →
YurikGL © (2004-06-23 22:08) [9]Использовал двухмерный массив
//объявление типа
TMyButton=class(TBitBtn)
public
lev, num:integer;
end;
//создание кнопок
Buttons[2,i1]:=TMyButton.Create(Form1);
Buttons[2,i1].OnClick:=OnClickProc;
Buttons[2,i1].num:=i1;
Buttons[2,i1].lev:=2;
//процедура обработки нажатия
Procedure TForm1.OnClickProc(Sender :TObject);
with Form1.ActiveControl as TMyButton do begin
n:=num;
l:=lev;
end;
теперь в n и l имеем координаты нажатой кнопки и по ним выполняем нужные действия
← →
Destroyer (2004-06-23 23:23) [10]
> Tag. свойтво Tag.
Tag можно будет узнать только задав номер элемента массива, а мне нужно по Tag узнавать номар элемента массива.
> Использовал двухмерный массив
А можно, пожалуйста, поподробнее. Что за двухмерный массив (var Buttons[1..n,1..2] of TMyButton ?)
Почему используем именно 2 в Buttons[2,i1] ?
Что такое i1?
← →
GuAV © (2004-06-23 23:42) [11]Tag. свойтво Tag. TComponent(Sender).Tag
← →
GuAV © (2004-06-23 23:47) [12]А чтоб всё стало совсем понятно:
mainbuttons[nCD].Tag:=nCD;
...
mainbuttons[TComponent(Sender).Tag].Parent:=form1.panel1;
YurikGL © (23.06.04 22:08) [9]
Я бы в tag втулил два SmallInt. Ну вот нравится мне этот Tag :)
← →
jack128 © (2004-06-23 23:55) [13]
> mainbuttons[TComponent(Sender).Tag].
тебе не кажется, что это эквивалентно TSpeedButton(Sender) ?
а выводить текст (учитывая mainbuttons[nCD].Tag:=nCD;)
ShowMessage(editCD[TComponent(Sender).Tag].Text);
← →
Destroyer (2004-06-23 23:55) [14]
> Tag. свойтво Tag. TComponent(Sender).Tag
Спасибо!!! Пойду обрабатывать.
← →
GuAV © (2004-06-23 23:58) [15]
> тебе не кажется, что это эквивалентно TSpeedButton(Sender)
> ?
Я же написал:
> Ну вот нравится мне этот Tag :)
Конечно, ты прав, я уже туплю...
← →
Destroyer (2004-06-24 00:00) [16]2 jack128 да, именно это и кажется, спасибо! Все работает!
← →
evvcom © (2004-06-24 09:04) [17]Блин, Вы чё? Какой Tag? Чего парню мозги пудрите?
procedure TForm1.specmainbuttonCDClick(Sender: TObject);
begin
if Sender is TSpeedButton then
ShowMessage(TSpeedButton(Sender).Text);
end;
И никаких Tag! Не нужен он здесь.
← →
YurikGL © (2004-06-24 09:11) [18]
> А можно, пожалуйста, поподробнее. Что за двухмерный массив
> (var Buttons[1..n,1..2] of TMyButton ?)
> Почему используем именно 2 в Buttons[2,i1] ?
> Что такое i1?
Да, у меня в программе двухмерный массив [1..n,1..3] три уровня кнопок.
В предложенном коде создавался второй уровень в цикле
for i1:=1 to n do begin
Buttons[2,i1]:=TMyButton.Create(Form1);
Buttons[2,i1].OnClick:=OnClickProc;
Buttons[2,i1].num:=i1;
Buttons[2,i1].lev:=2;
...
end.
Для любого элемента Buttuns[i,j] имеем
Buttuns[i,j].num=j
Buttuns[i,j].lev=i
и по num и lev я потом узнаю, какая кнопка была нажата.
← →
evvcom © (2004-06-24 09:29) [19]
> какая кнопка была нажата
это Sender без дополнительного огорода
← →
YurikGL © (2004-06-24 10:13) [20]
> evvcom © (24.06.04 09:29) [19]
А как отличить одну от другой т.е как узнать ее номер в массиве?
← →
evvcom © (2004-06-24 10:38) [21]
> т.е как узнать ее номер в массиве
Это действительно удобно сделать через Tag, но автор вопроса и не ставил такой задачи. Ему нужно было получить доступ к свойству нажатой кнопки, а для этого не требуется знать местоположение кнопки в созданном массиве.
← →
Anatoly Podgoretsky © (2004-06-24 10:53) [22]Но автор вообще ставил другой вопрос, напоминаю "Как сделать так, чтобы компилятор не ругался?"
← →
YurikGL © (2004-06-24 10:55) [23]Автор еще спрашивал"В каком месте?"
:)
← →
evvcom © (2004-06-24 11:08) [24]
> Но автор вообще ставил другой вопрос,
В посте [7] автор задал дополнительный вопрос. Соглашусь, что по правилам он должен был сделать это в отдельном топике.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.034 c