Thema: Delphi buttonstyle ändern

Einzelnen Beitrag anzeigen

Benutzerbild von FastJack2
FastJack2

Registriert seit: 22. Mär 2004
Ort: Lübeck
54 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: buttonstyle ändern

  Alt 25. Aug 2004, 13:32
Soa ... nach reichlicher herumjongliererei mit windows messages und einer kleinen Mittagspause ist nun folgendes herausgekommen:

Code:
type
  TOwnButton = class(TButton)
  private
    isin: boolean;
    ismousein: boolean;
    isdown: boolean;
    procedure paintme;
  public
    procedure PMNorm(var message: TMessage); message WM_PAINT;
    procedure PMUpDown(var message: TMessage); message $f3;
    procedure PMEnter(var message: TMessage); message WM_SETFOCUS;
    procedure PMLeave(var message: TMessage); message WM_KILLFOCUS;
    procedure PMMouseEnter(var message: TMessage); message CM_MOUSEENTER;
    procedure PMMouseLeave(var message: TMessage); message CM_MOUSELEAVE;
  end;

implementation

procedure TOwnButton.paintme;
var
  c: TControlCanvas;
begin
  try
    c := TControlCanvas.create;
    c.Control := self;
    if isdown then
    begin
      c.TextOut(5,5,'down'); //hier statt textout einfach auf dem canvas malen ...
    end
    else if ismousein then
    begin
      c.TextOut(5,5,'hover'); //hier statt textout einfach auf dem canvas malen ...
    end
    else if isin then
    begin
      c.TextOut(5,5,'focus'); //hier statt textout einfach auf dem canvas malen ...
    end
    else
    begin
      c.TextOut(5,5,'norm'); //hier statt textout einfach auf dem canvas malen ...
    end;
  finally
    FreeAndNil(c);
  end;
end;

procedure TOwnButton.PMNorm(var message: TMessage);
begin
  inherited;
  paintme;
end;

procedure TOwnButton.PMUpDown(var message: TMessage);
begin
  inherited;
  if message.WParam = 1 then
  begin
    isdown := true;
    paintme;
  end
  else
  begin
    isdown := false;
    paintme;
  end;
end;

procedure TOwnButton.PMMouseEnter(var message: TMessage);
begin
  ismousein := true;
  paintme;
end;

procedure TOwnButton.PMMouseLeave(var message: TMessage);
begin
  ismousein := false;
  paintme;
end;

procedure TOwnButton.PMEnter(var message: TMessage);
begin
  isin := true;
  inherited;
end;

procedure TOwnButton.PMLeave(var message: TMessage);
begin
  isin := false;
  inherited;
end;
hoffe das war das, was du haben wolltest ;)

falls du noch runde buttons implementieren willst, musst du halt deren region setzen, aber das ist ein anderes thema ;)

greetz
-FastJack2
wo unrecht zu recht wird, wird widerstand zur pflicht ! (c) '98 - WoF board
  Mit Zitat antworten Zitat