Autor Beitrag
DelphiJogi
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mi 17.01.18 19:20 
Hallo User,
wie kann ich in Delphi 10.1 (Berlin) die Textfarbe einer Groupbox (GroupBoxname) ändern?
Habe ParentBackGround, ParentFont sowie ParentColor auf False gesetzt.
Dennoch lassen sich keine Farbänderungen setzen.
In Delphi 7 war das kein Problem!

Vielen Dank
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2125
Erhaltene Danke: 391

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Do 18.01.18 08:02 
Guten Tag DelphiJogi und willkommen,

das stimmt. Die Caption-Farbe der GroupBox lässt sich seit Delphi 2006 nicht mehr ändern.
Du müsstest in der Paint() Methode Anpassungen vornehmen bzw. eine neue Komponente (von TGroupBox oder TCustomGroupBox) ableiten.
Das kann in etwa so aussehen:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
type
  TGroupBoxExt = class(TGroupBox)
  private
    FCaption: string;
    procedure SetCaption(Value: string);
  protected
    procedure Paint; override;
  published
    property Caption: string read FCaption write SetCaption;
  end;

implementation

procedure TGroupBoxExt.Paint;
//var
  //r: TRect;
begin
  inherited;
  Canvas.Font.Assign(self.Font);
  Canvas.Brush.Style := bsClear;

  //r := Rect(0, 0, Width, Height);
  //DrawText(Canvas.Handle, @FCaption[1], Length(FCaption), r, DT_SINGLELINE);
  Canvas.TextOut(00, FCaption);  // Alternativ zu DrawText()
end;

procedure TGroupBoxExt.SetCaption(Value: string);
begin
  FCaption := Value;
  Invalidate;
end;

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)

Für diesen Beitrag haben gedankt: DelphiJogi
DelphiJogi Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: So 04.02.18 13:55 
Danke Frühlingsrolle,
Ich werde deinen Vorschlag ausprobieren!
DelphiJogi Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: So 09.09.18 19:07 
Moderiert von user profile iconNarses: Komplettzitat des ersten Antwort-Beitrags entfernt.

Ich habe jetzt (nach langer Zeit) Code in eine Unit gesetzt das auch fehlerfrei akzeptiert wurde.
Nun bin ich nicht so versiert was Neue Klassen etc. betrifft. Deshalb meine Frage...

Wie rufe ich denn die Proceduren auf und wie setze ich die Farbwerte für ein GroupBox ?
Ich hoffe das ich niemanden mit dieser Frage nerve, Danke!

Moderiert von user profile iconNarses: Doppelposting entfernt.
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2125
Erhaltene Danke: 391

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: So 09.09.18 23:27 
Deine Fragen werfen selbst Fragen auf, wie ...
- welche Prozedur soll für was aufgerufen werden?
- welche Farbwerte (Schriftfarbe, Hintergrundfarbe) der GroupBox sollen gesetzt werden?

Zum Letzteren: Die Schriftfarbe lässt sich (mit diesem Codeschnipsel) über die Eigenschaft .Font.Color ändern!

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
DelphiJogi Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mo 10.09.18 18:58 
user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
Deine Fragen werfen selbst Fragen auf, wie ...
- welche Prozedur soll für was aufgerufen werden?
- welche Farbwerte (Schriftfarbe, Hintergrundfarbe) der GroupBox sollen gesetzt werden?

Zum Letzteren: Die Schriftfarbe lässt sich (mit diesem Codeschnipsel) über die Eigenschaft .Font.Color ändern!



Ich habe mich sicherlich nicht gerade verständlich gemacht, Sorry!
Deinen "Codeschnipsel habe ich in eine "extra" Unit geschrieben und diese in der "MainForm" eingebunden.
Auf der "MainForm" habe ich einige "GroupBoxen" dessen FontColor/BorderColor ich ändern möchte.
Ein simples Aufrufen von "GroupBox1.Font.Color:=clBlue" tut es ja nicht.
Also wie greift jetzt Dein "Codeschnipsel" ?
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2125
Erhaltene Danke: 391

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Mo 10.09.18 22:23 
Die Groupboxen, die du bereits auf dem Formular hast, werden damit nicht funktionieren, denn sie sind vom Typ TGroupBox, und nicht von der "erweiterten" Klasse TGroupBoxExt, wie im Beispiel ersichtlich.
D.h. du musst ein Objekt (zur Laufzeit oder im Design) von TGroupBoxExt erzeugen, im Sinne von:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    FBox: TGroupBoxExt;
  end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FBox := TGroupBoxExt.Create(self);
  FBox.Caption := 'Überschrift';
  FBox.Font.Color := clRed;
  FBox.Left := 20;
  FBox.Top := 20;
  FBox.Parent := self;
end;

Wenn du das Steuerelement im Design auf dein Formular setzen möchtest, musst du zuvor die erweiterte Klasse registrieren.
Dazu schließt du alles in deiner Delphi IDE, erstellst ein Package, das du passend umbenennst.
Fügst unter Enthält / Contains deine angelegte GroupBox-Unit hinzu und ergänzt sie noch um eine Registrier-Methode:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
type
  TGroupBoxExt = class(TGroupBox)
  // ... private, protected public, published
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('DeinKarteireiter', [TGroupBoxExt]);
end;

Das Package wird schlussendlich kompiliert, installiert, gespeichert und alles wieder geschlossen.
In der Entwicklungsumgebung gehst du dann unter TOOLS -> OPTIONEN -> Bibliothek Win32 -> Bibliothekspfad ... und fügst dort den Pfad zu der gespeicherten Komponente hinzu, fertig.

Solltest du im Nachhinein Änderungen daran vornehmen, brauchst du das Package nur zu kompilieren und abzuspeichern.

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
DelphiJogi Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Fr 21.09.18 20:19 
Danke für Deine Mühe,
Aber Font.Color lässt sich dennoch nicht ändern!

Ist aber nicht sooo wichtig. Ich behelfe mir schon seit langem mit "Label" die ich statt "GroupBox.Caption" verwende. Ist zwar etwas aufwendiger, aber das Ergebniß zählt.
Eigentlich unverständlich warum die Möglichkeit der Farbgebung bei vielen Tobjekten eingeschränk wurde. In Delphi 7 war sowas noch möglich.
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2125
Erhaltene Danke: 391

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: So 23.09.18 22:40 
Font.Color von TGroupBoxExt soll nicht gehen? Bei mir geht es wohl, so wie von mir erklärt und von dir gefordert, dass der Kopftext (.Caption) dadurch farblich geändert werden kann!
Und ja, mit Delphi7 und davor funktionierte es von Anfang an, weil, ich vermute mal, die Eigenschaft .Font wie folgt übergeben wurde:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TGroupBox.Paint;
begin
  Canvas.Font.Assign(FFont);  // bis Delphi7
  Canvas.Font := FFont;       // ab Delphi2005 <-- Problemstelle
end;

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)