![]() |
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:
Bei Programmstart passt es auch (1.Teilbild im Screenshot)
ParentColor = true
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 |
AW: Farbänderung des Formularhintergrundes
Zum Zeitpunkt der Farbänderung die Methode
Delphi-Quellcode:
bzw.
Repaint
Delphi-Quellcode:
der Listbox aufrufen?
Refresh
|
AW: Farbänderung des Formularhintergrundes
Danke für die Rückmeldung. Hatte ich mir auch gedacht:
Code:
Der Code steht im Aufruf des Optionsdialoges und wird nach dem Rücksprung ausgeführt.
FrmMainOptions.ShowModal; // <-- Farbänderung im OptionsDialog
FrmMain.Color := OptFarbe; // <-- wird übernommen - OK! //folgende drei Anweisungen werden ignoriert ListBox1.Color := OptFarbe; ListBox1.Repaint; ListBox1.Refresh; Auch entsprechende Einträge im OnPaint der Form brachten keine Änderung des Erscheinungsbildes. |
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 |
AW: Farbänderung des Formularhintergrundes
Aufruf der Farbänderung - entspricht Button1Click im vg. Code
Delphi-Quellcode:
Die Codestrecke fürs ganze Formular
procedure TFrmMain.ImageAppOptionsClick(Sender: TObject);
begin FrmMainOptions.ShowModal; FrmMain.Color := OptFarbe; // ListBox1.Color := OptMetroFarbe; // ListBox1.Repaint; // ListBox1.Refresh end;
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 |
AW: Farbänderung des Formularhintergrundes
Habs ausprobiert ... funktioniert einwandfrei. Folgende proceduren hatte ich natürlich nicht : FormCreate, FormPaint, FormShow. Evtl. ist dort etwas begraben.
|
AW: Farbänderung des Formularhintergrundes
In den Proceduren passiert zur zeit nichts, was aus meiner Sicht damit zusammenhängen könnte:
Delphi-Quellcode:
Ich hatte darüber nur versucht, den Fehler einzugrenzen bzw. zu beheben.
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; 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; |
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 13:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz