Zmiana napisu na przycisku po wskazaniu na niego kursorem

0

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ę .

0

To trzeba zaisntalować jakąś bibliotekę ? Bo za bardzo nie rozumiem . Jestem raczej początkujący w Pascal/Delphi ?

0
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"

0
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;
0

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 .

0

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.

0
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

0

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.

1

@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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1