// Es werden
Controls (z.B. TProgressbar) in ein Statusbar-Panel
// eingefügt, wobei entsprechende Größenanpassungen vorgenommen werden
// können, sowie
mit x und y eine horizontale und/oder vertikale
// Verschiebung zum Panelrand
eingestellt werden kann. Wenn mehrere
// Panels belegt werden sollen, muss das von links
nach rechts
// geschehen, also bei "Panels[0]" beginnend. Sollen dabei Controls mit
//
unterschiedlicher Höhe eingefügt werden, ist es besser die Statusbar
// von Hand
auf die größte Höhe (+ 2 für den Rand) einzustellen und die
// Komponenten nur mit
PanelBreiteAnpassen einzufügen.
Voraussetzung
// ist, dass überhaupt Statuspanel angelegt wurden.
// Getestet mit D4 unter XP
uses
CommCtrl;
type
wie = (PanelBreiteAnpassen, PanelHoeheAnpassen, PanelBreiteUndHoeheAnpassen,
ControlAnpassen, KeineAnpassung);
procedure InsPanel(stb: TStatusbar; welchesPanel: byte;
tc: TControl; anpassen: wie; x, y: integer);
var r: Trect;
begin
if stb.panels.count > welchesPanel then begin
stb.perform(sb_getrect, welchesPanel, integer(@r));
if anpassen = ControlAnpassen then begin
tc.width := r.right - r.left - x * 2;
tc.height := r.bottom - r.top - y * 2;
end else
if anpassen <> KeineAnpassung then begin
if anpassen <> PanelHoeheAnpassen then
stb.panels[welchesPanel].width := tc.width + ord(welchesPanel > 0) *
2 + x * 2;
if (anpassen = PanelBreiteUndHoeheAnpassen) or
(anpassen = PanelHoeheanpassen) then
stb.height := tc.height + 1 + y * 2;
end;
tc.parent := stb;
tc.left := r.left + x;
if (anpassen = PanelBreiteAnpassen)
then tc.top := y + round((stb.height - tc.height) / 2)
else tc.top := r.top + y;
if (stb.panels.count - 1 = welchesPanel) and ((anpassen =
PanelBreiteAnpassen)
or (anpassen = PanelBreiteUndHoeheAnpassen)) then
showmessage('Anpassung wurde möglicherweise nicht korrekt ausgeführt');
end else
showmessage('StatusPanel ' + inttostr(welchesPanel) +
' ist nicht vorhanden');
end;
// Beispielaufrufe
procedure TForm1.Button1Click(Sender: TObject);
begin
inspanel(statusbar1, 1, Image1, PanelBreiteUndHoeheAnpassen, 0, 0);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
inspanel(statusbar1, 0, Button1, PanelBreiteAnpassen, 10, 2);
end;
procedure TForm1.Label1Click(Sender: TObject);
begin
label1.Alignment := tacenter;
label1.Layout := tlcenter;
label1.autosize := false;
label1.transparent := true;
inspanel(statusbar1, 2, label1, controlanpassen, 0, 0);
end;
|