AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi gedrückte Maustaste soll sich wie Entertaste verhalten

gedrückte Maustaste soll sich wie Entertaste verhalten

Ein Thema von TUX_der_Pinguin · begonnen am 30. Apr 2008 · letzter Beitrag vom 30. Apr 2008
Antwort Antwort
TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
608 Beiträge
 
Delphi 11 Alexandria
 
#1

gedrückte Maustaste soll sich wie Entertaste verhalten

  Alt 30. Apr 2008, 14:51
Hi,

ich habe eine kleine ListBox mit Einträgen jetzt möchte ich gerne das der Anwender die Reihenfolge
der Eintrage verändern kann, also Multiselect an, und mit zwei Buttons soll der Anwender die markierten
Einträge nach unten bzw. nach oben schieben können.

Alles kein Problem, per OnClick Ereignis geht das ruckzuck. Halte ich jedoch die Maustaste fest so
werden die Einträge nur um 1 verschoben, halte ich die Entertaste fest so wird das Ereignis dauernd
ausgelöst und dieses würde ich gern auch auf die Maustaste legen können.

Ziel: Einen oder mehre Einträge markieren und mit gedrückter Maustaste die Einträge verschieben.

Irgendwie hab ich grade einen Knoten drin das ich nicht drauf komme wie ich das lösen soll.
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#2

Re: gedrückte Maustaste soll sich wie Entertaste verhalten

  Alt 30. Apr 2008, 14:55
hi,

im OnMouseOver vom Button (falls es das gibt) kannst du abfragen, ob die maus gedrückt ist. Problem ist dabei aber, glaub ich, dass das OnMouseOver-Event nur 1 einziges Mal ausgelöst wird.

rollstuhlfahrer
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
608 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: gedrückte Maustaste soll sich wie Entertaste verhalten

  Alt 30. Apr 2008, 14:58
Zitat von rollstuhlfahrer:
hi,
im OnMouseOver vom Button (falls es das gibt) kannst du abfragen, ob die maus gedrückt ist. Problem ist dabei aber, glaub ich, dass das OnMouseOver-Event nur 1 einziges Mal ausgelöst wird.
Das ist quasi das Problem, das jedes der Maus Events, wie OnMouseOver, OnMouseDown etc. nur jeweils einmal ausgelöst wird
es sollte doch möglich sein dem irgendwie bei zu bringen, das solange ich den Button drücke (Maustaste gedrückt halten)
das Ereignis auslöst, mehrfach.

Ich bin auch auf der Suche nach einer Lösung ich weiß grade nicht mals genau wonach ich suchen muß.
  Mit Zitat antworten Zitat
Benutzerbild von tomsel
tomsel

Registriert seit: 8. Dez 2005
Ort: am Chiemsee
304 Beiträge
 
Delphi 7 Professional
 
#4

Re: gedrückte Maustaste soll sich wie Entertaste verhalten

  Alt 30. Apr 2008, 15:06
Vielleicht ein Ansatz?: Bei MouseDown auf den Button einen Timer aktivieren, die gewünschte Funktion aufruft, bis er in MouseUp gestoppt wird.
Ein Experte ist ein Mann, der hinterher genau sagen kann, warum seine Prognose nicht gestimmt hat. (Winston Churchill)
  Mit Zitat antworten Zitat
TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
608 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: gedrückte Maustaste soll sich wie Entertaste verhalten

  Alt 30. Apr 2008, 15:23
In die richtung habe ich auch schon gedacht, aber das wäre doch eher arg viel aufwand.
Was ich mich ja frage wieso klappt das ganze bei gedrückter Entertaste und könnte man
nicht einfach dieses simulieren.
  Mit Zitat antworten Zitat
Benutzerbild von tomsel
tomsel

Registriert seit: 8. Dez 2005
Ort: am Chiemsee
304 Beiträge
 
Delphi 7 Professional
 
#6

Re: gedrückte Maustaste soll sich wie Entertaste verhalten

  Alt 30. Apr 2008, 15:27
Zitat:
In die richtung habe ich auch schon gedacht, aber das wäre doch eher arg viel aufwand.
Ach was, wieso denn?

Zitat:
Was ich mich ja frage wieso klappt das ganze bei gedrückter Entertaste
Weil es eine automatische Tastaturwiederholung gibt, aber keine "Mauswiederholung"

Zitat:
und könnte man nicht einfach dieses simulieren.
Klar, z.Bsp. mit einem Timer
Ein Experte ist ein Mann, der hinterher genau sagen kann, warum seine Prognose nicht gestimmt hat. (Winston Churchill)
  Mit Zitat antworten Zitat
Benutzerbild von Fussball-Robby
Fussball-Robby

Registriert seit: 22. Okt 2007
Ort: Nähe Köln
1.063 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: gedrückte Maustaste soll sich wie Entertaste verhalten

  Alt 30. Apr 2008, 15:34
Das ist doch nicht viel Aufwand
Timer auf die Form, Interval auf 150 Enabled = False
Gewünschten Code ins OnTimer-Ereignis
Ins OnMouseDown des Buttons: Timer1.Enabled := True;
Ins OnMouseUp: Timer1.Enabled := False;

PS.: Oh, doch mehr Aufwand als gedacht: Man muss einen Timer auf die Form ziehen und 2 Zeilen Code schreiben
Robert L.
Der folgende Satz ist richtig!
Der vorherige Satz ist falsch!

Paradox
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: gedrückte Maustaste soll sich wie Entertaste verhalten

  Alt 30. Apr 2008, 15:34
Schau doch einfach mal, wie TSpinEdit bzw. TSpinButton das machen
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
608 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: gedrückte Maustaste soll sich wie Entertaste verhalten

  Alt 30. Apr 2008, 15:37
Ok Ok, ich hab mich überreden lassen und es doch mal mit einem Timer versucht.

Sobald ich auf den Button klicke und die Maustaste gedrückt halte wird der Timer aktiviert
und alle 100ms wird ein Zähler erhöht, lasse ich die Taste los so wird der Timer deaktiviert.

Dies ist jetzt nur der Test, ich muß das ganze noch so umbauen das ich Items rauf bzw. runter
verschieben kann, aber das sollte ich noch hinbekommen

Delphi-Quellcode:
procedure TfrmMain.Button1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  TimerMoveItems.Enabled := True;
end;


procedure TfrmMain.Button1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  TimerMoveItems.Enabled := False;
end;


procedure TfrmMain.TimerMoveItemsTimer(Sender: TObject);
begin
  Inc(Blupp);
  Label1.Caption := IntToStr(Blupp);
end;
Geht doch einfachher als ich zu Anfang gedacht habe, vielen dank für die Tipps und Anregungen.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 07:17 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