Witam Mam pytanie
Chodzi o to czy w Delphi da się zrobić coś takiego że po uruchomieniu programu na buttonie 1 jest napis np" Kliknij" a po najechaniu myszką zmienia się ten napis np na "Nie klikaj" a gdy myszka jest luzem poza okienkiem programu lub na formatce napis przycisku pozostaje na "kliknij" Czy jest jakaś prosta możliwość zrealizowania tego . Prosiłbym o przykładowy kod . Z góry dziękuję .
To trzeba zaisntalować jakąś bibliotekę ? Bo za bardzo nie rozumiem . Jestem raczej początkujący w Pascal/Delphi ?
PTRXXX123 napisał(a):
Jestem raczej początkujący w Pascal/Delphi ?
To się nie bierz za rzeczy które sporo wykraczają poza zakres "dla początkujących"
type
TButton = class(StdCtrls.TButton)
private
procedure CMMouseEnter(var Msg: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;
end;
implementation
{$R *.dfm}
procedure TButton.CMMouseEnter(var Msg: TMessage);
begin
if Name = 'Button1' then //albo zamiast name mozna wykorzysta np. wlasciwosc Tag
Caption:= 'Nie Klikaj';
end;
procedure TButton.CMMouseLeave(var Msg: TMessage);
begin
if Name = 'Button1' then
Caption:= 'Kliknij';
end;
Zrobiłem tak , powpisywałem wszystko do type private i napisałem nowe procedury, ale jak chce już skompilować to wyskakuje błąd [ Expected ':' but '=' found ] To w klamrze to treść błędu .
Masz gdzieś błąd składni, więc podaj kod, wktórym ten błąd występuje;
Nie wiem czy załapałeś, ale @kAzek podał kod dla nowego komponentu zbudowanego na bazie standardowej klasy TButton
, więc musisz utworzyć nowy komponent dziedziczący po TButton
, dopisać mu te dwie procedury obsługi komunikatów, zainstalować taki komponent i zamienić stare przyciski na nowe (nowej klasy, wyposażone w obsługę dodatkowych komunikatów);
To jest przykład zmieniania nazwy na sztywno ustawionej w kodzie procedur obsługi komunikatów; Równie dobrze możesz dodać sobie dodatkową właściwość (widoczną w oknie inspektora obiektów), w której ustawisz tekst jaki wyświetli się na przycisku po najechaniu na niego kursorem (w procedurze CMMouseEnter
), a po zjechaniu kursorem z przycisku ustawić tekst przycisku z powrotem, biorąc go z właściwości Caption
; Wszystko zależy od tego co umiesz i ile jesteś w stanie zrobić sam.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
Button1: TButton;
TButton = class(StdCtrls.TButton)
private
procedure CMMouseEnter(var Msg: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;
end;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TButton.CMMouseEnter(var Msg: TMessage);
begin
if Name = 'Button1' then
Caption:= 'Nie Klikaj';
end;
procedure TButton.CMMouseLeave(var Msg: TMessage);
begin
if Name = 'Button1' then
Caption:= 'Kliknij';
end;
end.
dodanie znacznika <code class="delphi"> - fp
Przeczytaj jeszcze raz mój post wyżej;
Nie możesz zeklarować klasy wewnątrz innej klasy - napisałem Ci, że musisz utworzyć nowy komponent wyposażony w obsługę dwóch nowych komunikatów i go zainstalować, a potem wykorzystać na formularzu Twojego programu, więc to zrób; Inforamcje na temat rozbudowywania istniejących klas komponentów znajdziesz na Google i w kompondium wiedzy w tym serwisie.
@PTRXXX123 przekombinowałeś masz cały kod modułu bo nie zrozumiesz:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TButton = class(StdCtrls.TButton)
private
procedure CMMouseEnter(var Msg: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;
end;
TForm1 = class(TForm)
Button1: TButton;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TButton.CMMouseEnter(var Msg: TMessage);
begin
if Name = 'Button1' then //albo zamiast name mozna wykorzysta np. wlasciwosc Tag
Caption:= 'Nie Klikaj';
end;
procedure TButton.CMMouseLeave(var Msg: TMessage);
begin
if Name = 'Button1' then
Caption:= 'Kliknij';
end;
end.