![]() |
nein :oops:
|
probier mal das zu verstehen, und eventuell anzupassen:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); procedure LabelClick(Sender: Tobject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; DeineLabel: array of TLabel; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var i : Integer; begin i := succ(High(DeineLabel)); SetLength(DeineLabel,i + 1); //Der array mit deinen Labeln wird eins länger DeineLabel[i] := TLabel.Create(Form1); //In den grade erschaffenen Platz kommt ein Label DeineLabel[i].Left := 10; //Wohin DeineLabel[i].Top := i * 20; //Wohin DeineLabel[i].Color := clred; //Farbe DeineLabel[i].OnClick := LabelClick; //Was ist, wenn man klickt insertcontrol(DeineLabel[i]); //Label "wirklich" erstellen end; procedure TForm1.LabelClick(Sender: TObject); begin if Sender = DeineLabel[0] {irgendeine Zahl statt 0} then {was bei dem Label passieren soll} Form1.Close; end; end. |
Und noch eine kurze Erklärung zu
Zitat:
Delphi-Quellcode:
DeineLabel[i].Parent := Self;
|
@Nailor
in deinem Beispiel,ich blick offengesagt noch nicht ganz durch. Wieviele Labels werden in diesem Beispiel denn erstellt.Das kann ich darin nicht sehen.Oder ist dein arraynur angedeudet? |
Bei Nailors Beispiel werden so viele Labels erzeugt wie du auf den Button Button1 klickst.
|
jbg meint, dass jedesMal, wenn man auf den Button klickt, ein neues Label entsteht. Du kannst auch den Code 1:1 ausschneiden, bei Delphi ein neues Projekt starten, einen einzigen Button einfügen und das Programm starten. Dann kannst du sehen, was es macht.
Dann kannst du ein paar Werte ändern, und per Trial and Error dir ein paar Auswirkungen klar machen. |
gehts das nicht einfacher?
Jedem Label einfach einen Namen verpassen wie einen Startwert festlegen dann jeweils um 1 hochzählen? |
Moin Privateer,
wenn Du den Labeln beim Erzeugen keinen Namen zuweist, wird der Standardname erzeugt, also eben Label1, Label2 usw., nur lassen sie sich über ein Array of TLabel leichter ansprechen. Sonst müsstest Du sie immer mit FindComponent suchen. |
Hi Chris,
das werden sie sowieso in jedem Fall.Jedenfalls in diesem Programm. Beispiel:
Code:
So und so ähnlich werden sie im kompletten Programm angesprochen.Deswegen meine Vermutung ob es nicht einfacher ginge.
procedure TForm1.AnyInChange(Sender: TObject);
var bEdit: TEdit; cLabel: TLabel; begin if Sender <> nil then if Sender is TEdit then begin bEdit := FindComponent('in' + Copy(TEdit(Sender).Name, 3, 2)) as TEdit; cLabel := Form2.FindComponent('out' + Copy(TEdit(Sender).Name,3,2)) as TLabel; cLabel.Caption:=bEdit.Text; end; end; Ich konnte es nur nicht nachvollziehen, ob jedes Label den richtigen Namen bekommt, weil es man nicht sieht. Denn alles "Findcomponents" sind auf eine bestimmte Zahl abgestimmt.Will sagen egal wie die Komponenten heissen haben sie die gleich Zahl, die die ich ansprechen will. Einen geruhsamen heiligen Abend an alle! (Werd noch a bisserl rumprobieren :o) ) |
Moin Privateer,
nimm doch lieber die Array Variante. Das dürfe deutlich einfacher gehen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:04 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