Sobre pintura com Canvas...

Delphi

22/08/2005

Pessoal precizo pintar o Formulário principal da aplicação... meu código funciona se executá-lo depois que o formulário já está totalmente construido... (no envento de um botão por exemplo)... mas no [b:e286f94a2e]OnShow[/b:e286f94a2e] ou no procedimento protegido [b:e286f94a2e]DoShow[/b:e286f94a2e] ele não funciona... o q fazer :?:


Bruno Belchior

Bruno Belchior

Curtidas 0

Respostas

Massuda

Massuda

22/08/2005

...meu código funciona se executá-lo depois que o formulário já está totalmente construido... (no envento de um botão por exemplo)... mas no [b:c5f7644e75]OnShow[/b:c5f7644e75] ou no procedimento protegido [b:c5f7644e75]DoShow[/b:c5f7644e75] ele não funciona...
Coloque o seu código de desenho no canvas do form no evento OnPaint do form. Mas atenção: esse evento é gerado sempre que o form precisa ser desenhado, não apenas no momento que o form é criado.


GOSTEI 0
Bruno Belchior

Bruno Belchior

22/08/2005

Massuda já fiz esse teste e não funcionou...


GOSTEI 0
Massuda

Massuda

22/08/2005

Será que dá para você postar sua rotina de desenho aqui? Deveria funcionar no OnPaint, já que é nessa hora que o form está pronto para ser exibido.


GOSTEI 0
Bruno Belchior

Bruno Belchior

22/08/2005

taí...

Procedure PreencherStatusBar;
var
  Icone: TIcon;
  Rect: TRect;
begin
  StsBrPrincipal.SimpleText := ´´;
  Icone := TIcon.Create;
  with Rect do
  begin
    TopLeft.X := 2;
    TopLeft.Y := 3;
    BottomRight.X := 18;
    BottomRight.Y := 18;
  end;
  DtMdlAuditoria.ImgListPrincipal.GetIcon(4, Icone);
  with StsBrPrincipal.Canvas do
  begin
    Brush.Color := Self.Canvas.Brush.Color;
    Font.Style := [fsBold];
    Font.Color := clRed;
    StretchDraw(Rect, Icone);
    TextOut(30, 6, DtMdlAuditoria.Auditoria.UsuarioAtual.Nome);
  end;
end;



GOSTEI 0
Massuda

Massuda

22/08/2005

Você está desenhando num StatusBar, não no form, por isso não funciona.

Para desenhar no StatusBar, o correto é definir no StatusBar um painel com estilo psOwnerDraw e usar o evento OnDrawPanel do StatusBar para desenhar no painel (o StatusBar necessariamente deve estar com a propriedade SimplePanel em False).

Este exemplo é o que está na Ajuda do Delhi, no tópico TStatusBar.OnDrawPanel...
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;
Esse exemplo desenha uma imagem que está em um ImageList em um painel do StatusBar.


GOSTEI 0
Bruno Belchior

Bruno Belchior

22/08/2005

era isso mesmo Massuda... tinha ouvido falar em [b:b138de365c]OwnerDraw[/b:b138de365c] apenas com TMenuItem... :oops:


GOSTEI 0
POSTAR