AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

StatusBar.DrawPanel geht nicht mit Skinning.

Ein Thema von hewy · begonnen am 30. Aug 2013 · letzter Beitrag vom 2. Sep 2013
 
hewy

Registriert seit: 2. Aug 2006
Ort: Arni (Region Zürich) Schweiz
83 Beiträge
 
Delphi XE5 Enterprise
 
#1

StatusBar.DrawPanel geht nicht mit Skinning.

  Alt 30. Aug 2013, 15:48
Hallo

anbei eine kleine Beispiel Applikation welche eine Progressbar auf einer StatusBar anzeigt. In unsere Applikation verwenden wir DrawPanel der StatusBar für verschieden zwecke. Nun soll die Applikation auch noch ein Kinning erhalten. Wird das Skinning aktiviert wird DrawPanel der StatusBar nicht mehr ausgeführt.

Zu testen:
Neue VCL Form Appl erstellen.
tButton [Name := Button1]
tTimer [Name := TimerStatusProgress]
drauflehen

Mein Code dazu.
Breackpoint auf Zeile 50 (Innerhalb DrawPanel)

Solange das Skinning aktiv ist wird DrawPanel nicht durchlaufen.
Wird skinning ausgeschaltet wird DrawPanel durchlaufen.

Woran könnte das liegen?
Wie ist zu ändern damit DrawPanel unabhängig vom Skinning durchlaufen wird?

Code:
unit U_DialogTest;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics, Vcl.ComCtrls, Vcl.ExtCtrls,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,
  Vcl.Styles, Vcl.Themes;

type

  TMyStatusBar = Class(TCustomStatusBar)

  protected
    procedure DrawPanel(Panel: TStatusPanel; const Rect: TRect); override;

  End;

  TFormSkin = class(TForm)
    TimerStatusProgress: TTimer;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure TimerStatusProgressTimer(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    FStatusBar: TMyStatusBar;
    FProgressBar: TProgressBar;
    FdefaultStyleName:String;
  public
    { Public declarations }

  end;

var
  FormSkin: TFormSkin;

implementation

{$R *.dfm}
{ TMyStatusBar }

procedure TMyStatusBar.DrawPanel(Panel: TStatusPanel; const Rect: TRect);
begin
  // Do some thing
  // Do some thing
  // Do some thing
  inherited;
end;

procedure TFormSkin.Button1Click(Sender: TObject);
begin
if Assigned(TStyleManager.ActiveStyle) and (TStyleManager.ActiveStyle.Name<>'Windows') then begin
   TStyleManager.TrySetStyle('Windows');
 end else begin
   TStyleManager.TrySetStyle(fdefaultStyleName);
 end;
end;

procedure TFormSkin.FormCreate(Sender: TObject);
var
  skinfile: string;

var
  ProgressBarStyle: LongInt;

begin

  // Skinning
  if Assigned(TStyleManager.ActiveStyle) then
    fdefaultStyleName := TStyleManager.ActiveStyle.Name;
//    TStyleManager.TrySetStyle('Windows');


  FStatusBar := TMyStatusBar.Create(self);
  FStatusBar.Parent := self;
  FStatusBar.Panels.Add;
  FStatusBar.Panels.Add;
  FStatusBar.Panels.Add;
  FStatusBar.Panels[0].Width := 160;
  FStatusBar.Panels[1].Width := 200;
  FStatusBar.Panels[1].Style := psOwnerDraw;
  FStatusBar.Panels[1].Bevel := pbNone;

  { create a run progress bar in the status bar }
  FProgressBar := TProgressBar.Create(FStatusBar);
  FProgressBar.Parent := FStatusBar;
  { set progress bar position and size - put in Panel[2] }
  FProgressBar.Left := FStatusBar.Panels.Items[0].Width + 4;
  FProgressBar.Top := 2;
  FProgressBar.Height := FStatusBar.Height - 2;
  FProgressBar.Width := FStatusBar.Panels.Items[1].Width - 6;
  { set range and initial state }
  FProgressBar.Min := 0;
  FProgressBar.Max := 100;
  FProgressBar.Step := 1;
  FProgressBar.Position := 0;
end;

procedure TFormSkin.FormDestroy(Sender: TObject);
begin
  FProgressBar.free;
end;

procedure TFormSkin.TimerStatusProgressTimer(Sender: TObject);
begin
  if FProgressBar.Position = FProgressBar.Max then
    FProgressBar.Position := 0;
  FProgressBar.Position := FProgressBar.Position + 1;
end;

end.
Sicher gibt es jemand der auch schon darüber gestolpert ist und mir einen Hint geben kann wie ich hier weiter komme. Daher bedanke ich mich schon mal.

Bestend Dank und Gruss
hewy
Heinrich Wyssen
  Mit Zitat antworten Zitat
 

 

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 17:13 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 by Thomas Breitkreuz