![]() |
|
|
|
|
#1
|
||||
|
||||
|
Нужно чтобы при наведении отображалась вторая кнопка при нажатии третья
Последний раз редактировалось San, 12.02.2010 в 19:14. |
|
#2
|
|||
|
|||
|
Ну так обрабатывай события. онМаусМув, онКлик (или онМаусДаун)
|
|
#3
|
||||
|
||||
|
да, эти события появились по-моему начиная с Delphi 6, помню в Delphi 5 самому приходило их дописывать в TLabel и т.д.
P.S.: Mostovoi, а вас случаем не Дмитрий зовут? Последний раз редактировалось Ultras, 15.02.2010 в 10:46. |
|
#4
|
||||
|
||||
|
А что это за кнопки???
Если обычные Button, то пробуй так(тут весь юнит формы, на ней 3 кнопки): Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
//Перемещение мыши по форме
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if ((X>Button1.Left)and(X<(Button1.Left+Button1.Width))and
(Y>Button1.Top) and(Y<(Button1.Top+Button1.Height)))
then
Button2.Visible := true
else
Button2.Visible := False;
end;
//Перемещение мыши по кнопке
procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if ((X<Button1.Width)and(Y<Button1.Height))
then
Button2.Visible := true
else
Button2.Visible := False;
end;
//Клик по первой кнопке
procedure TForm1.Button1Click(Sender: TObject);
begin
Button3.Visible := True;
end;
//Клик по третьей кнопке
procedure TForm1.Button3Click(Sender: TObject);
begin
Button3.Visible := False;
end;
end. |
|
#5
|
||||
|
||||
|
NIch, зачем такие извращения?
давным давно делал такое: Код:
unit UltraComp;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, ComCtrls;
type
TUButton = class(TButton)
private
{ Private declarations }
FOnMouseLeave: TNotifyEvent;
FOnMouseEnter: TNotifyEvent;
procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
published
{ Published declarations }
property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
end;
procedure Register;
implementation
{ TUButton }
procedure TUButton.CMMouseEnter(var Message: TMessage);
begin
if Assigned(FOnMouseEnter) then FOnMouseEnter(Self);
end;
procedure TUButton.CMMouseLeave(var Message: TMessage);
begin
if Assigned(FOnMouseLeave) then FOnMouseLeave(Self);
end;
procedure Register;
begin
RegisterComponents('UltraSoft', [TUButton]);
end;
end.потом подключаем этот компонент, кидаем на форму, и юзаем события OnMouseEnter и OnMouseLeave (по аналогии можно сделать для Label, ListBox, ComboBox и т.д.). Для нажатия используем событие OnMouseDown, в нём ставим условие: Код:
if Button = mbLeft then begin //реакция на нажатие левой кнопки end; Последний раз редактировалось Ultras, 27.02.2010 в 03:01. |
|
#6
|
||||
|
||||
|
Еще немного дописать класс, предложенный Ultras.
Так чтобы он принимал три картинки и будет полный шоколад ![]() |