undeclared identifier: ´paint´

Delphi

16/06/2005

[color=violet:6b669eedcd]Ola pessoal,
Estou criando um componente Bitbtn, e entre outros metodos, preciso adicionar o metodo paint. implementei o seguinte:[/color:6b669eedcd]
Protected procedure Paint; Override;

procedure TColorBtnF.Paint;
var
  ESpace: Integer;
begin
  LockWindowUpdate(Canvas.Handle);
[color=green] inherited Paint;[/color]
  with Canvas do begin
    Brush.Style := bsClear;
    Brush.Color := Color;
    Font.Assign(FFont);
    Pen.Width := BorderWidth;
    if HasMouse then begin
     
     if IsMouseDown then begin
      {Remove old frame}
      Pen.Color := Color;
      Rectangle(0,0,Width-1,Height-1);
      
      Pen.Color := BorderColor;
      Rectangle(1,1,Width,Height);
      {Draw Button}
      Pen.Color := Brush.Color;
      Rectangle(2,2,Width-1,Height-1);
     end
     
     else begin
      
      Pen.Color := ShadowColor;
      Rectangle(1,1,Width,Height);
      
      Pen.Color := BorderColor;
      Rectangle(0,0,Width-1,Height-1);
      {Draw Button}
      Pen.Color := Brush.Color;
      Rectangle(1,1,Width-2,Height-2);
     end;
    end
 
    else begin
     {Remove old frame}
     Pen.Color := Color;
     Rectangle(0,0,Width-1,Height-1);
     {Remove shadow}
     Rectangle(1,1,Width,Height);
     {Draw Button}
     Rectangle(2,2,Width-1,Height-1);
    end;
    if not FEnabled then Font.Color := clGrayText;
    if HasMouse then begin
     if IsMouseDown then ESpace:=1 else ESpace:=0;
    end
    else ESpace:=1;
  TextOut(((Width-TextWidth(FCaption)) div 2)+Space+ESpace,
             ((Height - TextHeight(FCaption)) div 2)+ESpace,FCaption);
  end;
  LockWindowUpdate(0);
end;

[color=darkred:6b669eedcd] Quando compilo recebo a mensagem:[/color:6b669eedcd][color=blue:6b669eedcd] undeclared identifier: ´paint´[/color:6b669eedcd]
[color=red:6b669eedcd]
O pode ser? (Se precisarem de mais alguma informação me avisem please...)[/color:6b669eedcd]


_________________________

[b:6b669eedcd]Editando...[/b:6b669eedcd]
Tópico anterior excluído e observação ´[b:6b669eedcd][i:6b669eedcd]desculpe, tirei uma parte q tava comentada, considerem essa:[/i:6b669eedcd][/b:6b669eedcd]´ retirada.
Acrescentado também a tag [code].

Sandra/Moderação


Michelli88

Michelli88

Curtidas 0

Respostas

Michelli88

Michelli88

16/06/2005

Eu estava fazendo esse código para colocar meu botão sem a borda 3D.
Mas, dessa forma nao cheguei a lugar nenhum. No fim analisando o codigo, descobri uma coisa obvia, que eu devia ter visto a muito tempo... hehhe...

Consegui o efeito desejado, soh que de outra forma:

Criei um componente herdado do TButton, com as propriedades:
[color=blue:61ff81d4ca]
Color: TColor,
BorderColor: TColor,
ShowBorder: Boolean,
Flat : Boolean.[/color:61ff81d4ca]

Quando o Flat for TRUE, o botão nao vai ter aparencia 3D...

