Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.16;
Скачать: CL | DM;

Вниз

Помогите разобраться с компанентой   Найти похожие ветки 

 
marik   (2007-11-21 09:54) [0]

Вот набросал код:

unit MyButton;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, extctrls;

type

 TMyButton = class(TGraphicControl)
 private
   { Private declarations }

   TransButton: Boolean;
   StrechButton: Boolean;
   DownButton: Boolean;

   MyCaption: String;

   ActiveBitmap: TBitMap;
   SplashBitmap: TBitMap;
   procedure WriteCaption(Value: String);
   procedure WriteActiveBitmap(const Value: TBitmap);
   procedure WriteSplashBitmap(const Value: TBitmap);
   procedure WriteTransButton(const Value: Boolean);
   procedure WriteStrechButton(const Value: Boolean);
   procedure WriteDownButton(const Value: Boolean);    

 protected
   { Protected declarations }
   procedure Paint; override;
   procedure CMMouseEnter (var Message: TMessage); message CM_MOUSEENTER;
   procedure CMMouseLeave (var Message: TMessage); message CM_MOUSELEAVE;
   procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED;

 public
   { Public declarations }
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
 published
   { Published declarations }

    property Font;
    property Caption: String read MyCaption write WriteCaption;
    property ActBtn: TBitmap read ActiveBitmap write WriteActiveBitmap;
    property SplBtn: TBitmap read SplashBitmap write WriteSplashBitmap;
    property TransBtn: Boolean read TransButton write WriteTransButton;
    property StrBtn: Boolean read StrechButton write WriteStrechButton;
    property Down: Boolean read DownButton write WriteDownButton;

    property OnClick;
    property OnMouseDown;
    property OnMouseUp;
    property OnMouseMove;

 end;
var
optButton: Boolean;

procedure Register;

implementation

procedure Register;
begin
 RegisterComponents("Samples", [TMyButton]);
end;

constructor TMyButton.Create(AOwner: TComponent);
begin
 inherited Create(AOwner);
 optButton:=false;
 DownButton:= False;
 ActiveBitmap:=Tbitmap.Create;
 SplashBitmap:=Tbitmap.Create;
 ParentFont := True;
 Repaint;
end;

destructor TMyButton.Destroy;
begin
 inherited Destroy;
 ActiveBitmap.Free;
 SplashBitmap.Free;
end;

procedure TMyButton.Paint;
var
 r: Trect;
begin
 Canvas.Brush.Color := (Owner as TForm).Color;
 SetBKMode(canvas.handle,Integer(transparent));
 r.Left:=0;
 r.top:=0;
 r.Right:=Width;
 r.Bottom:=Height;

 if (optButton) or (DownButton) then begin
    if StrechButton then Canvas.StretchDraw(r, SplashBitmap) else Canvas.Draw(0,0, SplashBitmap)
 end else begin
    if StrechButton then  Canvas.StretchDraw(r, ActiveBitmap) else Canvas.Draw(0,0, ActiveBitmap);
 end;
 canvas.font.assign(inherited font);
 Canvas.TextOut((Width-Canvas.TextWidth(MyCaption)) div 2,(Height-Canvas.TextHeight(MyCaption)) div 2,myCaption);

end;

procedure TMyButton.CMFontChanged(var Message: TMessage);
begin
 repaint;
 invalidate;
 inherited;
end;

procedure TMyButton.CMMouseEnter (var Message: TMessage);
begin
 If optButton then exit;
 optButton:=True;
 Paint;
end;

procedure TMyButton.CMMouseLeave (var Message: TMessage);
begin
 If not optButton then exit;
 optButton:=False;
 RePaint;
end;

procedure TMyButton.WriteCaption(Value: String);
begin
 MyCaption:=Value;
end;

procedure TMyButton.WriteSplashBitmap(const Value: TBitmap);
begin
 SplashBitmap.Assign(value);
 RePaint;
end;

procedure TMyButton.WriteActiveBitmap(const Value: TBitmap);
begin
 ActiveBitmap.Assign(value);
 RePaint;
end;

procedure TMyButton.WriteTransButton(const Value: Boolean);
begin
 TransButton:=Value;
 ActiveBitmap.Transparent:=TransButton;
 SplashBitmap.Transparent:=TransButton;
 RePaint;
end;

procedure TMyButton.WriteStrechButton(const Value: Boolean);
begin
 StrechButton:=Value;
 RePaint;
end;

procedure TMyButton.WriteDownButton(const Value: Boolean);
begin
 DownButton:=Value;
 RePaint;
end;

end.

пытаюсь использовать в виде кнопки, коротко назначаются две картинки и прорисовывается ActBtn обычно и SplBmp при наведении мышки.

и вообщем проблема такая, что если на form1 и form2 поставить по такой кнопке и при клике на кнопке form1 показывать form2 то кнопка на form2 отображается в нажатом состоянии, тоесть происовывается SplBmp а вот если показ сделать не по клику на моей кнопке то кнопка на form2 прорисовывается нормально.
может нужно как-то отрабатывать onClick ?

буду благодарен за любую помощь.
Удачи!


 
marik   (2007-11-21 10:00) [1]

блин,  хм...

var
optButton: Boolean;

это получается общая ?

если перенести в
....
TMyButton = class(TGraphicControl)
private
  { Private declarations }

  TransButton: Boolean;
  StrechButton: Boolean;
  DownButton: Boolean;
  optButton: Boolean
...

то всё нормально.
видать основы надо перечитывать заново (:


 
Kolan ©   (2007-11-21 10:06) [2]

> var
> optButton: Boolean;
>
> это получается общая ?

Ессно это глоьбальная переменная&#133

Остальной код не смотрел — много букаф&#133


 
Leonid Troyanovsky ©   (2007-11-21 10:06) [3]


> marik   (21.11.07 10:00) [1]

> это получается общая ?

Глобальные переменные - MD.

--
Regards, LVT.



Страницы: 1 вся ветка

Текущий архив: 2007.12.16;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.021 c
11-1180276770
Vladimir Kladov
2007-05-27 18:39
2007.12.16
Пожелания: GRushControls


2-1195310612
datorn
2007-11-17 17:43
2007.12.16
wm_gettext


2-1195342761
.dn+
2007-11-18 02:39
2007.12.16
Спецсимволы


2-1195559299
Tirael
2007-11-20 14:48
2007.12.16
как быстро и просто проверить есть ли файл на сервере?


15-1195402592
Черный Шаман
2007-11-18 19:16
2007.12.16
Почему у людей стереотип - знания можно купить за деньги?