Archiv verlassen und diese Seite im Standarddesign anzeigen : Labels als Array?!?
Hi,
hat einer ne Ahnung, wie man in Delphi Labels als Array deklariern kann?
In VBasic ist das einfach (Label auswählen --> STRG+C --> STRG+V und sch will er wissen, ob er ein Array anlegen soll.)
Schön wärs, wenn das in Delphi auch funktionieren würde.
D-Fisch
Hmm.. was genau willst du denn damit erreichen?
Du kannst das Array ja einfach von Hand machen, musst halt vorher alle Labels machen und dann ein Array draus :)
mfg, Agent
OK, zur not kann man sie von Hand machen, aber wenn ich das gemacht habe, wie fasse ich z.b. Label1 bis Label10 zu einem Array zusammen.
In VB sah das so aus: Label1[1] bis z.b. Label1[10], dann konnte man im Code nämich Label1[i] oder sowas schreiben (i ist eine Variable).
Das ist in Schleifen z.B. sehr sehr hilfreich!
Hmm.. ich check ncih, was dir das bringen soll.. wann will ich denn in Schleigen auf Labels zugreifen.. und wenn doch, dann weiß ich dessen Name.. aber mir ist das noch nie in Delphi begegnet.. mglicherweise versteh ich auch ned ganz was du willst..
Beschreib mal ganz konkret ein Miniprogramm, wo dass zur Anwendung käme.. vielleicht hilfts :)
Cya
Das Programm, das ich machen will:
es soll als RechenTrainer funktionieren, und so aufgebaut sein:
2 + 4 = 5 (rote Linie) 6
1.Zahl | Zeichen | 2.Zahl | =Zeichen | eingegebenes Ergebnis | senkr. Linie (rot für falsch) |richtiges Ergebnis
Label1[i] | Label2[i] | Label3[i]| Label4[i] | Label5[i] | Line1[i] | Label6[i]
(so ists in VB)
Das Alles muss in einer Zeile stehen!
und das min. 20 mal (für 20 Rechnungen).
Das Ganze Programm ist eine for-Schleife und wird ca. 20-mal durchlaufen!
Tjoa.. aber das sind doch keine Labels sondern Eingabefelder.. man muss ja die Zahlen auch eingeben können..
Aber das Prinzip hab ich jetzt kapiert.. nur... was muss alles in einer Zeile stehen? Der Code für die Ausgabe? Oder die besagte Zeile?
Und wann soll die for Schleife starten?
Hast du das Prog zufällig schon in VB gemacht und könntest mir ne kompilierte Version schicken?
Ich peils immer noch nicht ganz..
mfg, Agent
@Agent ich denke du verstehts noch ned ganz ;)
er meint eigentlich, dass er Objekte wie Arrays behandeln will.
z.B in VB isses so:
for intCounter = 1 to 10
txtFeld[intCounter].text = "Das ist das " & intCounter & ". Feld"
next intCounter
in Delphi, hab ich das noch nie gesehen..
greez
Dj-Cyrus
Uarg.. jetzt versteh ich.. ahja.. ich weiß schon, warum ich VB ned mag :D
Sorry, aber ich glaub nicht, dass das bei Delphi geht..
mfg, Agent
@DJ Syrus
genau so wars gemeint - Danke
Aber irgendwie muss das auch in Delphi gehen!
ich weiss zwar ned, wie das in delphi geht, aber da gibts doch bestimmt auch objektarrays (so nennt sich sowas übrigens *klugscheiss*)
kannst denn mehrere objekte mit dem selben namen hamn? so ists ja z.b. in html, da ensteht automatisch n array, wenn n name mehrmals vergeben ist.
Da wird er schon Recht haben, der gute Sami.. hast dus denn schon manuell probiert?
Cya
---------------------------
Error
---------------------------
A component named Label1 already exists.
---------------------------
OK
---------------------------
Hm nix mit gleichem Name, oder hab ich da was falsch verstanden?
ich denke es geht ned mit Delphi..
so long
DJ-Cyrus
Hmmss.. irgendwie kann ichs mir auch ned vorstellen.. außerdem.. is ja wohl kein soooo großer Aufwand immer eine Zahl auszutauschen, oder? ;)
zum Programmieren isses ja schon ne schönere und leichtere Methode, du kannst ja ned Objekt-Namen mit Variablen bilden! Also müsstest du alles einzeln eingeben..
so long
Dj-Cyrus
hi all
da bin ich doch erleichtert, bin also nicht der einzige mit diesem prob.
ich hab's mal so versucht, leider von hand
var Labels: Array[1..6] of TLabel;
Labels[1]:= Label1;
Labels[2]:= Label2;
Labels[3]:= Label3;
Labels[4]:= Label4;
Labels[5]:= Label5;
Labels[6]:= Label6;
jetzt gibts nur noch ein kleines problem, die ganze sache 100mal
schreiben ist dooof, gibts da keine möglichkeit das Array vom Type
TLabel in einer schleife zufüllen?
greez zer00
is doch ganz einfach leute.... also ihr macht eine groupbox, ist zwar nicht notwendig, aber besser.
dann macht ihr dort ein paar labels rein, von mir aus mit Ctrl-C und Ctrl-V. Die heissen dann Labels1 - LabelsN. so.
Nun könnt ihr alle Objekte in dieser Groupbox durchgehen, prüfen ob es ein label ist ond dann damit arbeiten.
var
myControl : TControl;
i : Integer;
begin
for i:=0 to groupbox1.ControlCount-1 do
begin
myControl := groupbox1.Controls[i];
if myControl is TLabel then
(myControl as TLabel).Caption := format('ich bin Control nummero %d',[i]);
end;
end;
wenn du willst, kannst du komponenten auch automatisch erzeugen lassen:
var
test : array[0..50] of TButton;
row : Integer;
hoehe : Integer;
begin
row :=1;
hoehe := 20;
for i := 0 to High(test) do begin
test[i] := TButton.Create(self);
with test[i] do begin
Parent := GroupBox2;
Width := 20;
Height := 20;
if i > 0 then begin
Left := test[i-1].left + test[i-1].Width;
Top := 20;
end
else
Left := 10;
if Left + Width >= groupbox2.Width then begin
Left := 10;
Inc(row);
end;
Top := row*hoehe;
Caption := IntToStr(i);
Name := Format('myLabel%d',[i]);
end;
groupbox2.Height := row * hoehe + 40;
end;
ps: uii, dieser thread ist ja schon ziemlich alt.. naja, egal. hoffe, es hilt dir was.
he danke dir !!!!
jetzt wo ichs sehe, ist es ganz einfach.
thx and greez zer00
man muss die Labels nicht vorher anlegen, man kann das ganze auch einfach dynamisch erzeugen und auf die Form legen.
zb. hier ein Editfeld
var
Form1: TForm1;
edField: TEdit; (* Objektvariable für Editierfeld *)
i: Integer; (* Zähler *)
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject); (* Erzeuge 10 Editierfelder ! *)
var links, oben, breit, hoch: Integer;
begin
links:=20; oben:=20; breit:=40; hoch:=20; (* Position und Abmessungen des
ersten Editierfeldes (Schablone) *)
for i:=1 to 10 do
if TEdit(FindComponent('ed_'+IntToStr(i)))= nil then
(* nur, wenn i-tes Editierfeld nicht existiert, darf neues erzeugt werden ! *)
begin
edField:=TEdit.Create(Self); (* neues Editierfeld wird erzeugt, *)
edField.Parent:=Self; (* ... dem Formular zugeordnet *)
edField.Name:='ed_'+IntToStr(i); (* ... und erhält Namen: ed_1, ed_2, ... *)
edField.SetBounds(links+(i-1)*breit, oben, breit, hoch); (* Position und
Abmessungen neu setzen *)
edField.Text := IntToStr(i); (* Beschriftung mit Index *)
edField.OnClick := EditClick (* gemeinsamer Event-Handler *)
end
end;
genau so gehts auch mit labels. EInfach eine Variable von den Typ anlegen und 'Createn'.
Ich gratuliere dem Thread ganz herzlich zum Geburtstag, er ist heute vor etwa 20 Minuten 2 Jahre alt geworden ;)
schön zu sehen dass es Leute gibt die die Suchfunktion benutzten !!
Stimmt, das sollte der eigentliche Grund für die Glückwünsche sein! :)
Auch schön, dass hier inzwischen auch die User-to-User Kommunikation/-hilfe so gut läuft http://www.coding-board.de/board/images/icons/icon14.gif
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.