código:
unit ColorButton;

  interface

  uses
     Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
     StdCtrls, Buttons, ExtCtrls;

  type
     TDrawButtonEvent = procedure(Control: TWinControl;
     Rect: TRect; State: TOwnerDrawState) of object;
     TColorButton = class(TButton)
  private
     FShowBorder: Boolean;
     FFlat: Boolean;
     FCanvas: TCanvas;
     IsFocused: Boolean;
     FOnDrawButton: TDrawButtonEvent;
     FBorderColor: TColor;
     procedure SetBorderColor(value: TColor);
     procedure SetShowBorder(Value: Boolean);
     procedure SetFlat(Value: Boolean);
  protected
     procedure CreateParams(var Params: TCreateParams); override;
     procedure SetButtonStyle(ADefault: Boolean); override;
     procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED;
     procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED;
     procedure CNMeasureItem(var Message: TWMMeasureItem); message CN_MEASUREITEM;
     procedure CNDrawItem(var Message: TWMDrawItem); message CN_DRAWITEM;
     procedure WMLButtonDblClk(var Message: TWMLButtonDblClk); message WM_LBUTTONDBLCLK;
     procedure DrawButton(Rect: TRect; State: UINT);
  public
     constructor Create(AOwner: TComponent); override;
     destructor Destroy; override;
     property Canvas: TCanvas read FCanvas;
     published
     property OnDrawButton: TDrawButtonEvent read FOnDrawButton write FOnDrawButton;
     property Color;
     property ShowBorder: Boolean read FShowBorder write SetShowBorder default False;
     property Flat: Boolean read FFlat write SetFlat default True;
     property BorderColor: TColor read FBorderColor write SetBorderColor default clWindowFrame;
   end;

procedure Register;

implementation

procedure TColorButton.SetBorderColor(value: TColor);
begin
  if Value <> FBorderColor then
  begin
    FBorderColor := Value;
    Repaint;
  end;
end;

procedure TColorButton.SetShowBorder(value: Boolean);
begin
  if Value <> FShowBorder then
  begin
    FShowBorder := Value;
    Repaint;
  end;
end;

procedure TColorButton.SetFlat(value: Boolean);
begin
  if Value <> FFlat then
  begin
    FFlat := Value;
    Repaint;
  end;
end;

procedure Register;
begin
 RegisterComponents(´Michelli´, [TColorButton]);
end;

constructor TColorButton.Create(AOwner: TComponent);
begin
 inherited Create(AOwner);
 FCanvas := TCanvas.Create;
 Flat:=True;
end;

destructor TColorButton.Destroy;
begin
 inherited Destroy;
 FCanvas.Free;
end;

procedure TColorButton.CreateParams(var Params: TCreateParams);
begin
 inherited CreateParams(Params);
 with Params do Style := Style or BS_OWNERDRAW;
end;

procedure TColorButton.SetButtonStyle(ADefault: Boolean);
begin
 if ADefault <> IsFocused then
  begin
   IsFocused := ADefault;
   Refresh;
  end;
end;

procedure TColorButton.CNMeasureItem(var Message: TWMMeasureItem);
begin
 with Message.MeasureItemStruct^ do
  begin
   itemWidth := Width;
   itemHeight := Height;
  end;
end;

procedure TColorButton.CNDrawItem(var Message: TWMDrawItem);
var
 SaveIndex: Integer;
begin
 with Message.DrawItemStruct^ do
 begin
  SaveIndex := SaveDC(hDC);
  FCanvas.Lock;
  try
   FCanvas.Handle := hDC;
   FCanvas.Font := Font;
   FCanvas.Brush := Brush;
   DrawButton(rcItem, itemState);
  finally
   FCanvas.Handle := 0;
   FCanvas.Unlock;
   RestoreDC(hDC, SaveIndex);
  end;
 end;
 Message.Result := 1;
end;

procedure TColorButton.CMEnabledChanged(var Message: TMessage);
begin
 inherited;
 Invalidate;
end;

procedure TColorButton.CMFontChanged(var Message: TMessage);
begin
 inherited;
 Invalidate;
end;

procedure TColorButton.WMLButtonDblClk(var Message: TWMLButtonDblClk);
begin
 Perform(WM_LBUTTONDOWN, Message.Keys, Longint(Message.Pos));
