Newsgroup: it.comp.lang.delphi
Titolo: Inserire una icona nella statusbar (icona + Testo )

Salve a tutti io ho la necessità di inserire in un pannello della
statusbar una icona o bitmap e un testo.da come ho visto si può mettere o
solo testo o solo una icona.
A me servirebbe mettere tutti e dure contemporaneamente.
Grazie in anticipo.
Ciao
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it


Nell' Help di delphi 5 Enterprise io ho trovato.
...
procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar;
  Panel: TStatusPanel; const Rect: TRect);
begin
with StatusBar1.Canvas do
  begin
    Brush.Color := clRed;
    FillRect(Rect);
    Font.Color := clYellow;
    ImageList1.Draw(StatusBar1.Canvas,Rect.Left,Rect.Top,Panel.Index);
    TextOut(Rect.left + 30, Rect.top + 2, 'Panel' + IntToStr(Panel.Index));
  end;
end;
--------------------------------
Inviato via 
http://usenet.libero.it

Ciao!
Perdona la domanda stupida, ma se io volessi passare
a questa procedura una variabile contenete, ad esempio, il colore
della Brush, come dovrei fare?
Nella procedura ci sono gia le variabili StatusBar e Panel e non me ne fa
aggiungere altre.
Ciao
  miyomo


 > IntToStr(Panel.Index)); end;
Puoi mettere
      TextOut(Rect.left + 30, Rect.top + 2,
      s + IntToStr(Panel.Index));
Ciao


Ciao Mario, scusami ma erroneamente ti ho postato il msg sulla tua
casella personale.
Allora, mi sono spiegato male:
Vorrei sapere se devi passare una variabile, ad esempio un colore,
dall'esterno della procedura, come fai?
Una cosa del tipo...
var iCOLOREVARIABILE
begin
   iCOLOREVARIABILE:=clRed;
  //adesso dovrebbe ridisegnare la statusbar
end;
procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar;
 Panel: TStatusPanel; const Rect: TRect);
 begin
 with StatusBar1.Canvas do
   begin
     Brush.Color := iCOLOREVARIABILE;
     FillRect(Rect);
     Font.Color := clYellow;
     ImageList1.Draw(StatusBar1.Canvas,Rect.Left,Rect.Top,Panel.Index);
     TextOut(Rect.left + 30, Rect.top + 2, 'Panel' +
   IntToStr(Panel.Index)); end;
 end;
Ciao!
Miyomo


...
Private
  iCOLOREVARIABILE : tColor ;
....
Dove c'è private pubblic ecc
...
Begin
 iCOLOREVARIABILE := clRed ;
...
Ecc


 IntToStr(Panel.Index)); end; end;
La statusbar viene ridisegnata quando occorre (ad esempio viene scoperta
da una finestra sovrastante). Per forzare un repaint si puo' chiamare ad
es. Invalidate.
Per far sapere in StatusBar1DrawPanel quale colore usare puoi
sostanzialmente usare tre metodi: a) decidere volta per volta in base
alle condizioni valide nel momento in cui il metodo viene attivato; b)
settare una (o piu') _variabili globali_ [1] all'unita'; c) subclassare
TStatusBar facendo l'override di DrawPanel ed aggiungendo il nuovo tipo
di evento.
[1]: l'esempio che fai con iColoreVariabile non puo' funzionare perche'
la visibilita' della variabile e' limitata alla funzione in cui la
assegni.
Personalmente, a meno di esigenze particolari, userei la prima:
procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar;
 Panel: TStatusPanel; const Rect: TRect);
  function ChooseColor2UseForPanel: TColor;
  begin
    Result := clBtnFace;
    if Panel.Index = 0 then
      if form1.Alarmed then Result := clRed
      else if form1.Warned then Result := clYellow;
  end;
begin
  with StatusBar1.Canvas do
    begin
      Brush.Color := ChooseColor2UseForPanel;
...
Saluti
Paolo Arosio

 il nuovo tipo di evento.
