AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Doppelklick in Listbox "nachrüsten"

Ein Thema von Uncle Cracker · begonnen am 17. Apr 2004 · letzter Beitrag vom 18. Apr 2004
Antwort Antwort
Benutzerbild von Uncle Cracker
Uncle Cracker

Registriert seit: 30. Mär 2003
Ort: Freital
694 Beiträge
 
#1

Doppelklick in Listbox "nachrüsten"

  Alt 17. Apr 2004, 18:14
Ich habe mein Programm komplett mit den Flatstyle-Komponenten geschrieben, ging alles ohne Probleme. Aber jetzt ist mir aufgefallen, dass bei der Listbox der Komponenten die Eigenschaft fehlt "OnDblClick" Es fehlen zwar noch ein paar mehr Eigenschaften, aber mir geht es nur um den Doppelklick in der Listbox.

Gibt es vielleicht eine Möglichkeit dies irgendwie "nachzurüsten"?


Danke UC
I wish it was legal to marry software because I'm madly in love with Delphi...
  Mit Zitat antworten Zitat
Nicolai1234

Registriert seit: 21. Feb 2004
1.008 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Doppelklick in Listbox "nachrüsten"

  Alt 17. Apr 2004, 18:19
Vielleicht kann man bei OnClick zählen wie oft schon geklicktwurde!
Den Zeitpunkt des ersten Klicks speichern und vom Zeitpunkt des zweiten Klicks abziehen. Ist die Differenz <= 00:00:01 dann war es ein Doppelklick!
  Mit Zitat antworten Zitat
Benutzerbild von Christian S.
Christian S.

Registriert seit: 19. Apr 2003
Ort: Düsseldorf
835 Beiträge
 
#3

Re: Doppelklick in Listbox "nachrüsten"

  Alt 17. Apr 2004, 18:30
Zitat von Nicolai1605:
Vielleicht kann man bei OnClick zählen wie oft schon geklicktwurde!
Den Zeitpunkt des ersten Klicks speichern und vom Zeitpunkt des zweiten Klicks abziehen. Ist die Differenz <= 00:00:01 dann war es ein Doppelklick!
Die Zeit für einen Doppelklick ist in der Systemsteuerung verstellbar, diese Lösung ist also nicht gut.
Was man aber machen könnte, ist, eine eigene Komponente von der bestehenden abzuleiten und in der abgeleieten Komponente ein Ereignis OnDblClick zu erstellen, welches die Nachricht WM_LBUTTONDBLCLK verarbeitet.
Christian S.
Admin in der Entwickler-Ecke
  Mit Zitat antworten Zitat
Benutzerbild von Uncle Cracker
Uncle Cracker

Registriert seit: 30. Mär 2003
Ort: Freital
694 Beiträge
 
#4

Re: Doppelklick in Listbox "nachrüsten"

  Alt 17. Apr 2004, 23:27
Ähhhmmm und wie mach ich das? Mit zählen wollte ich das auch machen, doch die Idee gefiel mir dann doch nicht.
I wish it was legal to marry software because I'm madly in love with Delphi...
  Mit Zitat antworten Zitat
Benutzerbild von Christian S.
Christian S.

Registriert seit: 19. Apr 2003
Ort: Düsseldorf
835 Beiträge
 
#5

Re: Doppelklick in Listbox "nachrüsten"

  Alt 18. Apr 2004, 12:14
Hallo!

Ansich ist es ganz einfach, auf solche Windows-Nachrichten zu reagieren. Nehmen wir mal an, die Listbox-Komponente, von der Du ableiten möchtest, heißt "TYourListbox". Dann geht es folgendermaßen:

Delphi-Quellcode:
type TMyListbox = class(TYourListbox)
  private
    FOnDblClick : TNotifyEvent;
    procedure DblClick(var message : TMessage); message WM_LBUTTONDBLCLK;
  public
  published
    property OnDblClick : TNotifyEvent read FOnDblClick write FOnDblClick;
  end;

{...}
implementation
{...}

procedure TMyListbox.DblClick(var message : TMessage);
begin
  inherited;
  {Hier kannst Du noch Standardbehandlungen rein machen, die immer ausgeführt werden,
   unabhängig, welche Aktionen Du dem Ereignis einer Instanz dieser Klasse zuweist!}

  if Assigned(FOnDblClick) then FOnDblClick(self);
end;


{...}
procedure TForm1.DblClick(Sender : TObject); //Das Ereignis, welches Du verwenden willst.
                                             //Wie jedes andere auch.
begin
  ShowMessage('Doppelklick');
end;

procedure TForm1.Button1Click(Sender : TObject);
var MyListbox : TMyListbox;
begin
  MyListbox := TMyListbox.Create(form1); //oder sowas ... eben die Komponente zur Laufzeit erstellen
  {...}
  MyListbox.OnDblClick := DblClick;
end;
Hoffe, das hilft. (Habe es mit TYourListbox = TListbox probiert, da funtkioniert es.)

MfG
Peter
Christian S.
Admin in der Entwickler-Ecke
  Mit Zitat antworten Zitat
Benutzerbild von Uncle Cracker
Uncle Cracker

Registriert seit: 30. Mär 2003
Ort: Freital
694 Beiträge
 
#6

Re: Doppelklick in Listbox "nachrüsten"

  Alt 18. Apr 2004, 21:23
Also, ich habe das jetzt nochmal probiert. Bei klappt das nicht wirklich, auch wenn ich die normale Listbox nehmen, ich mache sicher irgendwo einen Fehler.

Wenn ich das so einsetzte wie oben, dann kommt an der Stelle "procedure TForm1.DblClick(Sender : TObject);" der Fehler, dass das undefiniert ist. Trage ich anstatt "TForm1.DblClick" "TMyListbox.DblClick" ein, kommt die Meldung das die sich von der vorherigen Dekleration unterscheidet (auch logisch, denn es wurde ja auch anders deklariert). Wenn ich jetzt aber "TForm1" komplett weglasse und nur "DblClick" hinschreibe, dann kommt unten beim Aufruf "MyListbox.OnDblClick := DblClick;" die Meldung "Inkompatible Typen: Liste der Paramter ist unterschiedlich".

Was mache ich falsch? Kannst du mir oder ein anderer vielleicht nochmal helfen?


Danke UC
I wish it was legal to marry software because I'm madly in love with Delphi...
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#7

Re: Doppelklick in Listbox "nachrüsten"

  Alt 18. Apr 2004, 22:00
Zitat von Uncle Cracker:
Wenn ich das so einsetzte wie oben, dann kommt an der Stelle "procedure TForm1.DblClick(Sender : TObject);" der Fehler, dass das undefiniert ist.
Delphi-Quellcode:
type
  TForm1 = class(Form)
    {...}
  public
    procedure TForm1.DblClick(Sender : TObject);
    {...}
end;
Und im OI natürlich das OnClick-Event der eigenen Listbox mit dem entsprechenden Handler in Form1 verknüpfen, sowas geht dann per DropDown-Liste. Ob der altbekannte Doppelklick reicht, weiß ich hier bei eigenen Komponenten nicht, wenn man sie nicht anständig registriert hat.
  Mit Zitat antworten Zitat
Benutzerbild von Christian S.
Christian S.

Registriert seit: 19. Apr 2003
Ort: Düsseldorf
835 Beiträge
 
#8

Re: Doppelklick in Listbox "nachrüsten"

  Alt 18. Apr 2004, 22:03
Wie jedes andere Ereignis und jede andere Memberfunktion auch, muss man "TForm1.DblClick(Sender : TObject)" natürlich noch im interface-Teil in TForm1 deklarieren. So wie Delphi das z.B. mit einem "TForm1.Button1Click(Sender : TObject)" auch tut. Also irgendwie so:
Delphi-Quellcode:
type
  TForm1 = class(TForm)
  private
    procedure theListboxDblClick(Sender : TObject);
  public
  end;

{...}
implementation
{...}
procedure TForm1.theListboxDblClick(Sender : TObject);
begin
  ShowMessage('Doppelklick!');
end;
Hätte ich vielleicht dazu schreiben sollen, aber ich dachte, das wäre klar.

MfG
Peter

P.S.: Ich habe die Prozedur mal anders genannt. Ist ein wenig mehr mit der Delphi-Art der Bennennung konform.

//edit:
@tommie-lie: Wenn man die eigene Listboxkomponente zur Laufzeit erzeugt (wie ich das oben getan habe), braucht man es nicht im OI machen und registrieren braucht man sie auch nicht.

//edit2:
nochmal @tommie-lie: so wird die Deklaration im interface aber nichts. Einmal TForm1 reicht.
Christian S.
Admin in der Entwickler-Ecke
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#9

Re: Doppelklick in Listbox "nachrüsten"

  Alt 18. Apr 2004, 22:12
Zitat von Peter Lustig:
//edit:
@tommie-lie: Wenn man die eigene Listboxkomponente zur Laufzeit erzeugt (wie ich das oben getan habe), braucht man es nicht im OI machen und registrieren braucht man sie auch nicht.
Zur Laufzeit?
Hmpf, wieso lese ich deine Quellcodes nur nie komplett durch?

Zitat von Peter Lustig:
//edit2:
nochmal @tommie-lie: so wird die Deklaration im interface aber nichts. Einmal TForm1 reicht.
Aaargh. Scheint echt nicht mein Tag zu sein, diese Woche.

Edit: Naja, jeder blamiert sich so gut er kann (wenn falsch, dann wenigstens richtig)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz