Конференция "Компоненты" » Компонент Кнопка [D7, WinXP]
 
  • Buzzik © (14.04.10 17:35) [0]
    Подскажите компонент Кнопку, с тремя свойствами TBitmap обычное состояние, наведение и нажатие. Есть такой?
    Пробовал сделать что-то на подобии, на базе Timage, но даже добавить рисунок в собственное поле TBitmap в Object Inpector`е ума не хватает, вылетает ошибка.


    unit myImageButton;

    interface

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

    type
     TmyImageButton = class(TImage)
     private
      { Private declarations }
     FCount: integer;

     protected
      { Protected declarations }
     FMouseUpImage:tBitmap;
     FMouseDown_image:tBitmap;
     public
      { Public declarations }
     published

     procedure Click;override;
     Procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
      { Published declarations }
     property Count:integer read FCount write FCount;
     property MouseUpImage:TBitmap read FMouseUpImage write FMouseUpImage;
     property MouseDownImage:TBitmap read FMouseDown_image write FMouseDown_image;

     constructor Create(aowner:Tcomponent); override;
    end;

    procedure Register;

    implementation

    procedure Register;
    begin
    RegisterComponents('Standard', [TmyImageButton]);
    end;

    constructor TmyImageButton.Create(aowner:Tcomponent);
    begin
    inherited create(Aowner);

    end;

    procedure TmyImageButton.Click;
    begin
    inherited click;
    Picture.Bitmap:= FMouseDown_image;
    end;

    procedure TmyImageButton.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    begin
    inherited Mouseup(Button,Shift,x,y);
    Picture.Bitmap:= FMouseUpImage;

    end;
    end.

  • Игорь Шевченко © (14.04.10 17:42) [1]
    посмотреть, как сделан TBitBtn или TSpeedButton чего-то не хватает ?
  • Buzzik © (14.04.10 19:01) [2]
    Спасибо, тупанул.
    Там оказывается процедура стоит, по присоеденению TPicture, даже, а не Tbitmap.
  • Buzzik © (15.04.10 16:49) [3]
    При создании компонента не получаеться вывести текст на изображение . При клике текст выводится. А при создании нет. Подскажите, не могу сообразить как правильно сделать. Как вызвать процедуру вывода текста, при старте формы, в моем случае SetCaption(s:string);?

    unit myImageButton;

    interface

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

    type
     TmyImageButton = class(TImage)
     private
      { Private declarations }

     FMouseUpImage:TPicture;
     FMouseDown_image:TPicture;
     FMouseUpImage2:TPicture;
     FMouseDown_image2:TPicture;
     FCaption, FText:string;
     procedure SetPicture(Value: TPicture);
     procedure SetPicture2(Value: TPicture);

     protected

      { Protected declarations }
     public
      { Public declarations }
     published
      procedure SetCaption(s:string);
      Procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
      Procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
      { Published declarations }

     property MouseUpImage:TPicture read FMouseUpImage write SetPicture;
     property MouseDownImage:TPicture read FMouseDown_image write SetPicture2;
     property Text:string read FText write SetCaption;

     constructor Create(aowner:Tcomponent); override;
     destructor Destroy; override;

    end;

    procedure Register;

    implementation

    procedure Register;

     begin
     RegisterComponents('Standard', [TmyImageButton]);
     end;

     procedure  TmyImageButton.SetCaption(s:string);
     begin
     FMouseUpImage.Bitmap:=FMouseUpImage2.Bitmap;
     FMouseDown_image.Bitmap:=FMouseDown_image2.Bitmap;

     SetBkMode(FMouseUpImage.Bitmap.Canvas.Handle, 0);
     SetBkMode(FMouseDown_image.Bitmap.Canvas.Handle, 0);

     FMouseUpImage.Bitmap.Canvas.TextOut((ClientWidth -  Canvas.TextWidth(s)) div 2, (ClientHeight - Canvas.TextHeight(s)) div 2, s);
     FMouseDown_image.Bitmap.Canvas.TextOut((ClientWidth - Canvas.TextWidth(s)) div 2, (ClientHeight - Canvas.TextHeight(s)) div 2, s);
      FMouseUpImage.Bitmap.Canvas.Refresh;
      FMouseDown_image.Bitmap.Canvas.Refresh;

     end;

    constructor TmyImageButton.Create(aowner:Tcomponent);
    begin
    inherited create(Aowner);
     ControlStyle := ControlStyle + [csReplicatable];
     FMouseUpImage := TPicture.Create;
     FMouseDown_image := TPicture.Create;
     FMouseUpImage2 := TPicture.Create;
     FMouseDown_image2 := TPicture.Create;

     FMouseUpImage2.Bitmap:=  FMouseUpImage.Bitmap;
     FMouseDown_image2.Bitmap:=  FMouseDown_image.Bitmap;

     Picture.Bitmap:=  FMouseUpImage.Bitmap;
     AutoSize:=true;
     Height := 26;
     Width := 110;
     SetCaption(Text);

    end;
    destructor TmyImageButton.Destroy;
    begin
    FMouseUpImage.Free;
    FMouseDown_image.Free;
    inherited Destroy;
    end;

    procedure TmyImageButton.SetPicture(Value: TPicture);
    begin
     FMouseUpImage.Assign(Value);
     Picture.Bitmap:=FMouseUpImage.Bitmap;
     FMouseUpImage2.Bitmap:=FMouseUpImage.Bitmap;
    end;

    procedure TmyImageButton.SetPicture2(Value: TPicture);
    begin
     FMouseDown_image.Assign(Value);
     FMouseDown_image2.Bitmap:=FMouseDown_image.Bitmap;
    end;

    procedure TmyImageButton.Mousedown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    begin
    inherited click;
    if Button=mbLeft   then
    Picture.Bitmap:= FMouseDown_image.Bitmap;
    end;

    procedure TmyImageButton.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    begin
    Picture.Bitmap:= FMouseUpImage.Bitmap;
    inherited Mouseup(Button,Shift,x,y);
     sleep(100);
    end;

    end.

  • Игорь Шевченко © (15.04.10 22:16) [4]
    Buzzik ©   (15.04.10 16:49) [3]


    > посмотреть, как сделан TBitBtn или TSpeedButton чего-то
    > не хватает ?
  • Buzzik © (15.04.10 22:57) [5]
    Нет, не помогает. Там не так как у меня.
    Вопрос стоит так, как вызвать процедуру при создании компонента на форме. Через constructor TmyImageButton.Create(aowner:Tcomponent); не выходит или я что-то делаю не так.
  • Игорь Шевченко © (15.04.10 23:06) [6]

    > Нет, не помогает. Там не так как у меня.


    надо сделать так, как там.
  • Buzzik © (16.04.10 00:21) [7]
    Ок, понял.
 
Конференция "Компоненты" » Компонент Кнопка [D7, WinXP]
Есть новые Нет новых   [120277   +46][b:0][p:0.003]