-
-
ты не поверишь :) но TBitBtn
-
LMD
-
> Может есть еще что-то?
Этот компонент писать минут 30. Сам бы написал, не позорился. :)
-
> ты не поверишь :) но TBitBtn
Пока не верю. Как избавится от смой кнопки? У меня есть картинка с овалом. Как сделатьтак, чтобы пользователь видел только овал? А краев кнопки видно небыло
-
Кроме того, TBitBtn.Glyph это BitMap как известно.
-
LMD Tools
-
> Kolan © (21.03.08 15:45) [5]
а... в этом смысле кнопку... ветер я так понимаю дует в сторону все тех же терминалов... фух... поверь мне.. там все строится на html интерфейсе, а на нем сделать подобное - раз плюнуть... а ты фигней страдаешь пытаясь воспроизвести красивости веб в интерфейсе приложения...
по существу: TImage
-
> LMD Tools
ППЦ :) Я, честно, думал ты обзываешься
Пойду погляжу :)
-
тока, AFAIK, она платная... :) если вдруг это станет для тебя препятствием :)
-
> Kolan © (21.03.08 15:48) [8]
Это я подкалываю так :)
-
> там все строится на html интерфейсе
Не везде как оказалось, как раз наоборот. Ну у меня и не терминал, у меня тач скрин устройство, почти автономное.
> по существу: TImage
Ну да, только доделать надо. тот же кепшен например + для разных состояний картинки.
-
> 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.
-
> Palladin © (21.03.08 15:49) [9]
Она бесплатно бонусом шла в D4, насколько помню. Т.е. можно было глянуть исходники...
-
> Ну у меня и не терминал, у меня тач скрин устройство, почти > автономное.
ну я этот тач скрин и имел ввиду, например киоски ОСМП, тот же самый тач скрин... ну да... не везде, но очень очень очень просто строить его на html...
-
> тока, AFAIK, она платная
:) если вдруг это станет для > тебя препятствием :)
Жалко конечно деньги на такое тратить :). Так и не понял какая из них мне нужна.?
-
> [12] DVM © (21.03.08 15:51)
Благодарю. Я, если честно, сам сразу бы не написал такую кнопку
-
> [12] DVM © (21.03.08 15:51)
А этот код ты откуда взял? То есть насколько ты в нем уверен?
-
> А этот код ты откуда взял?
Не помню я, он у меня давно валяется. Я его точно не писал, подправил чего там, чего не помню. Код рабочий, хоть и не идеальный.
-
> То есть насколько ты в нем уверен?
А что там быть уверенным - код же перед глазами все элементарно там. Деньги из банкомата он сам не снимет. :) Подправить покарасивше местами, свойство Caption добавить, может вместо битмапов еще jpeg использовать.
-
> Kolan © (21.03.08 15:42) [4] > > > ты не поверишь :) но TBitBtn > > Пока не верю. Как избавится от смой кнопки? У меня есть > картинка с овалом. Как сделатьтак, чтобы пользователь видел > только овал? А краев кнопки видно небыло…
Гм тебе фон предка на ней отрисовывать, так как иначе только графикконтрол? Если да, то [19]http://pda.delphimaster.net/?id=1198608053&n=0
|