Ciao Paolo,
potresti farmi un esempio di un subclass?
Solo se puoi, grazie!
Miyomo

 potresti farmi un esempio di un subclass?
v. sotto (scritto in OE)
Saluti
Paolo Arosio
 <esempio d'uso>
    procedure ColoraPannello(StatusBar: TpaStatusBar; Panel:
TStatusPanel;
    const Rect: TRect; Color: TColor);
procedure TForm1.ColoraPannello(StatusBar: TpaStatusBar;
  Panel: TStatusPanel; const Rect: TRect; Color: TColor);
begin
  StatusBar.Canvas.Brush.Color := Color;
  StatusBar.Canvas.FillRect(Rect);
  case StatusBar.PanelColor of
    clBtnFace: StatusBar.PanelColor := clYellow;
    clYellow: StatusBar.PanelColor := clRed;
    clRed: StatusBar.PanelColor := clGreen;
    clGreen: StatusBar.PanelColor := clBtnFace;
  end;
end;
 <esempio d'uso/>
 <unit con la status bar>
unit paStatusBar;
interface
uses
  Windows, Messages, SysUtils, Classes, Controls, ComCtrls, Graphics;
type
  TpaStatusBar = class;
  TpaDrawPanelEvent = procedure(StatusBar: TpaStatusBar; Panel:
TStatusPanel;
    const Rect: TRect; Color: TColor = clBtnFace) of object;
  TpaStatusBar = class(TCustomStatusBar)
  private
    { Private declarations }
    fpaDrawPanel: TpaDrawPanelEvent;
    fPanelColor: TColor;
    function GetOnDrawPanel: TpaDrawPanelEvent;
    procedure SetOnDrawPanel(const Value: TpaDrawPanelEvent);
  protected
    { Protected declarations }
    procedure DrawPanel(Panel: TStatusPanel; const Rect: TRect);
override;
  public
    { Public declarations }
  published
    { Published declarations }
    property PanelColor: TColor read fPanelColor write fPanelColor;
    property Action;
    property AutoHint default False;
    property Align default alBottom;
    property Anchors;
    property BiDiMode;
    property BorderWidth;
    property Color default clBtnFace;
    property DragCursor;
    property DragKind;
    property DragMode;
    property Enabled;
    property Font stored IsFontStored;
    property Constraints;
    property Panels;
    property ParentBiDiMode;
    property ParentColor default False;
    property ParentFont default False;
    property ParentShowHint;
    property PopupMenu;
    property ShowHint;
    property SimplePanel;
    property SimpleText;
    property SizeGrip default True;
    property UseSystemFont default True;
    property Visible;
    property OnClick;
    property OnContextPopup;
    property OnCreatePanelClass;
    property OnDblClick;
    property OnDragDrop;
    property OnDragOver;
    property OnEndDock;
    property OnEndDrag;
    property OnHint;
    property OnMouseDown;
    property OnMouseMove;
    property OnMouseUp;
    property OnDrawPanel: TpaDrawPanelEvent read GetOnDrawPanel write
SetOnDrawPanel;
    property OnResize;
    property OnStartDock;
    property OnStartDrag;
  end;
procedure Register;
implementation
procedure Register;
begin
  RegisterComponents('Samples', [TpaStatusBar]);
end;
{ TpaStatusBar }
procedure TpaStatusBar.DrawPanel(Panel: TStatusPanel; const Rect:
TRect);
begin
  if Assigned(OnDrawPanel) then
    fpaDrawPanel(Self, Panel, Rect, fPanelColor)
  else
    Canvas.FillRect(Rect);
end;
function TpaStatusBar.GetOnDrawPanel: TpaDrawPanelEvent;
begin
  Result := fpaDrawPanel;
end;
procedure TpaStatusBar.SetOnDrawPanel(const Value: TpaDrawPanelEvent);
begin
  fpaDrawPanel := Value;
end;
end.

 v. sotto (scritto in OE)
           ^^^^^^^^^^^^^^^ da cancellare.
Saluti
Paolo Arosio