Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi OnSelectItem startet DragDrop nach ShellExecute (https://www.delphipraxis.net/120751-onselectitem-startet-dragdrop-nach-shellexecute.html)

kalmi01 16. Sep 2008 09:16


OnSelectItem startet DragDrop nach ShellExecute
 
Hallo,

ich habe hier ein TListView in welchem das OnSelectItem definiert ist.
OnSelectItem ruft 2 unterschiedliche Prozeduren auf:
- Prozedur A
- Prozedur B

Der einzige Unterschied zwischen A und B ist, dass bei B vor der Verabeitung noch ein externes Prog aufgerufen wird, dessen Ende abgewartet wird, bevor es mit dem Code von A weiter geht.
Den Programm-Aufruf habe ich testweise sowohl mit CreateProcess als auch mit ShellExecute ausprobiert.

Wird A aufgerufen ist alles OK.

Wird B aufgerufen, hängt das selektierte Icon zum draggen am Mauszeiger.

WARUM ?

Und noch viel wichtiger: was kann ich dagegen machen ?

Gruss
Michael

mirage228 16. Sep 2008 09:20

Re: OnSelectItem startet DragDrop nach ShellExecute
 
Hi,

Ich denke das liegt daran, dass OnSelectItem im "MouseDown" aufgerufen wird und im MouseDown + Bewegung auch die Drag-Ereignisse ausgelöst werden.
Du könntest DragMode auf dmManual setzen in A und nach B wieder auf dmAutomatic. Vielleicht hilft das ja. :)

Viele Grüße

kalmi01 16. Sep 2008 09:38

Re: OnSelectItem startet DragDrop nach ShellExecute
 
Zitat:

Zitat von mirage228
Ich denke das liegt daran, dass OnSelectItem im "MouseDown" aufgerufen wird und im MouseDown + Bewegung auch die Drag-Ereignisse ausgelöst werden.

Dann müsste es aber bei Prozedur A und B schief gehen.
B ruft auch nicht A auf, sonder ist eine exakte Kopie von, in der lediglich der Aufruf des externen Prog noch drinn ist.
Statt meines externen Progs, kann man auch irgend ein anderes Aufrufen, z.B. Notepad.exe

Zitat:

Zitat von mirage228
Du könntest DragMode auf dmManual setzen in A und nach B wieder auf dmAutomatic.

Hab ich getan.

Zitat:

Zitat von mirage228
Vielleicht hilft das ja. :)

leider nein.

Prozedur A aufrufen ==> alles OK

Prozedur B aufrufen ==> beim ersten MouseMove hängt das Icon an der Maus

Gruss
Michael

mirage228 16. Sep 2008 09:55

Re: OnSelectItem startet DragDrop nach ShellExecute
 
Also ich habe es gerade mal mit Delphi 7 ausprobiert.
ShellExecuteAndWait-Funktion aus der CL.
Habe ein ListView im Report-Modus mit ein paar Items angelegt und dann im OnSelectItem folgendes geschrieben (testweise):
Delphi-Quellcode:
  ShellExecuteAndWaitA(Handle, 'open', 'notepad.exe', nil, nil, SW_SHOWNORMAL, True);
Da trat das Problem jetzt bei mir nicht auf :gruebel:

Hast Du noch was andere gemacht? Sonst würde ichs noch mit einem Aufruf von
Delphi-Quellcode:
ListView.EndDrag(False);
nach B() versuchen.

Grüße

kalmi01 16. Sep 2008 10:46

Re: OnSelectItem startet DragDrop nach ShellExecute
 
Hi,

Dein ShellExecuteAndWaitA könnte von asserbad stammen ?

Mein ShellExecute sieht auf den ersten Blick ähnlich aus.

Ich habe (dank Deiner Idee mit dmManual) eine Lösung, aber ohne das Problem zu beheben.
Da Drag&Drop nur unter bestimmten Umständen aus der ListView heraus möglich sein soll,
schalt ich es nur zu diesem Zeitpunhkt ein, ansonsten ist es aus (dmManual).

Danke für die Anregung

Gruss
Michael

mirage228 16. Sep 2008 11:35

Re: OnSelectItem startet DragDrop nach ShellExecute
 
Zitat:

Zitat von kalmi01
Dein ShellExecuteAndWaitA könnte von asserbad stammen ?

Ganz genau ;)

Zitat:

Danke für die Anregung
Gerne :)

Viele Grüße


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:29 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