Farben per Variable an eine Prozedur übergeben

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Benutzeravatar
Beach
Lazarusforum e. V.
Beiträge: 32
Registriert: Di 2. Nov 2021, 22:41
OS, Lazarus, FPC: Lazarus 3.0RC1 (rev lazarus_3_0_RC1-10-gfe49fef4fc) FPC 3.2.2 x86_64-win64-win32
CPU-Target: 64Bit
Wohnort: Hunsrück

Farben per Variable an eine Prozedur übergeben

Beitrag von Beach »

Hallo zusammen,
nach ganz langer Zeit versuche ich mich mal wieder am Programmieren. :roll:
Merke das ich schon wieder fast alles vergessen habe. Aber zum Glück gibt es ja euch und ich hoffe das Ihr mir wieder einmal weiterhelfen könnt.

Ich habe ein Panel, welches ich als "Farbiger Button beliebiger Größe" misbrauchen möchte. Zu Win8 Zeiten hätte man es wahrscheinlich Kachel genannt.
Grundprinzipiell funktioniert das auch schon etwas. Nun möchte ich bei einem Klick das sich 3 Dinge des Panel ändern.. Der BevelOuter, Color und font.color
das ganze versuche ich in eine Funktion zu packen da ich diese öfters brauche.
die ersten beiden funktionieren soweit, da ich hier feste Werte nutze.
Bei der Schriftfarbe (font.color) strauchele ich aber etwas da ich das flexibel mit dem Aufruf übergeben möchte

Bekomme immer beim Versuch zu kompilieren die Meldung "Incompatible type for arg no.1: Git "Constant String" expected TGraphicsColor"
Ersetze ich tc:string mit tc:TGraphicsColor bekommeich die Meldung "Identifier not found "TGraphicsColor"

Lange Vorrede, kurzer Sinn, Wie kann ich eine Farbkonstante wie z.B 'clWhite' an die Funktion übergeben und damit die Schriftfarbe in der Funktion ändern?

Hier noch der Code meines Versuches:

Code: Alles auswählen

procedure TForm1.changePanel(p:TPanel ; tc:TGraphicsColor = 'clDefault');

begin
  if p.BevelOuter = bvRaised then
     begin
     p.BevelOuter:= bvLowered;
     p.Color := $0086A97C;
     p.Font.color := 'tc';
     end
   else
     begin
     p.BevelOuter:= bvRaised;
     p.Color:= $0083BCBA;
     p.Font.Color:= clDefault;
     end;

end;
MfG
Beach

Nichts wissen... was macht das schon?

Benutzeravatar
theo
Beiträge: 10334
Registriert: Mo 11. Sep 2006, 19:01

Re: Farben per Variable an eine Prozedur übergeben

Beitrag von theo »

'clDefault' ist ja auch ein String.
clDefault reicht. Ist definiert in unit 'graphics'.

Benutzeravatar
h-elsner
Lazarusforum e. V.
Beiträge: 248
Registriert: Di 24. Jul 2012, 15:42
OS, Lazarus, FPC: LINUX Mint21.1, Win10, Lazarus 2.2.4, FPC3.2.2
CPU-Target: X86-64; arm 32bit
Wohnort: Illertissen
Kontaktdaten:

Re: Farben per Variable an eine Prozedur übergeben

Beitrag von h-elsner »

Warum eigentlich TGraphicsColor? Die Eigenschaft .Color vom TPanel ist doch TColor.

Benutzeravatar
theo
Beiträge: 10334
Registriert: Mo 11. Sep 2006, 19:01

Re: Farben per Variable an eine Prozedur übergeben

Beitrag von theo »

h-elsner hat geschrieben:
Mo 9. Okt 2023, 17:48
Warum eigentlich TGraphicsColor? Die Eigenschaft .Color vom TPanel ist doch TColor.
Ist eigentlich egal. Das Ist so definiert in Grapics.pas:

Code: Alles auswählen

type
  TColor = TGraphicsColor;   
Ich würde aber auch TColor nehmen.

Eb
Lazarusforum e. V.
Beiträge: 238
Registriert: Di 5. Feb 2008, 15:32
OS, Lazarus, FPC: Linux Mint - Laz 2.2.0
CPU-Target: 64Bit
Wohnort: Stuttgart

Re: Farben per Variable an eine Prozedur übergeben

Beitrag von Eb »

Also zum Beispiel so:

Code: Alles auswählen

procedure TForm1.changePanel(p:TPanel ; tc:TColor);
begin
  if p.BevelOuter = bvRaised then
     begin
     p.BevelOuter:= bvLowered;
     p.Color := $0086A97C;
     p.Font.color := tc;
     end
   else
     begin
     p.BevelOuter:= bvRaised;
     p.Color:= $0083BCBA;
     p.Font.Color:= clDefault;
     end;

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  changePanel(Panel1, clgreen);
end;

Benutzeravatar
Beach
Lazarusforum e. V.
Beiträge: 32
Registriert: Di 2. Nov 2021, 22:41
OS, Lazarus, FPC: Lazarus 3.0RC1 (rev lazarus_3_0_RC1-10-gfe49fef4fc) FPC 3.2.2 x86_64-win64-win32
CPU-Target: 64Bit
Wohnort: Hunsrück

Re: Farben per Variable an eine Prozedur übergeben

Beitrag von Beach »

Vielen Dank, wusste doch das es nur ein kleiner Fahler war.
MfG
Beach

Nichts wissen... was macht das schon?

Antworten