Конференция "Прочее" » Image Button какой выбрать?
 
  • Kolan © (21.03.08 15:32) [0]
    Здравствуйте,
     Нужен компонент кнопка-картинка. То есть надо чтобы была возможность задать картинку(для разных состояний) + написать Caption, назначить события.

    Посмотрел на торри есть нескольок вариантов:
    http://www.torry.net/quicksearchd.php?String=image+button&Title=Yes

    Что посоветуете? Может есть еще что-то?
  • Palladin © (21.03.08 15:38) [1]
    ты не поверишь :) но TBitBtn
  • Johnmen © (21.03.08 15:38) [2]
    LMD
  • DVM © (21.03.08 15:42) [3]

    > Может есть еще что-то?

    Этот компонент писать минут 30. Сам бы написал, не позорился. :)
  • Kolan © (21.03.08 15:42) [4]
    > ты не поверишь :) но TBitBtn

    Пока не верю. Как избавится от смой кнопки? У меня есть картинка с овалом. Как сделатьтак, чтобы пользователь видел только овал? А краев кнопки видно небыло…
  • Kolan © (21.03.08 15:45) [5]
    Кроме того, TBitBtn.Glyph — это BitMap как известно.
  • Johnmen © (21.03.08 15:46) [6]
    LMD Tools
  • Palladin © (21.03.08 15:48) [7]

    > Kolan ©   (21.03.08 15:45) [5]

    а... в этом смысле кнопку... ветер я так понимаю дует в сторону все тех же терминалов... фух... поверь мне.. там все строится на html интерфейсе, а на нем сделать подобное - раз плюнуть...  а ты фигней страдаешь пытаясь воспроизвести красивости веб в интерфейсе приложения...

    по существу: TImage
  • Kolan © (21.03.08 15:48) [8]
    > LMD Tools

    ППЦ :) Я, честно, думал ты обзываешься… Пойду погляжу :)
  • Palladin © (21.03.08 15:49) [9]
    тока, AFAIK, она платная... :) если вдруг это станет для тебя препятствием :)
  • Johnmen © (21.03.08 15:50) [10]

    > Kolan ©   (21.03.08 15:48) [8]

    Это я подкалываю так :)
  • Kolan © (21.03.08 15:51) [11]
    > там все строится на html интерфейсе

    Не везде как оказалось, как раз наоборот. Ну у меня и не терминал, у меня тач скрин устройство, почти автономное.


    > по существу: TImage

    Ну да, только доделать надо. тот же кепшен например + для разных состояний картинки.
  • DVM © (21.03.08 15:51) [12]

    > Kolan ©


    unit MyButton;

    interface

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

    type
     TImageButton = class(TCustomControl)
     private
       MOver: TBitmap;
       MDown: TBitmap;
       MUp: TBitmap;
       Bmp: TBitmap;
       ActualBmp: TBitmap;
       BmpDAble: TBitmap;
       BtnClick: TNotifyEvent;
       OnMDown: TMouseEvent;
       OnMUp: TMouseEvent;
       OnMEnter: TNotifyEvent;
       OnMLeave: TNotifyEvent;
       procedure SetMOver(Value: TBitmap);
       procedure SetMDown(Value: TBitmap);
       procedure SetMUp(Value: TBitmap);
       procedure SetBmp(Value: TBitmap);
       procedure SetBmpDAble(Value: TBitmap);
     protected
       procedure Paint; override;
       procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
         X, Y: Integer); override;
       procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
         X, Y: Integer); override;
       procedure MouseEnter(var Message: TMessage); message CM_MOUSEENTER;
       procedure MouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
       procedure Click; override;
     public
       constructor Create(AOwner: TComponent); override;
     published
       property BitmapOver: TBitmap read MOver write SetMOver;
       property BitmapDown: TBitmap read MDown write SetMDown;
       property BitmapUp: TBitmap read MUp write SetMUp;
       property BitmapDisabled: TBitmap read BmpDAble write SetBmpDAble;
       property Bitmap: TBitmap read Bmp write SetBmp;
       property OnClick: TNotifyEvent read BtnClick write BtnClick;
       property OnMouseDown: TMouseEvent read OnMDown write OnMDown;
       property OnMouseUp: TMouseEvent read OnMUp write OnMUp;
       property OnMouseEnter: TNotifyEvent read OnMEnter write OnMEnter;
       property OnMouseLeave: TNotifyEvent read OnMLeave write OnMLeave;
       property Enabled;
       property ShowHint;
       property ParentShowHint;
     end;

    procedure Register;

    implementation

    procedure Register;
    begin
     RegisterComponents('Buttons', [TImageButton]);
    end;

    constructor TImageButton.Create(AOwner: TComponent);
    begin
     inherited Create(AOwner);
     MOver := TBitmap.Create;
     MDown := TBitmap.Create;
     MUp := TBitmap.Create;
     Bmp := TBitmap.Create;
     BmpDAble := TBitmap.Create;
     ActualBmp := TBitmap.Create;
     Width := 50;
     Height := 50;
     Canvas.Brush.Color := clBtnFace;
     ShowHint := true;
    end;

    procedure TImageButton.Paint;
    begin
     inherited Paint;
     if ActualBmp.Width = 0 then ActualBmp.Assign(Bmp);
     if Enabled or (BmpDAble.Width = 0) then Canvas.Draw(0,0,ActualBmp)
     else begin
       Width := BmpDAble.Width;
       Height := BmpDAble.Height;
       Canvas.Draw(0,0,BmpDAble);
     end;
    end;

    procedure TImageButton.Click;
    begin
     inherited Click;
     Paint;
     if Enabled then if Assigned(BtnClick) then BtnClick(Self);
    end;

    procedure TImageButton.SetMOver(Value: TBitmap);
    begin
     MOver.Assign(Value);
     Paint;
    end;

    procedure TImageButton.SetMDown(Value: TBitmap);
    begin
     MDown.Assign(Value);
     Paint;
    end;

    procedure TImageButton.SetMUp(Value: TBitmap);
    begin
     MUp.Assign(Value);
     Paint;
    end;

    procedure TImageButton.SetBmp(Value: TBitmap);
    begin
     Bmp.Assign(Value);
     ActualBmp.Assign(Value);
     Width := Bmp.Width;
     Height := Bmp.Height;
     Paint;
    end;

    procedure TImageButton.SetBmpDAble(Value: TBitmap);
    begin
     BmpDAble.Assign(Value);
     paint;
    end;

    procedure TImageButton.MouseDown(Button: TMouseButton; Shift: TShiftState;
     X, Y: Integer);
    begin
     inherited MouseDown(Button, Shift, X, Y);
     if (Button = mbLeft) and Enabled then begin
        if Assigned (OnMDown) then OnMDown(Self, Button, Shift, X, Y);
        if MDown.Width > 0 then begin
           ActualBmp.Assign(MDown);
           Width := MDown.Width;
           Height := MDown.Height;
           Paint;
        end;
     end;
    end;

    procedure TImageButton.MouseUp(Button: TMouseButton; Shift: TShiftState;
     X, Y: Integer);
    var MouseOverButton: Boolean;
       P: TPoint;
    begin
     inherited MouseUp(Button, Shift, X, Y);
     if (Button = mbLeft) and Enabled then begin
        if Assigned (OnMUp) then OnMUp(Self, Button, Shift, X, Y);
        if MUp.Width > 0 then begin
           GetCursorPos(P);
           MouseOverButton := (FindDragTarget(P, True) = Self);
           if MouseOverButton then begin
              Width := MUp.Width;
              Height := MUp.Height;
              Canvas.FillRect(Rect(0,0,Width,Height));
              Canvas.Draw(0,0,MUp);
           end else begin
              Width := bmp.Width;
              Height := Bmp.Height;
              Canvas.FillRect(Rect(0,0,Width,Height));
              Canvas.Draw(0,0,Bmp);
           end;
        end else begin
           if MouseOverButton = false then begin
              Width := MOver.Width;
              Height := MOver.Height;
              Canvas.FillRect(Rect(0,0,Width,Height));
              Canvas.Draw(0,0,MOver);
           end else begin
              Width := bmp.Width;
              Height := Bmp.Height;
              Canvas.FillRect(Rect(0,0,Width,Height));
              Canvas.Draw(0,0,Bmp);
           end;
        end;
     end;
    end;

    procedure TImageButton.MouseEnter(var Message: TMessage);
    begin
     if Enabled then begin
        if MOver.Width > 0 then begin
           ActualBmp.Assign(MOver);
           Width := MOver.Width;
           Height := MOver.Height;
           Paint;
        end;
     end;
    end;

    procedure TImageButton.MouseLeave(var Message: TMessage);
    begin
     if Enabled then begin
        if Bmp.Width > 0 then begin
           ActualBmp.Assign(Bmp);
           Width := Bmp.Width;
           Height := Bmp.Height;
           Paint;
        end;
     end;
    end;

    end.

  • Johnmen © (21.03.08 15:52) [13]

    > Palladin ©   (21.03.08 15:49) [9]

    Она бесплатно бонусом шла в D4, насколько помню. Т.е. можно было глянуть исходники...
  • Palladin © (21.03.08 15:55) [14]

    > Ну у меня и не терминал, у меня тач скрин устройство, почти
    > автономное.

    ну я этот тач скрин и имел ввиду, например киоски ОСМП, тот же самый тач скрин... ну да... не везде, но очень очень очень просто строить его на html...
  • Kolan © (21.03.08 15:58) [15]
    > тока, AFAIK, она платная… :) если вдруг это станет для
    > тебя препятствием :)

    Жалко конечно деньги на такое тратить :). Так и не понял какая из них мне нужна.?
  • Kolan © (21.03.08 16:01) [16]
    > [12] DVM ©   (21.03.08 15:51)

    Благодарю. Я, если честно, сам сразу бы не написал такую кнопку…
  • Kolan © (21.03.08 16:07) [17]
    > [12] DVM ©   (21.03.08 15:51)

    А этот код ты откуда взял? То есть насколько ты в нем уверен?
  • DVM © (21.03.08 16:09) [18]

    > А этот код ты откуда взял?

    Не помню я, он у меня давно валяется. Я его точно не писал, подправил чего там, чего не помню. Код рабочий, хоть и не идеальный.
  • DVM © (21.03.08 16:12) [19]

    > То есть насколько ты в нем уверен?

    А что там быть уверенным - код же перед глазами все элементарно там. Деньги из банкомата он сам не снимет. :)
    Подправить покарасивше местами, свойство Caption добавить, может вместо битмапов еще jpeg использовать.
  • Поп Гапон (21.03.08 18:18) [20]

    > Kolan ©   (21.03.08 15:42) [4]
    >
    > > ты не поверишь :) но TBitBtn
    >
    > Пока не верю. Как избавится от смой кнопки? У меня есть
    > картинка с овалом. Как сделатьтак, чтобы пользователь видел
    > только овал? А краев кнопки видно небыло…


    Гм тебе фон предка на ней отрисовывать, так как иначе только графикконтрол?

    Если да, то [19]
    http://pda.delphimaster.net/?id=1198608053&n=0
 
Конференция "Прочее" » Image Button какой выбрать?
Есть новые Нет новых   [134431   +14][b:0][p:0.007]