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) <> 'windows' then
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ß