Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Farbänderung des Formularhintergrundes (https://www.delphipraxis.net/176651-farbaenderung-des-formularhintergrundes.html)

BasilBavaria 18. Sep 2013 18:31

Farbänderung des Formularhintergrundes
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen!

Ich steh mal wieder auf'm Schlauch:

Der Anwender soll die Fare eines Formulars ändern können.
Alle Elemente des Formulars haben die Eigenschaft
Code:
ParentColor = true
Bei Programmstart passt es auch (1.Teilbild im Screenshot)

Nach der Farbänderung werden die Elemente auch in der neuen Farbe - hier blau - gezeichnet. Nur die ListBox macht nicht mit!?
(2. Teilbild)

Nach Überlagerung des Formularbereiches mit einem anderen Formular oder einem Wechsel der Anwendung über ALT-Tab und Rückkehr ist es aber richtig mit den Farben (3. Teilbild).

Meine Frage:
Wie kann ich direkt richtig neu zeichnen?

Danke schon mal
Der Basil

Aviator 18. Sep 2013 20:31

AW: Farbänderung des Formularhintergrundes
 
Zum Zeitpunkt der Farbänderung die Methode
Delphi-Quellcode:
Repaint
bzw.
Delphi-Quellcode:
Refresh
der Listbox aufrufen?

BasilBavaria 19. Sep 2013 07:51

AW: Farbänderung des Formularhintergrundes
 
Danke für die Rückmeldung. Hatte ich mir auch gedacht:
Code:
FrmMainOptions.ShowModal; // <-- Farbänderung im OptionsDialog

FrmMain.Color := OptFarbe; // <-- wird übernommen - OK!

//folgende drei Anweisungen werden ignoriert
  ListBox1.Color := OptFarbe;
  ListBox1.Repaint;
  ListBox1.Refresh;
Der Code steht im Aufruf des Optionsdialoges und wird nach dem Rücksprung ausgeführt.
Auch entsprechende Einträge im OnPaint der Form brachten keine Änderung des Erscheinungsbildes.

baumina 19. Sep 2013 08:01

AW: Farbänderung des Formularhintergrundes
 
Hast Du da mal nen Code? Denn bei meinem Test mit Delphi XE habe ich das Phänomen nicht.

Delphi-Quellcode:
unit Unit52;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm52 = class(TForm)
    ListBox1: TListBox;
    Button1: TButton;
    Panel1: TPanel;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form52: TForm52;

implementation

{$R *.dfm}

procedure TForm52.Button1Click(Sender: TObject);
begin
  Form52.Color := clRed;
end;

end.
Delphi-Quellcode:
object Form52: TForm52
  Left = 0
  Top = 0
  Caption = 'Form52'
  ClientHeight = 337
  ClientWidth = 635
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object Button1: TButton
    Left = 436
    Top = 224
    Width = 75
    Height = 25
    Caption = 'Button1'
    TabOrder = 0
    OnClick = Button1Click
  end
  object Panel1: TPanel
    Left = 256
    Top = 28
    Width = 299
    Height = 160
    Caption = 'Panel1'
    ParentColor = True
    TabOrder = 1
    object ListBox1: TListBox
      Left = 84
      Top = 39
      Width = 121
      Height = 97
      ItemHeight = 13
      Items.Strings = (
        'E1'
        'Eintrag2')
      ParentColor = True
      TabOrder = 0
    end
  end
end

BasilBavaria 19. Sep 2013 08:29

AW: Farbänderung des Formularhintergrundes
 
Aufruf der Farbänderung - entspricht Button1Click im vg. Code
Delphi-Quellcode:
procedure TFrmMain.ImageAppOptionsClick(Sender: TObject);
begin
  FrmMainOptions.ShowModal;

  FrmMain.Color := OptFarbe;

//  ListBox1.Color := OptMetroFarbe;
//  ListBox1.Repaint;
//  ListBox1.Refresh
end;
Die Codestrecke fürs ganze Formular

Delphi-Quellcode:
object FrmMain: TFrmMain
  Left = 0
  Top = 0
  BorderStyle = bsNone
  Caption = 'FrmMain'
  ClientHeight = 540
  ClientWidth = 564
  Color = clGray
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWhite
  Font.Height = -13
  Font.Name = 'Microsoft Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  ShowHint = True
  OnCreate = FormCreate
  OnPaint = FormPaint
  OnShow = FormShow
  PixelsPerInch = 96
  TextHeight = 16
  object LabelAppTitel: TLabel
    AlignWithMargins = True
    Left = 10
    Top = 51
    Width = 551
    Height = 37
    Margins.Left = 10
    Margins.Top = 10
    Align = alTop
    Caption = 'Design-Studie'
    Font.Charset = DEFAULT_CHARSET
    Font.Color = clWhite
    Font.Height = -32
    Font.Name = 'Microsoft Sans Serif'
    Font.Style = [fsBold]
    ParentFont = False
    ExplicitWidth = 308
  end
  object ListBox1: TListBox
    Left = 32
    Top = 160
    Width = 217
    Height = 129
    BorderStyle = bsNone
    Ctl3D = False
    Font.Charset = DEFAULT_CHARSET
    Font.Color = clWhite
    Font.Height = -24
    Font.Name = 'Microsoft Sans Serif'
    Font.Style = [fsBold]
    ItemHeight = 29
    Items.Strings = (
      'Herta Rabiata'
      'Peter Mondfahrt'
      '----Listbox')
    ParentColor = True
    ParentCtl3D = False
    ParentFont = False
    TabOrder = 2
    OnDblClick = ListBox1DblClick
  end

baumina 19. Sep 2013 08:39

AW: Farbänderung des Formularhintergrundes
 
Habs ausprobiert ... funktioniert einwandfrei. Folgende proceduren hatte ich natürlich nicht : FormCreate, FormPaint, FormShow. Evtl. ist dort etwas begraben.

BasilBavaria 20. Sep 2013 09:46

AW: Farbänderung des Formularhintergrundes
 
In den Proceduren passiert zur zeit nichts, was aus meiner Sicht damit zusammenhängen könnte:

Delphi-Quellcode:
procedure TFrmMain.FormCreate(Sender: TObject);
begin
  FrmMain.WindowState := wsMaximized;
end;

procedure TFrmMain.FormPaint(Sender: TObject);
begin
//  FrmMain.Color := OptFarbe;
//  ListBox1.Color := OptFarbe;
//  FrmMain.Repaint;
end;

procedure TFrmMain.FormShow(Sender: TObject);
begin
//  FrmMain.Color := OptFarbe;
end;
Ich hatte darüber nur versucht, den Fehler einzugrenzen bzw. zu beheben.

Direkt über einen Button habe ich das gleiche Erscheinungsbild - die ListBox schaltet die Farbe nicht mit um
Code:
procedure TFrmMain.Button1Click(Sender: TObject);
begin
  FrmMain.Color := clBlue;
end;

DeddyH 20. Sep 2013 10:24

AW: Farbänderung des Formularhintergrundes
 
Versuch doch mal Folgendes:
Delphi-Quellcode:
type
  TfrmMain = class(TForm)
  ...
  private
    { Private-Deklarationen }
    procedure CMColorChanged(var Message: TMessage); message CM_COLORCHANGED;

...

procedure TfrmMain.CMColorChanged(var Message: TMessage);
begin
  inherited;
  if Assigned(ListBox1) then
    ListBox1.Repaint;
end;


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