Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Komponente (?) an Funktion übergeben (https://www.delphipraxis.net/162764-komponente-funktion-uebergeben.html)

Eknoes 5. Sep 2011 08:26

Delphi-Version: 5

Komponente (?) an Funktion übergeben
 
Hallo,
Ich habe, wie schon zu erwarten, eine Frage zu Delphi. In Delphi bin ich zwar ein Neuling, habe allerdigns schon einiges an Erfahrung in anderen Programmiersprachen gesammelt.

Ich habe ein Projekt, dass dass aus einer Kreuzung mit 4 Ampeln besteht, die aufeinander abgestimmt sind. Die Ampeln bestehen aus jeweils 3 TShapes, die unterschiedlich gefärbt werden.

Jetzt will ich eine Funktion basteln, die eine Ampel in die nächste Phase bringt. Das ist auch kein problem, allerdings möchte ich der Funktion übergeben, wie die Ampel "heisst". ich versuche das mal in Code zu fassen, dass es leichter verständlich ist:

Code:
function naechstePhase(Ampel)
     Ampel.brush.color := red;
Ampel kann eben Ampel1, Ampel2, usw. sein, also dass ich mit einer Funktion unterschiedliche Ampeln ansprechen kann.

Ich hoffe ihr wisst was ich meine !?

Viele Grüße & schoneinmal Danke!
Jan

Sir Rufo 5. Sep 2011 08:40

AW: Komponente (?) an Funktion übergeben
 
Wie machst du das denn, wenn du eine Integer Zahl übergeben willst?
Delphi-Quellcode:
procedure TuWas( i : integer );
Und mit einem String?
Delphi-Quellcode:
procedure TuWas( s : string );
Wen wundert es dann, wenn eine Komponente/Objekt so übergeben wird:
Delphi-Quellcode:
procedure TuWas( Ampel : TAmpel );
;)

(Ich gehe jetzt mal davon aus, dass die Ampel-Klasse tatsächlich auch TAmpel heisst - bietet sich ja irgendwie an)

Bei Objekten (dazu zählen auch die Komponenten) werden so nur die Referenzen auf das Objekt übergeben (was zum Arbeiten mit diesem Objekt auch völlig ausreicht).

Eknoes 5. Sep 2011 15:10

AW: Komponente (?) an Funktion übergeben
 
Ah, ok, danke. Dann kann aber das ganze ja nur Ampel1 sein, ich möchte ja aber auch Ampel1, Ampel2, usw. übergeben, weil das ja alles verschiedene Dinger sind, von denen ich die Farbe ändern möchte. Das würde ja so nicht gehen, oder?

Du meintest etwas von Klasse, ich meine aber so ein "Objekt" aus dem Design Teil, in diesem Fall ein Shape.

Viele Grüße

DeddyH 5. Sep 2011 15:12

AW: Komponente (?) an Funktion übergeben
 
Zitat:

Zitat von Eknoes (Beitrag 1121856)
Dann kann aber das ganze ja nur Ampel1 sein, ...

Wie kommst Du denn darauf? Du kannst dort alles übergeben, was von TAmpel abstammt.

Jacques Murell 5. Sep 2011 15:27

AW: Komponente (?) an Funktion übergeben
 
Zitat:

Ah, ok, danke. Dann kann aber das ganze ja nur Ampel1 sein, ich möchte ja aber auch Ampel1, Ampel2, usw. übergeben, weil das ja alles verschiedene Dinger sind, von denen ich die Farbe ändern möchte. Das würde ja so nicht gehen, oder?
Doch klar.

In etwa so:
Delphi-Quellcode:
procedure FaerbeAmpel(Ampel: TAmpel; Farbe: TColor);
begin
  Ampel.Brush.Color := Farbe;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  FaerbeAmpel(Ampel1, clRed);
  FaerbeAmpel(Ampel2, clGreen);
  // etc
end

Eknoes 5. Sep 2011 15:31

AW: Komponente (?) an Funktion übergeben
 
Achso. Ja super, dankeschön! Ging echt schnell ^^

lg

TiGü 5. Sep 2011 15:33

AW: Komponente (?) an Funktion übergeben
 
Zitat:

Zitat von Eknoes (Beitrag 1121856)
Du meintest etwas von Klasse, ich meine aber so ein "Objekt" aus dem Design Teil, in diesem Fall ein Shape.

Es geht alles.

Beispiel:
Delphi-Quellcode:
type
  TForm7 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    procedure MakeItReal(ALabel : TLabel; Cap : String);
  end;

var
  Form7: TForm7;

implementation

{$R *.dfm}

procedure TForm7.Button1Click(Sender: TObject);
begin
  MakeItReal(Label1, 'erste Beschriftung');
end;

procedure TForm7.Button2Click(Sender: TObject);
begin
  MakeItReal(Label2, 'zweite Beschriftung');
end;

procedure TForm7.Button3Click(Sender: TObject);
begin
  MakeItReal(Label3, 'dritte Beschriftung');
end;

procedure TForm7.MakeItReal(ALabel : TLabel; Cap : String);
begin
  ALabel.Caption := Cap;
end;

end.

Eknoes 5. Sep 2011 19:31

AW: Komponente (?) an Funktion übergeben
 
Perfekt! Vielen Dank nochmal!!!


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz