Autor Beitrag
check_it_now
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Mi 18.12.02 16:33 
guten tag,

wenn ich mir die eigenschaften von comboboxen, label, textboxen usw. ansehe kann ich keine moeglichkeit einer idizierung entdecken. ist das bei delphi so?

bsp vb6.
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
for i = 1 to 4
     combobox(i).text="123"
next i
for i = 5 to 8 
     combobox(i).text="xyz"
next i

damit fuelle ich gezielt z.b default infos in combobox 1-4
und andere infos in combobox 5-8 ohne diese separat ansprechen zu muessen.

was muss ich dafuer bei delphi tuen.

note: comboboxen sind nur ein beispiel.

_________________
cu check_it_now
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Mi 18.12.02 16:44 
Hallo

such mal im Forum und in der hilfe nach Findcomponent.

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)


Zuletzt bearbeitet von Keldorn am Mi 18.12.02 16:44, insgesamt 1-mal bearbeitet
DeCodeGuru
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1333
Erhaltene Danke: 1

Arch Linux
Eclipse
BeitragVerfasst: Mi 18.12.02 16:44 
Hi,

versuchs mal damit:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
var
  i: Integer;
begin
  for i := 1 to 99 do
  begin
    TCheckBox(FindComponent('CheckBox'+IntToStr(i))).Caption := 'Testnummer'+IntToStr(i);
  end;
end;


Ich denke, dass das Beispiel gut zeigt, wie man per Name auf ne Kompo zugreifen kann.

_________________
Viele Grüße
Jakob
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Mi 18.12.02 17:09 
Hallo,

das dir aus Visual-Basic bekannte Konzept der Komponentenarrays gibt es im Delphi nicht. Das wird für dich wahrscheinlich genau so störent sein, wie es für mich war, das VB meine Copy/Paste Komponenten immer in so'n Ding gehängt hat.

Die Lösung von DeCodeGuru ist das, was am dichtesten rankommt. Aber du solltest das ganze noch ein wenig absichern, um keine Exceptions zu verursachen:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
var
  i: Integer;
  Compo : tComponent;
begin
  for i := 1 to 99 do begin
    Compo := FindComponent('CheckBox'+IntToStr(i));
    IF (Compo <> NIL) THEN // Komponente wurde gefungen
      IF (Compo IS tCheckBox) THEN // Wenn es sich um eine Checkbox handelt
        TCheckBox(Compo).Caption := 'Testnummer'+IntToStr(i)
      ELSE IF (Compo IS tEdit) THEN // Wenn es ein Edit ist
        TEdit(Compo).Text := 'Testnummer'+IntToStr(i);
  end;
end;


Gruß
Klabautermann
check_it_now Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Do 19.12.02 09:01 
ok dann muss ich umdenken

danke @all

_________________
cu check_it_now
Andreas.Schmid
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Do 19.12.02 17:34 
Hallo @All,

ich hätte da vielleicht eine noch bessere Lösung zu bieten!

Wenn du nämlich die Namen der Komponenten nicht kennst, sondern nur den Typ und diese trotzdem ansprechen willst, dann könnte meine Lösung dir weiter helfen.

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
var
  i: integer;
begin
  for i := 0 to (self.ComponentCount - 1) do begin
    if (self.Components[i] is TComboBox) then begin
      TComboBox(self.Components[i]).{hier können alle Eigenschaften der ComboBox angesprochen werden}
    end;
  end;
end;

TComboBox kannst du durch jede beliebige visuelle Komponente ersetzten.

Besonders wichtig ist aber, dass die Sicherheit gegeben ist und du keine Komponente finden kannst, die es nicht gibt. :D

Ist das, das was du wolltest oder hab ich da etwas falsch verstanden?

_________________
Noch viel Spaß!!!
Andreas Schmid
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Do 19.12.02 17:48 
Nachtrag: Wenn du viele Komponenten Dynamisch erzeugst (und das ist meiner bescheidenen Meinung nach der Einzige sinnvolle einsatz der Indizierten Komponenten) Kannst du übrigens ein Array OF MyCompo definieren und über deren Indizies drauf zudreifen.
Ein (ungetestetes) Beispiel:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
private
  fLabels : ARRAY[1..100] OF tLabel;
[...]

procedure MkLabels;
  VAR
     i : Byte;
begin
  FOR i := 1 TO 100 DO BEGIN
    fLabels[i] := tLabel.Create(MainForm);
    fLabels[i].Left := 25;
    fLabels[i].Top := i * 30;
  END;
end;

procedure SetText(lbl : Byte; TXT : STRING);
begin
  fLabels[lbl].Caption := TXT;
end;


Gruß
Klabautermann