Fórum Icone em Statusbar Representando Estado do Dataset. #266883

31/01/2005

0

Alow Pessoal.

Andei vendo por aki esses últimos dias, procurando algo pra me ajudar a colocar uma imagem, podemdo ser icone ou nao, numa StatusBar comum. Achei algumas coisas, mas nao me ajudaram muito pois o que eu quero é o seguinte, que, dependento do estado do dataset, ele mostre imagens diferentes, em algum panel dessa statusbar. Sacaram a questão ? É pra enfeitar mesmo, mas que ajuda o cliente mais ´Leigo´ a saber o que ele tá fazendo.

Eu uso IBO Core e Firebird, Junto com o Delphi 7 Rodando em Windows XP SP2, se isso servir de informação é claro.

Aguardo respostas..

Technos :idea:


Technos

Technos

Responder

Posts

01/02/2005

Rômulo Barros

Adicione o componente TImageList no seu projeto e, neste componente, insira três imagens nele para representarem os estados do dAtaSet.

[color=red:1bed0ba57b][b:1bed0ba57b]// A primeira imagem representará o estado de inserção do Dataset;
// A segunda imagem representará o estado de edição do dataset;
// A terceira imagem representará o estado de edição do visualização;[/b:1bed0ba57b][/color:1bed0ba57b]

Agora, adicione uma TStatus Bar no seu projeto e, neste componente, dê um duplo click e adicione um Panels. Alter a propriedade [b:1bed0ba57b]Style[/b:1bed0ba57b] do Panel criado para [b:1bed0ba57b]psOwnerDraw[/b:1bed0ba57b];

Pronto. Agora declare o seguinte método no seu formulário:

procedure Pintar(imagem: TImageList; Barra: TStatusBar;
  Panel: TStatusPanel; Rect: TRect ; IndiceImagem : Integer);
begin
   Barra.Canvas.FillRect(Rect);
   Barra.Canvas.TextOut(Rect.Left+18, Rect.Top, Panel.Text);
   imagem.Draw(Barra.Canvas, Rect.Left+15, Rect.Top,IndiceImagem);
end;


Após isso, implemente o código abaixo no evento OnDrawPanel da sua StatusBar:

procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar;
  Panel: TStatusPanel; const Rect: TRect);
Var
   Estado : Integer;
begin
   With(DataSource1.DataSet)Do
   Begin
      If(State = dsInsert)Then
        Estado := 0 ; // Representará a primeria imagem do ImageList1
      If(State = dsEdit)Then
        Estado := 1 ; // Representará a segunda imagem do ImageList1
      If(State = dsBrowse)Then
        Estado := 2 ; // Representará a terceira imagem do ImageList1
      Pintar(ImageList1,StatusBar1,StatusBar1.Panels[0],Rect, Estado);
   End;
end;


Agora, no datasource ligado a sua Query / Table, implemente o código abaixo no evento OnStateChange:

procedure TForm1.DataSource1StateChange(Sender: TObject);
begin
   StatusBar1.Refresh;
end;


[color=red:1bed0ba57b][b:1bed0ba57b]Pronto. Espero ter ajudado.[/b:1bed0ba57b][/color:1bed0ba57b]


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar