PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Labels als Array?!?


dfisch
11.12.2001, 16:58
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


Manu
11.12.2001, 17:50
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

dfisch
11.12.2001, 18:55
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!

Manu
11.12.2001, 19:09
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

dfisch
11.12.2001, 20:35
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!

Manu
11.12.2001, 20:48
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

cYrus
11.12.2001, 20:58
@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

Manu
11.12.2001, 21:30
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

dfisch
11.12.2001, 22:35
@DJ Syrus

genau so wars gemeint - Danke

Aber irgendwie muss das auch in Delphi gehen!

sami
11.12.2001, 23:34
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.

Manu
11.12.2001, 23:40
Da wird er schon Recht haben, der gute Sami.. hast dus denn schon manuell probiert?

Cya

dfisch
12.12.2001, 14:33
---------------------------
Error
---------------------------
A component named Label1 already exists.
---------------------------
OK
---------------------------

Hm nix mit gleichem Name, oder hab ich da was falsch verstanden?

cYrus
12.12.2001, 15:02
ich denke es geht ned mit Delphi..

so long
DJ-Cyrus

Manu
12.12.2001, 15:54
Hmmss.. irgendwie kann ichs mir auch ned vorstellen.. außerdem.. is ja wohl kein soooo großer Aufwand immer eine Zahl auszutauschen, oder? ;)

cYrus
12.12.2001, 16:12
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

zer00
09.12.2003, 17:51
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

derGugi
10.12.2003, 16:05
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.

zer00
10.12.2003, 17:18
he danke dir !!!!

jetzt wo ichs sehe, ist es ganz einfach.


thx and greez zer00

JoelH
11.12.2003, 00:44
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'.

Manu
11.12.2003, 17:17
Ich gratuliere dem Thread ganz herzlich zum Geburtstag, er ist heute vor etwa 20 Minuten 2 Jahre alt geworden ;)

JoelH
12.12.2003, 09:04
schön zu sehen dass es Leute gibt die die Suchfunktion benutzten !!

Manu
12.12.2003, 13:02
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

Marwin
13.12.2003, 19:03
:p