Форум: "Основная";
Текущий архив: 2005.06.06;
Скачать: [xml.tar.bz2];
ВнизКак динамически добавить в форму GroupBox Найти похожие ветки
← →
FANAT © (2005-05-19 14:26) [0]Как динамически добавить в форму GroupBox с динамическими объектами внутри (например LabeledEdit)...
я написал такой код, но что то у меня не получается:
procedure TForm1.N1Click(Sender: TObject);
begin
with TGroupBox.Create(self) do begin
Parent:=Form1;
Name:="GroupBox1";
Caption:="Авторизация";
Left:=256;
Top:=104;
Height:=177;
Width:=153;
with TLabeledEdit.Create(self) do begin
Parent:=GroupBox;
Name:="LabeledEdit1";
LabeledEdit.EditLabel.Caption:="Логин";
Left:=16;
Top:=32;
Height:=21;
Width:=121;
end;
end;
end;
end.
Подскажите пожалуйста где я ошибся?!
Спасибо!
← →
Ega23 © (2005-05-19 14:30) [1]Удалено модератором
← →
Ega23 © (2005-05-19 14:31) [2]тьфу, теги сбились.
Вот так:
procedure TForm1.N1Click(Sender: TObject);
var
grb:TGroupBox
begin
grb:=TGroupBox.Create(Self);
with grb do begin
Parent:=Form1;
Name:="GroupBox1";
Caption:="Авторизация";
Left:=256;
Top:=104;
Height:=177;
Width:=153;
with TLabeledEdit.Create(self) do begin
Parent:=grb;
Name:="LabeledEdit1";
LabeledEdit.EditLabel.Caption:="Логин";
Left:=16;
Top:=32;
Height:=21;
Width:=121;
end;
end;
end;
end.
← →
Alexander Panov © (2005-05-19 14:31) [3]FANAT © (19.05.05 14:26)
Вот пример, почему не надо использовать где попало оператор with.
← →
Ega23 © (2005-05-19 14:34) [4]Удалено модератором
Примечание: ок
← →
FANAT © (2005-05-19 14:35) [5]Огромное спасибо!
← →
FANAT © (2005-05-19 14:50) [6]Еще один вопрос (продолжение)
а как в нажать созданную динамически кнопку в GroupBox
и как потом уничтожить GroupBox
← →
Ega23 © (2005-05-19 15:07) [7]2 FANAT © (19.05.05 14:50) [6]
а как в нажать созданную динамически кнопку в GroupBox
Вот, буквально полчаса назад было:
http://delphimaster.net/view/1-1116316393/
ки кнопку в GroupBox
1. grb:=TGroupBox.Create(Self); Self (в данном случае Self=Form1) выступает в качестве владельца (Owner) данного контрола. При "убийстве" формы произойдёт каскадное удаление всех компонентов, ей принадлежащих. Т.е., если ты удаляешь этот групбокс вместе с формой, то можешь смело забыть.
2. Для того, чтобы его просто удалить, нужно знать указатель на него. Для этого можно поступить:
а) Вынести описание grb:TGroupBox в свойство формы, а не внутри метода. Тогда область видимости grb будет в пределах всей формы, а не одного метода N1Click.
б) При создании GroupBox задать ему имя. Ты его задаёшь как "GroupBox1"; Теперь нужно его найти в списке компонентов формы:
for i:=0 to Form1.ComponentCount-1 do
begin
if (Components[i] is TGroupBox) then
if ANSIUpperCase(Trim(TGroupBox(Components[i]).Name))="GROUPBOX1" then
begin
TGroupBox(Components[i]).Free;
Break;
end;
end;
← →
HSolo © (2005-05-19 15:09) [8]http://www.delphikingdom.com/asp/viewitem.asp?catalogid=342
← →
FANAT © (2005-05-20 09:59) [9]Ребята...
Извените... но что то у меня все равно не получается. Я вот первый раз с динамическими обьектами работаю...
ни как я не нажму кнопку!
как при нажатии на button1 (динамическая) считать данные из LabeledEdit1.Text ?
у меня вот такой код... где я ошибаюсь (заблуждаюсь, торожу)...
var
Form1: TForm1;
GroupBox:TGroupBox;
LabeledEdit:TLabeledEdit;
grb:TGroupBox ;
Button1,Button2: TButton;
implementation
//uses Unit1;
{$R *.dfm}
procedure TForm1.N1Click(Sender: TObject);
var
grb:TGroupBox ;
Button1,Button2: TButton;
begin
grb:=TGroupBox.Create(Self);
with grb do begin
Parent:=Form1;
Name:="GroupBox1";
Caption:="Àâòîðèçàöèÿ";
Left:=256;
Top:=104;
Height:=177;
Width:=153;
with TLabeledEdit.Create(self) do begin
Parent:=grb;
Name:="LabeledEdit1";
EditLabel.Caption:="Ëîãèí";
Text:="";
Left:=16;
Top:=32;
Height:=21;
Width:=121;
with TLabeledEdit.Create(self) do begin
Parent:=grb;
Name:="LabeledEdit2";
EditLabel.Caption:="Ïàðîëü";
Text:="";
PasswordChar:="*";
Left:=16;
Top:=72;
Height:=21;
Width:=121;
with TButton.Create(self) do begin
Parent:=grb;
Name:="Button1";
Action:=Action1;
Caption:="Îê";
Left:=16;
Top:=104;
Height:=25;
Width:=121;
with TButton.Create(self) do begin
Parent:=grb;
Name:="Button2";
Action:=Action2;
Caption:="Îòìåíà";
Left:=16;
Top:=136;
Height:=25;
Width:=121;
end;
end;
end;
end;
end;
end;
procedure TForm1.N2Click(Sender: TObject);
begin
Application.Terminate;
end;
procedure TForm1.Action1Execute(Sender: TObject);
var
text:string;
begin
text:=LabeledEdit1.Text;
MessageDlg(text,
mtConfirmation,
[mbOK],
0);
end;
Спасибо всем кто уделяет мне время!
← →
Ega23 © (2005-05-20 10:03) [10]А что, разве не работает?
← →
FANAT © (2005-05-20 10:09) [11]неа...
ни как?
а что я правильно написал?
вообще она ругается на LabeledEdit1 ... не знаю почему... она же у меня описана :(
← →
Ega23 © (2005-05-20 10:36) [12]А... вот в чём дело...
LabeledEdit1 у тебя НИГДЕ не описана.
var
LabeledEdit1:TLabeledEdit;
в этом случае LabeledEdit1 - УКАЗАТЕЛЬ НА КЛАСС
with TLabeledEdit.Create(self) do begin
Parent:=grb;
Name:="LabeledEdit1";
В этом случае LabeledEdit1 - всего лишь 12 символов в поле объекта.
Чуешь разницу?
А надо тогда так:
procedure TForm1.Action1Execute(Sender: TObject);
var
text:string;
i:Integer;
begin
for i:0 to ComponentCount-1 do
if (Components[i] is TLabeledEdit) then
if TLabeledEdit(Components[i]).Name="LabeledEdit1" then
text:=TLabeledEdit(Components[i]).Text;
MessageDlg(text,
mtConfirmation,
[mbOK],
0);
end;
← →
Ega23 © (2005-05-20 10:37) [13]if ANSIUpperCase(TLabeledEdit(Components[i]).Name)=ANSIUpperCase("LabeledEdit1") then
← →
FANAT © (2005-05-20 10:49) [14]Вы волшебник!
← →
Ega23 © (2005-05-20 10:54) [15]Вы волшебник!
Нет, я лишь учусь... :о)
← →
FANAT © (2005-05-20 12:56) [16]А научи меня как уничтожить этот GroupBox.
я написал как ты учил :-)
procedure TForm1.Action1Execute(Sender: TObject);
var
user,login:string;
i:Integer;
begin
for i:=0 to ComponentCount-1 do
if (Components[i] is TLabeledEdit) then
if TLabeledEdit(Components[i]).Name="LabeledEdit1" then
user:=TLabeledEdit(Components[i]).Text;
for i:=0 to ComponentCount-1 do
if (Components[i] is TLabeledEdit) then
if TLabeledEdit(Components[i]).Name="LabeledEdit2" then
login:=TLabeledEdit(Components[i]).Text;
if Form1.Table1.Locate("ПользовательЛогин",user,[])and
(Form1.Table1.FieldByName("ПользовательПароль").AsString=login) then
begin
if ANSIUpperCase(TGroupBox(Components[i]).Name)=ANSIUpperCase("GroupBox1") then
begin
GroupBox.Free;
Form1.N3.visible:=True;
Form1.N7.visible:=True;
end;
но почему то это FREE не работает.
пробывал и grb.free - тажа анамалия
← →
Ega23 © (2005-05-20 13:33) [17]if ANSIUpperCase(TGroupBox(Components[i]).Name)=ANSIUpperCase("GroupBox1") then
Конечно не работает. Это в контексте цикла:
for i:=0 to ComponentCount-1 do
if (Components[i] is TGroupBox) then
if ANSIUpperCase(TGroupBox(Components[i]).Name)=ANSIUpperCase("GroupBox1") then
begin
TGroupBox(Components[i]).Free;
Form1.N3.visible:=True;
Form1.N7.visible:=True;
Break; // Это чтобы дальше по циклу не бегать. Да и ComponentCount уменшится...
end;
А ANSIUpperCase() - это потому, что строки "GroupBox1" и "groupbox1" - разные. А так ты их к верхнему регистру приведёшь.
← →
FANAT © (2005-05-20 19:01) [18]А я все усложняю до неузноваемости....
вот теперь запутался в массивах...
вот код:
procedure TForm1.Button1Click(Sender: TObject);
begin
n:=StrToInt(Edit1.Text);
for i:=1 to n do
begin
Agrb[i]:=TGroupBox.Create(Form1);
Agrb[i].Parent:=Form1;
Agrb[i].Name:="Agrb"+IntToStr(i);
Agrb[i].Top:=50+68*(i-1);
Agrb[i].Left:=5;
Agrb[i].Width:=500;
Agrb[i].Height:=65;
Agrb[i].Caption:="Длина №"+IntToStr(i);
.....
Здесь создается всякого барахла в GroupBox .... потом
.....
btn:=TButton.Create(self);
btn.Parent:=Agrb[i];
btn.Name:="btn_"+IntToStr(i);
btn.Top:=14;
btn.Left:=416;
btn.Width:=76;
btn.Height:=41;
btn.Action:=Form1.Action1;
btn.Caption:="Внести";
.....
А вот в Action я вставил такой код:
procedure TForm1.Action1Execute(Sender: TObject);
var
i:integer;
begin
for i:=0 to ComponentCount-1 do
if (Components[i] is TButton) then
if TButton(Components[i]).Name=("btn_"+IntToStr(i)) then
.... А вот здесь собственно и вся загвоздка...
не знаю как при нажатии кнопки принадлежащей GroupBox сделать эту самую GroupBox.Visible:=False;
хотя я думаю что if TButton(Components[i]).Name=("btn_"+IntToStr(i)) - тоже не правильно...
← →
FANAT © (2005-05-20 21:16) [19]И если можно подскажите как заполнить все ComboBox данными из таблицы?
вот мой код
cbox:=TComboBox.Create(self);
cbox.Parent:=Agrb[i];
cbox.Name:="cbox_"+IntToStr(i);
cbox.Top:=32;
cbox.Left:=96;
cbox.Width:=73;
cbox.Height:=21;
with table1 do begin
open;
while not EOF do
begin
cbox.items.add(FieldByName("ТипОВ").AsString);
next;
end;
у меня заполняется только первый комбик а последующие не заполняются...
← →
FANAT © (2005-05-23 08:36) [20]Это я со своим головником....
вот написан код....
в нем создается массив комбиков....
но вот не задача, ни как не соображу что бы они выходили 3х4 , а то максимум тут 12 должно быть, и если они выходят то за пределы экрана....
и еще наверное самое сложное...
как каждому комбику дать ссылку на одну и туже таблицу?
у меня получилось только в первом комбике, не знаю почему....
procedure TForm1.Button2Click(Sender: TObject);
var frm: TForm;
lbl: TLabel;
Agrbclr: Array[1..12] of TGroupBox ;
cboxclr: TComboBox;
lbclr: TLabel;
clrbtn:TButton;
TopMax:Integer;
grbclr:TGroupBox;
begin
m:=StrToInt(Edit2.Text);
frm:=TForm.Create(Application);
frm.Hide;
frm.BoundsRect:=Rect(300,200,200,200);
frm.Name:="frmCLR";
pnlclr:=TPanel.Create(self);
pnlclr.Parent:=frm;
pnlclr.Name:="pnlclr";
pnlclr.Top:=1;
pnlclr.Left:=1;
pnlclr.AutoSize:=True;
TopMax:=0;
for i:=1 to m do
begin
Agrbclr[i]:=TGroupBox.Create(pnlclr);
Agrbclr[i].Parent:=pnlclr;
Agrbclr[i].Name:="Agrbclr_"+IntToStr(i);
Agrbclr[i].Top:=5+45*(i-1);
Agrbclr[i].Left:=5;
Agrbclr[i].Width:=110;
Agrbclr[i].Height:=45;
Agrbclr[i].Caption:=" Цвет "+IntToStr(i)+" волокна";
TopMax:=Agrbclr[i].Top+40;
cboxclr:=TComboBox.Create(self);
cboxclr.Parent:=Agrbclr[i];
cboxclr.Name:="cboxclr_"+IntToStr(i); //
cboxclr.Top:=16;
cboxclr.Left:=4;
cboxclr.Width:=100;
cboxclr.Height:=21;
cboxclr.Text:="";
with table2 do begin
open;
while not EOF do
begin
cboxclr.items.add(FieldByName("Цвет").AsString);
next;
← →
Anatoly Podgoretsky © (2005-05-23 09:02) [21]Бабушка дай воды напиться ...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.06.06;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.013 c