Форум: "Начинающим";
Текущий архив: 2007.12.16;
Скачать: [xml.tar.bz2];
ВнизПомогите разобраться с компанентой Найти похожие ветки
← →
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;
>
> это получается общая ?
Ессно это глоьбальная переменная…
Остальной код не смотрел — много букаф…
← →
Leonid Troyanovsky © (2007-11-21 10:06) [3]
> marik (21.11.07 10:00) [1]
> это получается общая ?
Глобальные переменные - MD.
--
Regards, LVT.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.12.16;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.05 c