end;

procedure TColorButton.DrawButton(Rect: TRect; State: UINT);
var
 Flags, OldMode: Longint;
 IsDown, IsDefault, IsDisabled: Boolean;
 OldColor: TColor;
 OrgRect: TRect;
 TipoFlat: Longint;
begin
 OrgRect := Rect;

 if Flat then //AQUI ELE DIZ O Q FAZER QUANDO É 3D OU NAO
   Flags := DFCS_ADJUSTRECT or DFCS_FLAT
 else
   Flags := DFCS_ADJUSTRECT or DFCS_BUTTONPUSH;

 IsDown := State and ODS_SELECTED <> 0;
 IsDefault := State and ODS_HOTLIGHT <> 0;
 IsDisabled := State and ODS_DISABLED <> 0;

 if IsDown then Flags := Flags or DFCS_FLAT;
 if IsDisabled then Flags := Flags or DFCS_INACTIVE;

 if IsFocused or IsDefault then
  begin
   FCanvas.Pen.Color := BorderColor;
   FCanvas.Pen.Width := 1;
   FCanvas.Brush.Style := bsClear;
   FCanvas.Rectangle(Rect.Left, Rect.Top, Rect.Right, Rect.Bottom);
   InflateRect(Rect, - 1, - 1);
  end;

  if IsDown then
   begin
     FCanvas.Pen.Color := clBtnShadow;
     FCanvas.Pen.Width := 1;
     FCanvas.Brush.Color := clBtnFace;
     FCanvas.Rectangle(Rect.Left, Rect.Top, Rect.Right, Rect.Bottom);
     InflateRect(Rect, - 1, - 1);
   end
  else
     DrawFrameControl(FCanvas.Handle, Rect, DFC_BUTTON, Flags);

  if IsDown then OffsetRect(Rect, 1, 1);

  OldColor := FCanvas.Brush.Color;
  FCanvas.Brush.Color := Color;
  FCanvas.FillRect(Rect);
  FCanvas.Brush.Color := OldColor;
  OldMode := SetBkMode(FCanvas.Handle, TRANSPARENT);
  FCanvas.Font.Color := Font.Color;
  if ShowBorder then
  begin
   FCanvas.Pen.Color := BorderColor;
   FCanvas.Pen.Width := 1;
   FCanvas.Brush.Style := bsClear;
   FCanvas.Rectangle(Rect.Left, Rect.Top, Rect.Right, Rect.Bottom);
   InflateRect(Rect, - 1, - 1);
  end;

  if IsDisabled then
   DrawState(FCanvas.Handle, FCanvas.Brush.Handle, nil, Integer(Caption), 0,
    ((Rect.Right - Rect.Left) - FCanvas.TextWidth(Caption)) div 2,
    ((Rect.Bottom - Rect.Top) - FCanvas.TextHeight(Caption)) div 2,
    0, 0, DST_TEXT or DSS_DISABLED)
  else
   DrawText(FCanvas.Handle, PChar(Caption), - 1, Rect,
   DT_SINGLELINE or DT_CENTER or DT_VCENTER);
   SetBkMode(FCanvas.Handle, OldMode);

  if Assigned(FOnDrawButton) then
   FOnDrawButton(Self, Rect, TOwnerDrawState(LongRec(State).Lo));

  if IsFocused and IsDefault then
    begin
      Rect := OrgRect;
      InflateRect(Rect, - 4, - 4);
      FCanvas.Pen.Color := clWindowFrame;
      FCanvas.Brush.Color := clBtnFace;
      DrawFocusRect(FCanvas.Handle, Rect);
    end;
end;

end.


[color=darkred:61ff81d4ca]POIS EH, MAIS FACIL DO QUE PENSEI, VALEU, BEIJOS[/color:61ff81d4ca]


GOSTEI 0
POSTAR