Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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;
>
> это получается общая ?

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

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


 
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
5-1164472597
Rav
2006-11-25 19:36
2007.12.16
Редактор свойств компонента


2-1195843770
Knob
2007-11-23 21:49
2007.12.16
Браузер и соединение с ним


2-1195375211
JJLev
2007-11-18 11:40
2007.12.16
TSpeedButton +Canvas +Rect


10-1141661852
Alex Kryuchkov
2006-03-06 19:17
2007.12.16
СОМ через SSL-соединение


2-1195713651
eugie
2007-11-22 09:40
2007.12.16
Создание компонетов по имени класса





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский