Avatar billede azs Nybegynder
04. januar 2002 - 16:10 Der er 8 kommentarer og
2 løsninger

OnClick event i komponent

Hvordan laves en OnClick event til et komponent?

Altså hvordan får jeg at vide hvornår der er trykket på den/det osv.. Det samme med OnDblClick osv..

En lille kode ville være dejligt!
Avatar billede stoney Nybegynder
04. januar 2002 - 16:14 #1
Prøv at tjekke nedenstående

http://delphi.about.com/library/weekly/aa122899a.htm

Stoney
Avatar billede hmm_t Nybegynder
04. januar 2002 - 16:59 #2
Jeg kan ikke lige finde noget!
Er der ikke nogen der har noget på dansk?
Avatar billede azs Nybegynder
04. januar 2002 - 17:12 #3
Jeg vil nu lige gi hmm_t ret i det...

Men jeg har prøvet dette her under med det virker ik! Er der andre som kan hjælpe?
Type
TNotifyEvent = procedure (Sender: TObject) of object;
  private
    FOnClick: TNotifyEvent;
    procedure SetOnClick(const Value: TNotifyEvent);
  published
    property OnClick: TNotifyEvent read FOnClick write SetOnClick;
  end;
impl...

procedure TPSLinkLabel.SetOnClick(const Value: TNotifyEvent);
begin
  FOnClick := Value;
  ShellExecute(0, Nil,\'mailto:grr@grr.dk\', Nil, Nil, SW_NORMAL);
end;

end.

og det virker ik for jeg kan f.eks.. ik få det til at lave en ShowMessage() når programmet køre!
Avatar billede nico26 Nybegynder
04. januar 2002 - 17:42 #4
OnClick eventen er defineret i TControl, men er protected. Det eneste du skal gøre, er at redefinere den som published.

TMyControl = class(TWinControl)
published
  property OnClick;
end;
Avatar billede azs Nybegynder
04. januar 2002 - 19:01 #5
ja nico22. men hvordan kan jeg så køre en f.eks. ShowMessage fra komponenten når man trykker (altså når OnClick køres)???
Avatar billede martinlind Nybegynder
04. januar 2002 - 20:24 #6
Ved at tilknytte en event procedure som du plejer, via obj. inspec.

Når den er published bliver den synlig.
Avatar billede nico26 Nybegynder
05. januar 2002 - 02:21 #7
Hvis du altid vil have det samme til at ske når der trykkes kan du override den tilhørende procedure

TMyControl = class(TWinControl)
protected
  procedure Click; override;
end;

procedure TMyControl.Click;
begin
  inherited Click;
  ShowMessage(\'Hej\');
end;

Hvis du kigger lidt i Delphi\'s kildekode, kan du se at TControl\'s udgave af \"Click\", sørger for at kalde eventhandleren hvis en sådan eksisterer:

if Assigned(FOnClick) then
  FOnClick(Self);

Hvor FOnClick er en pointer til eventhandleren.
Avatar billede azs Nybegynder
08. januar 2002 - 13:28 #8
nico22 -> Det virker ikke! Når jeg trykker på mit komponent køre den ikke den ShowMessage!
Avatar billede azs Nybegynder
08. januar 2002 - 13:46 #9
nico22 ->
Nå men nu har jeg bare brugt en anden måde!

nemlig denne
procedure WMClick(var Msg : TMessage); message WM_LBUTTONDOWN;

Men du må da gerne svare endnu!!?!!
Avatar billede nico26 Nybegynder
08. januar 2002 - 19:16 #10
hvis du undersøger TControl\'s kode kan du se at WMLButtonUp kalder Click metoden, der så kalder event-handleren. Du kan sagtens selv fange message\'en - det giver det samme resultat. Men hvis du vil have eventen synlig er den eneste måde at reerklære OnClick som published.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester