AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls So etwas halte ich für einen OnMouse-Up-Bug in der ListBox
Thema durchsuchen
Ansicht
Themen-Optionen

So etwas halte ich für einen OnMouse-Up-Bug in der ListBox

Ein Thema von Maja Jessica · begonnen am 21. Okt 2006 · letzter Beitrag vom 21. Okt 2006
Antwort Antwort
Maja Jessica

Registriert seit: 16. Apr 2005
Ort: Dortmund
95 Beiträge
 
Delphi 4 Standard
 
#1

So etwas halte ich für einen OnMouse-Up-Bug in der ListBox

  Alt 21. Okt 2006, 20:29
Hi,

habe zwei ListBoxen, bei denen ich mittel Drag'n Drop Items hin- und herverschiebe.
Klappt. Aber nun soll die Listbox auch auf Doppelklick auf einem Item eine andere Aktion (andere Form öffnen) ausführen.
Dabei soll das ziehen ohne "Zusatztaste" funtionieren.

Drag'n Drop Start:
Delphi-Quellcode:
procedure TFormLolc.ListBox1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if TListBox(Sender).Items.count > 0 then
 //if (Sender is TListBox) and (ssCtrl in Shift) then // soll OHNE Zusatztaste...
   TListBox(Sender).BeginDrag(False,5)
end;
Aber bei Doppelklick auf Item soll Drag-Funktion abgebrochen werden:
Delphi-Quellcode:
procedure TFormLolc.ListBox1DblClick(Sender: TObject);
var nr, Tabelle, Eintrag : String;
begin
    TListBox(Sender).EndDrag(false);
    FormDetail.ShowModal;
end;
Nun öffnet sich FormDetail, ich kann die Form nutzen.
Aber nachdem das Form geschlossen wird, ist der MouseCursor wieder im "DragModus", d.h. ich muss ersteinmal in die ListBox1 klicken um weitermachen zu können.
Egal wohin ich auch die "EndDrag"-Anweisung verschiebe.

Ausser wenn ich sie ins OnMouseUp verschiebe, denn dann funktioniert das Drag'n Drop garnicht mehr, denn es wird bei einem BeginDrag in OnMouseDown automatisch OnMouseUp aufgerufen.

Dieses hier halte ich für einen Bug (oder zumindest für nicht gewollt):

Delphi-Quellcode:
procedure TForm1.ListBox1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  ListBox1.BeginDrag(false);
end;

procedure TForm1.ListBox1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  ShowMessage('Mouse-UP aufgerufen grrrr');
end;
Klicke ich mit der Maustaste in die Listbox und halte sie gedrückt,
wird trotzdem OnMouseUp ausgeführt.

Hat jemand eine IDE? (gut, könnte mit (ssCtrl in Shift) arbeiten, will ich aber nicht)

MJ
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: So etwas halte ich für einen OnMouse-Up-Bug in der ListB

  Alt 21. Okt 2006, 20:33
Ein workaround? Den Cursor explizit setzen.
Screen.Cursor := crDefault
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Maja Jessica

Registriert seit: 16. Apr 2005
Ort: Dortmund
95 Beiträge
 
Delphi 4 Standard
 
#3

Re: So etwas halte ich für einen OnMouse-Up-Bug in der ListB

  Alt 21. Okt 2006, 20:52
Gerne

Hab's versucht, klappt nicht.

Delphi-Quellcode:
procedure TFormLolc.ListBox1DblClick(Sender: TObject);
var nr, Tabelle, Eintrag : String;
begin
    ShowMessage('JETZT');
    TListBox(Sender).EndDrag(true);
    Screen.Cursor := crDefault;
//...
    FormDetail.ShowModal;
end;
Bei Rückkehr/Schliessen von FormDetail ist Drag in der aufrufenden Form immer noch aktiv.

MJ
  Mit Zitat antworten Zitat
21. Okt 2006, 20:56
Dieses Thema wurde von "alcaeus" von "Programmieren allgemein" nach "VCL / WinForms / Controls" verschoben.
Sowas nenne ich \\"falsche Sparte\\". Gehoert eindeutig zu den VCL-Komponenten
shubbi
(Gast)

n/a Beiträge
 
#5

Re: So etwas halte ich für einen OnMouse-Up-Bug in der ListB

  Alt 21. Okt 2006, 21:43
Bei mir geschieht das gleiche (Drag wird nicht abgebrochen).
Ich hab mir mal die Controls.pas angeguckt:
EndDrag bewirkt nur etwas, wenn Dragging = True ist.
Listbox1.Dragging ist aber in Listbox1DblClick noch nicht True.
Aber folgendes beispiel beendet das Dragging:
Delphi-Quellcode:
procedure TForm1.ListBox1DblClick(Sender: TObject);
begin
// FormDetail.ShowModal;
  tlistbox(Sender).EndDrag(false);
  Color:= not Color; // um zu sehen, ob was passiert
end;
Es liegt also daran, dass FormDetail.ShowModal in ListBox1DblClick aufgerufen wird. Die Lösung ist, dass du FormDetail.ShowModal erst in Listbox1.OnEndDrag aufrufst:
Delphi-Quellcode:
class TForm1: TForm
  {...}
private
  showFormDetailInEndDrag: boolean
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  showFormDetailInEndDrag:= false;
end;

procedure TForm1.ListBox1DblClick(Sender: TObject);
begin
  showFormDetailInEndDrag:= true;
  TListbox(Sender).EndDrag(false);
end;

procedure TForm1.ListBox1EndDrag(Sender, Target: TObject; X, Y: Integer);
begin
  if showFormDetailInEndDrag then begin
    showFormDetailInEndDrag:= false;
    FormDetail.ShowModal;
  end;
end;

{ übrige Funktionen zum Dragging... }
  Mit Zitat antworten Zitat
Maja Jessica

Registriert seit: 16. Apr 2005
Ort: Dortmund
95 Beiträge
 
Delphi 4 Standard
 
#6

Re: So etwas halte ich für einen OnMouse-Up-Bug in der ListB

  Alt 21. Okt 2006, 22:08
Aha, wieder etwas dazugelernt.

Es funktioniert damit so wie es soll.
Da hast Du aber sauber "um die Ecke gedacht", Respekt!

Danke für die Hilfe und für deine Bemühungen!

MJ
  Mit Zitat antworten Zitat
shubbi
(Gast)

n/a Beiträge
 
#7

Re: So etwas halte ich für einen OnMouse-Up-Bug in der ListB

  Alt 21. Okt 2006, 22:18
Bitte, bitte!

..und ich hab auch gleich was über Drag&Drop gelernt.
  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 22:54 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