AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Farbänderung des Formularhintergrundes
Thema durchsuchen
Ansicht
Themen-Optionen

Farbänderung des Formularhintergrundes

Ein Thema von BasilBavaria · begonnen am 18. Sep 2013 · letzter Beitrag vom 20. Sep 2013
Antwort Antwort
BasilBavaria

Registriert seit: 18. Mai 2011
Ort: Niederbayern
22 Beiträge
 
Turbo Delphi für Win32
 
#1

Farbänderung des Formularhintergrundes

  Alt 18. Sep 2013, 19:31
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
Miniaturansicht angehängter Grafiken
form-color.jpg  
Die Zeiten ändern sich Früher traute ich keinem Computer, den ich nicht mehr tragen kann - heute keinem, den ich nicht mehr sehen kann ...
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Farbänderung des Formularhintergrundes

  Alt 18. Sep 2013, 21:31
Zum Zeitpunkt der Farbänderung die Methode Repaint bzw. Refresh der Listbox aufrufen?
  Mit Zitat antworten Zitat
BasilBavaria

Registriert seit: 18. Mai 2011
Ort: Niederbayern
22 Beiträge
 
Turbo Delphi für Win32
 
#3

AW: Farbänderung des Formularhintergrundes

  Alt 19. Sep 2013, 08:51
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.
Die Zeiten ändern sich Früher traute ich keinem Computer, den ich nicht mehr tragen kann - heute keinem, den ich nicht mehr sehen kann ...
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Farbänderung des Formularhintergrundes

  Alt 19. Sep 2013, 09:01
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
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)

Geändert von baumina (19. Sep 2013 um 09:07 Uhr)
  Mit Zitat antworten Zitat
BasilBavaria

Registriert seit: 18. Mai 2011
Ort: Niederbayern
22 Beiträge
 
Turbo Delphi für Win32
 
#5

AW: Farbänderung des Formularhintergrundes

  Alt 19. Sep 2013, 09:29
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
Die Zeiten ändern sich Früher traute ich keinem Computer, den ich nicht mehr tragen kann - heute keinem, den ich nicht mehr sehen kann ...
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Farbänderung des Formularhintergrundes

  Alt 19. Sep 2013, 09:39
Habs ausprobiert ... funktioniert einwandfrei. Folgende proceduren hatte ich natürlich nicht : FormCreate, FormPaint, FormShow. Evtl. ist dort etwas begraben.
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
BasilBavaria

Registriert seit: 18. Mai 2011
Ort: Niederbayern
22 Beiträge
 
Turbo Delphi für Win32
 
#7

AW: Farbänderung des Formularhintergrundes

  Alt 20. Sep 2013, 10:46
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;
Die Zeiten ändern sich Früher traute ich keinem Computer, den ich nicht mehr tragen kann - heute keinem, den ich nicht mehr sehen kann ...
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#8

AW: Farbänderung des Formularhintergrundes

  Alt 20. Sep 2013, 11:24
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:20 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