Einzelnen Beitrag anzeigen

Volker Z.

Registriert seit: 3. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#2

AW: StatusBar.DrawPanel geht nicht mit Skinning.

  Alt 31. Aug 2013, 01:29
Hallo,

ich weiß jetzt nicht warum Du ein TMyStatusBar einführst. Wenn das für Eure Anwendung einen besonderen Grund hat, dann hilft Dir nachfolgendes vielleicht nicht wirklich weiter.

Zitat:
Solange das Skinning aktiv ist wird DrawPanel nicht durchlaufen. Wird skinning ausgeschaltet wird DrawPanel durchlaufen.
Woran könnte das liegen?
Wenn Du Styles aktivierst, dann läuft das Zeichnen über TStatusBarStyleHook.Paint und dort wird nicht DrawPanel sondern OnDrawPanel (sofern zugewiesen) aufgerufen.

Vielleicht hilft Dir folgendes weiter (Button, Label, ProgressBar und StatusBar auf ein Form legen):
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if not Assigned (TStyleManager.ActiveStyle) then
    Exit;

  if LowerCase (TStyleManager.ActiveStyle.Name) <> 'windowsthen
    TStyleManager.TrySetStyle ('Windows')
  else
    TStyleManager.TrySetStyle (FDefaultStyleName);

  StatusBar1.OnDrawPanel := StatusBar1DrawPanel
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  if Assigned (TStyleManager.ActiveStyle) then
    FDefaultStyleName := TStyleManager.ActiveStyle.Name;

  ProgressBar1.Parent := StatusBar1;
  ProgressBar1.Left := StatusBar1.Panels.Items[0].Width + 4;
  ProgressBar1.Top := 2;
  ProgressBar1.Height := StatusBar1.Height - 2;
  ProgressBar1.Width := StatusBar1.Panels.Items[1].Width - 6;
end;

procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar; Panel: TStatusPanel; const Rect: TRect);
begin
  if Assigned (TStyleManager.ActiveStyle) then
    Label1.Caption := TStyleManager.ActiveStyle.Name
  else
    Label1.Caption := 'Kein Style aktiv';

  StatusBar1.OnDrawPanel := nil
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if ProgressBar1.Position = ProgressBar1.Max then
    ProgressBar1.Position := 0;

  ProgressBar1.Position := ProgressBar1.Position + 1;
end;
Gruß
Volker Zeller
  Mit Zitat antworten Zitat