// 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; 



Zugriffe seit 6.9.2001 auf Delphi-Ecke