Ich habe eine Statusleiste mit 3 Panels. Wenn ich den Text von ihnen in Laufzeit ändere, wird es in der ersten (Index 0) nicht geändert.Update-Text in der Statusleiste zeigt keine Änderungen im ersten Panel mit anderen VCL-Thema verwendet
Ich sehe, das passiert nur, wenn andere VCL Thema gewählt wird (zB Cyan Dusk).
Initial Design Texte sind:
StatusBar.Panels[0].Text := '1';
StatusBar.Panels[1].Text := '2';
StatusBar.Panels[2].Text := '3';
Und in der Laufzeit habe ich es:
StatusBar.Panels[0].Text := '11'; // this is not changed visually
StatusBar.Panels[1].Text := '22';
StatusBar.Panels[2].Text := '33';
Ich habe auch versucht, diesen Code schließlich nichts gearbeitet:
Application.ProcessMessages;
StatusBar.Refresh;
StatusBar.Update;
Refresh;
I Ausprobiert hat es auch in der leeren neuen Anwendung das selbe Problem.
Wenn ich versuche, es zu debuggen, in Code Inspector ich sehe, hat sich der Wert geändert habe ich versucht, auch für den Index 0.
Auch dieses:
procedure TMainForm.StatusBarClick(Sender: TObject);
begin
ShowMessage(StatusBar.Panels[0].Text); // 11
ShowMessage(StatusBar.Panels[1].Text); // 22
ShowMessage(StatusBar.Panels[2].Text); // 33
end;
Aber noch in der Statusbar Panel Index 0 ist nur 1
.
Hinweis: Dies geschieht nur, wenn ein anderes VCL-Thema verwendet wird.
Ist dieser Fehler in VCL-Themen? Wie kann ich evozieren, um geänderten Text zu aktualisieren?
UPDATE:
Wenn ich StatusBar.StyleElements := StatusBar.StyleElements - [seClient];
eingestellt es funktioniert auch für die erste Platte. Aber warum ohne das funktioniert es nur für Panels mit Index> 0?
Wenn Sie den Zugriff auf die VCL-Quellcode haben, sehen Sie die Implementierung von 'TStatusBar.StyleElements' und sehen Sie selbst, warum' seClient' macht einen Unterschied. –