![]() |
Button Captions in array
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
gibt es eine Möglichkeit die Captions von Buttons per for Schleife auszulesen? Also ich habe hier 64 Buttons und von denen müsste ich alle die Captions 'X' oder kein X '' in ein array speichern. Also im Prinzip steht die Variable der for Schleife jetzt im Variablen Name: for i:=1 to 64 .... Buttoni.Caption ... Kann man das irgendwie lösen oder darf ich jetzt ein paar mal 64 Zeilen schreiben? |
Re: Button Captions in array
Schau dir mal
![]() |
Re: Button Captions in array
Such mal nach FindComponent()
|
Re: Button Captions in array
Zitat:
:lol: :lol: |
Re: Button Captions in array
was spricht dagegen die Buttons gleich in ein Array zu stopfen? :)
Und anstelle von FindComponent würde ich dann doch lieber gleich mit ControlCount alle controls durchlaufen. Denn sonst wird intern im schlimmsten Fall ellex n mal durchlaufen. |
Re: Button Captions in array
Zitat:
Und die dann in einem zweidimensionalen Array verwalten. Dann kannst Du die so abfragen:
Delphi-Quellcode:
if TCheckBox(BoxArray[1][5]).Checked then
|
Re: Button Captions in array
Und das Array mit dem Typ TCheckbox anlegen, dann wird die Abfrage nochmal kürzer... :zwinker:
Nein, die Goldwaage steht im Schrank, die habe ich nicht rausgeholt... |
Re: Button Captions in array
Zitat:
Aber trotzdem zur Sicherheit casten. |
Re: Button Captions in array
Zitat:
|
Re: Button Captions in array
Zitat:
Da es aber mit einer zweidimensionalen Liste etwas schwierig wird, halt ein Array. Und bei Listen MUSS man casten, weil nur Zeiger abgelegt werden. Also mach ich das bei Arrays eben auch. Meine Meinung zum abc AS xyz: Das ist Geschmacksache, ob ist nun das dynamische Bindung (AS) oder Casting (xyz(abc)) verwende. Oder kann mir jemand verständlich erklären, wann man dynamische Bindung oder Casting verwendet und warum? |
Re: Button Captions in array
Zitat:
Zitat:
Naja, grundlegend sollte es klar sein. Von daher ist ein solcher harter Typecast nur zu nutzen, wenn man sich 100%ig sicher sein kann, das der Typ eindeutig ist (bzw. eigentlich 110%ig, damit im Fehlerfall nicht noch mehr Fehler dadurch erzeugt werden). Ich habe es in ![]() |
Re: Button Captions in array
Zitat:
(Sorry für Total-OT, aber alle Fans der alten Switch-Folgen werden das verstehen :mrgreen: ) |
Re: Button Captions in array
Zitat:
|
Re: Button Captions in array
Also ich hab mir jetzt mal den Vorschlag mit den Checkboxen angeguckt, das ist zwar optisch nicht ganz so berauschend, allerdings geht das für's erste einfacher.
Jetzt habe ich nur noch ein paar kleine Prob's damit. Also ich definiere das Array mit den Checkboxen und sage dann testweise einem Button das der die Boxen createn soll:
Delphi-Quellcode:
Dabei stürzt das Prog. aber nur ab, also ich hab da noch nicht soviel Plan von Sachen zur Laufzeit erstellen^^
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; BoxArray: array[1..3,1..3] of TCheckBox; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin //Mach was BoxArray[1][1].Create(Form1); end; end. |
Re: Button Captions in array
Versuch es mal so:
Delphi-Quellcode:
Um alle CheckBoxen erzeugen zu lassen, kannst Du eine doppelte for-Schleife nehmen.
procedure TForm1.Button1Click(Sender: TObject);
begin //Mach was BoxArray[1][1] := TCheckBox.Create(Self); end; |
Re: Button Captions in array
Delphi-Quellcode:
[edit] 2 late :? [/edit]
BoxArray[1][1] := TCheckBox.Create(Form1);
|
Re: Button Captions in array
Etwas zur Laufzeit zu erstellen ist recht einfach. Wir machen mal ein Beispiel anhand eines Labels.
Als erstes musst du den Button deklarieren, z.B. im Private-Bereich der Form.
Delphi-Quellcode:
jetzt musst du das Teil nur noch erstellen und die Werte, die du sonst im Objectinspektor eingibts, selbst definieren
private
TestLabel : TLabel;
Delphi-Quellcode:
Du darfst aber nicht vergessen das Label dann wieder freizugeben, z.B. im OnClose der Form.
procedure TForm.ErstelleLabel;
begin TestLabel := TLabel.Create(self); TestLabel.Caption := 'testlabel'; Testlabel.Top := 100; Testlabel.Width := 100; ... end;
Delphi-Quellcode:
(keine Garantie auf Funktionalität, aus dem Kopf getippt)
procedure TForm.OnClose();
begin testlabel.free; end; |
Re: Button Captions in array
Zitat:
Man kann das frisch erzeugte Objekt auch direkt in das Array "schieben". Freigeben sollte man die Objekte aber schon wieder. Dies setze ich als Selbstverständlichkeit voraus... |
Re: Button Captions in array
Liste der Anhänge anzeigen (Anzahl: 1)
Ok vielen Dank an alle,
ich glaub ich hab das Prinzip nu verstanden wie man Objekte in ein Array legt, hier nochmal das Ergebnis:
Delphi-Quellcode:
Den Screen davon gibts als Attachment.
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; BoxArray: array[1..3,1..3] of TCheckBox; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var i, j: integer; begin //Mach was for i:= 1 to 3 do for j:= 1 to 3 do begin BoxArray[i][j]:= TCheckBox.Create(Self); BoxArray[i][j].Parent:= Form1; BoxArray[i][j].Top:= i * 17; BoxArray[i][j].Left:= j * 17; end; end; end. |
Re: Button Captions in array
Und wenn Du jetzt anstelle von TCheckBox noch eine schöne andere CheckBox (z.B. bei torry.net suchen) verwendest, dann wird's richtig gut.
Die andere CheckBox könnte z.B. nicht den "Haken", sondern ein "Kreuz" anzeigen, wenn sie aktiviert ist. Schön wäre auch noch, wenn man die Grösse anpassen könnte. |
Re: Button Captions in array
Nur mal so als Alternative mit nur einer Schleife:
Delphi-Quellcode:
Nur zur Vielfalt des Codes publiziert...
procedure TForm1.Button1Click(Sender: TObject);
var i: integer; begin for i:= 0 to 8 do begin BoxArray[succ(i div 3)][succ(i mod 3)]:= TCheckBox.Create(Self); BoxArray[succ(i div 3)][succ(i mod 3)].Parent:= Form1; BoxArray[succ(i div 3)][succ(i mod 3)].Top := succ(i div 3) * 17; BoxArray[succ(i div 3)][succ(i mod 3)].Left := succ(i mod 3) * 17; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz