Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
9-1105379372
Trof
2005-01-10 20:49
2005.06.06
Glscene


9-1110432604
Xeno
2005-03-10 08:30
2005.06.06
Редактирование MD2 модели средствами GLScene


3-1114431135
normandia
2005-04-25 16:12
2005.06.06
Запрос по месяцам и кварталам


14-1116578066
lexer
2005-05-20 12:34
2005.06.06
html - cтраница вместо 404 Error "The page cannot be found"


1-1116695621
hasher
2005-05-21 21:13
2005.06.06
можно ли вызвать процедуру по её адресу?





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