Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wie schreibe ich eine Funktion? (https://www.delphipraxis.net/124666-wie-schreibe-ich-eine-funktion.html)

psd-sign 22. Nov 2008 18:04


Wie schreibe ich eine Funktion?
 
Ich bn ein Delphi Anfänger und habe eine generelle Frage:

Wie schreibe ich eine Funktion in Delphi (Delphi7)? Und wie rufe ich sie wieder auf?

Aktuelles Beispiel:
Ich programmiere z.Z. ein Fomular, dass nach verschiedenen Algorythmen eine Zahl von Binär in Dezimalwert umrechnet und umgekehrt. Gleichzeitig habe ich 8 TShapes eingefügt, die einen 8 Bit-Controller simulieren sollen. Ich könnte nun immer wieder hinter jedem Mousedown - Event jedes einzelnen Tshapes eine Prozedur hinterlegen, damit ein Binärwert aus den 8 Thsapes entsteht, die wie folgt arbeitet (Thshape1-8 Brush.Color=Rot -->1, Brush.Color=clblack -->0):

Prozedur Tshape1.Mousedown
Binärwert=''
Binärstelle=''
If Tshape1 = rot then
Binärstelle = 1
Binärwert = Binärwert+Binärstelle
else
Binärstelle = 0
Binärwert = Binärwert+Binärstelle
If Tshape2 = rot then
Binärstelle = 1
Binärwert = Binärwert+Binärstelle
else
Binärstelle = 0
Binärwert = Binärwert+Binärstelle
.
.
.
bis einschliesslich TShape8

Das hinter jeden Mousedown nervt extrem und macht den Code nicht wirklich netter ...

Ich würde gerne nur eine Funktion schreiben, die dann bei Mousedown einfach einmal aufgerufen wird. Wie schreibt man in Delphi eine Funktion und wie rufe ich diese auf? Nicht vergessen: Ein Delphi - Anfänger!!

psd-sign 22. Nov 2008 18:06

Re: Wie schreibe ich eine Funktion?
 
Ach ja:
Sollte es ein gutes Tutorial geben, in dem Erstellung von Funktionen und ähnlich Themen gut erklärt werden, freue ich mich über einen Link :-D

DeddyH 22. Nov 2008 18:11

Re: Wie schreibe ich eine Funktion?
 
Was Du möchtest, ist nicht das Schreiben einer Funktion, sondern das einer allgemein anwendbaren Methode. Dazu musst Du nur den Sender-Parameter auswerten. Beispiel:
Delphi-Quellcode:
procedure TFormBla.ButtonBlubbClick(Sender: TObject);
begin
  if Sender is TButton then
    ShowMessage(TButton(Sender).Name);
end;
Diese Methode kannst Du per Objektinspektor jedem Button auf Deinem Formular im OnClick-Event zuweisen.

psd-sign 22. Nov 2008 19:18

Re: Wie schreibe ich eine Funktion?
 
Nun ist die Verwirrung perfekt ... ich möchte, dass je nach Steuerlementnamen des TShapes nun die Coloreigenschaften geändert werden. Der Compiler leuchtet wie ein Weihnachtsbaum ... hat jemand ne Idee?

Delphi-Quellcode:
procedure TForm1.SHAPEClick(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);

var
TheShape: TComponentname;

begin
  if Sender is TShape then
    begin
      TheShape:=TShape(Sender).Name;
      if TheShape.Brush.Color = Clmaroon then
        begin
        TheShape.Brush.Color := ClBlack;
        exit;
        end
      else
        begin
        Tshape.TheShape.Brush.Color := Clmaroon;
        exit;
        end;
      end;
    end;

end;

Namenloser 22. Nov 2008 19:40

Re: Wie schreibe ich eine Funktion?
 
Hallo, psd-sign.

Delphi-Quellcode:
TheShape: TComponentname;
Was du hier deklarierst, ist nur der Name einer Komponente - nichts anderes als ein String. Der Name hilft dir hier aber nicht weiter, sondern du brauchst das Objekt selbst - vom Typ TShape.
Deshalb muss die Deklaration so lauten:
Delphi-Quellcode:
TheShape: TShape
Wenn du jetzt noch die Zeile
Delphi-Quellcode:
TheShape:=TShape(Sender).Name;
in
Delphi-Quellcode:
TheShape:=TShape(Sender);
umänderst, müsste es eigentlich klappen!

psd-sign 22. Nov 2008 19:42

Re: Wie schreibe ich eine Funktion?
 
So funktioniert es ... 2 Zigaretten und nen Kaffee später :D

Delphi-Quellcode:
procedure TForm1.SHAPEClick(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Sender is TShape then
  begin
    if TShape(Sender).Brush.Color = Clmaroon then
    begin
    TShape(Sender).Brush.Color := ClBlack;
    exit;
    end
    else
    begin
    TShape(Sender).Brush.Color := ClMaroon;
    exit;
    end;
  end;
end;

psd-sign 22. Nov 2008 20:10

Re: Wie schreibe ich eine Funktion?
 
Oh ...sehe gerade, es wurde nochmal geantwortet, während ich meine Eigenlösung getippt hatte ...

Wie immer:
Dankeschön an euch!! :)

Namenloser 22. Nov 2008 20:19

Re: Wie schreibe ich eine Funktion?
 
Noch etwas kürzer:
Delphi-Quellcode:
procedure TForm1.SHAPEClick(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Sender is TShape then
  begin
    with TShape(Sender).Brush do
    begin
      if Color = clMaroon then
        Color := clBlack
      else
        Color := clMaroon;
    end;
  end;
end;
Ich empfehle dir aber, die "Funktion von der Darstellung zu trennen", also in diesem Falle, nicht die Information direkt in den Farbinformationen der Shapes abzuspeichern, sondern zur Datenspeicherung, ein Array of Boolean zu benutzen, und die Shapes selbst nur zur Darstellung dieses Arrays zu benutzen.

inherited 22. Nov 2008 22:03

Re: Wie schreibe ich eine Funktion?
 
Es geht noch kürzer:
Delphi-Quellcode:
procedure TForm1.SHAPEClick(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Sender is TShape then
  begin
    TShape(Sender).Brush.Color := TShape(Sender).Brush.Color xor clMaroon;
  end;
end;
Unter der Prämisse dass die Farbe zu beginn Schwarz oder clMaroon ist.

Cyf 23. Nov 2008 15:56

Re: Wie schreibe ich eine Funktion?
 
Zitat:

Zitat von psd-sign
Ach ja:
Sollte es ein gutes Tutorial geben, in dem Erstellung von Funktionen und ähnlich Themen gut erklärt werden, freue ich mich über einen Link :-D

http://www.delphi-treff.de/sprachen/...und-funktionen


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:32 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