Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi dynamische Komponenten (https://www.delphipraxis.net/1770-dynamische-komponenten.html)

Privateer3000 23. Dez 2002 15:16

nein :oops:

nailor 23. Dez 2002 15:54

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.

jbg 23. Dez 2002 18:23

Und noch eine kurze Erklärung zu
Zitat:

insertcontrol(DeineLabel[i]);
Diese Zeile entspricht dieser:
Delphi-Quellcode:
DeineLabel[i].Parent := Self;

Privateer3000 23. Dez 2002 22:09

@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?

jbg 23. Dez 2002 22:11

Bei Nailors Beispiel werden so viele Labels erzeugt wie du auf den Button Button1 klickst.

nailor 23. Dez 2002 22:46

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.

Privateer3000 24. Dez 2002 06:25

gehts das nicht einfacher?
Jedem Label einfach einen Namen verpassen wie
einen Startwert festlegen dann jeweils um 1 hochzählen?

Christian Seehase 24. Dez 2002 10:18

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.

Privateer3000 24. Dez 2002 15:47

Hi Chris,

das werden sie sowieso in jedem Fall.Jedenfalls in diesem Programm.
Beispiel:
Code:
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;
So und so ähnlich werden sie im kompletten Programm angesprochen.Deswegen meine Vermutung ob es nicht einfacher ginge.
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) )

Christian Seehase 24. Dez 2002 16:30

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.
Seite 3 von 4     123 4      

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