Seite 1 von 1

HandleDragDrop im Hybrid-Mode

Verfasst: Sa, 29. Feb 2020 8:50
von Bitmusterschuster
Hallo Zusammen,
ich habe ein Problem mit dem HandleEvent (DragDrop) bei einem XBP-Fenster im Hybrid-Mode.
In der APPSYS habe ich zwei Fenster definiert oCrtMain und oCrtCover.
Im oCrtCover Fenster werden die Produktbilkder angezeigt, wenn ich im Artikelbrowser in den Daten blättere,
das funktioniert einwandfrei.

Bei der oCrtCover Definition habe ich :DropZone := .t. gesetzt und einen Slot HandleDragDrop() definiert.

Code: Alles auswählen



***********************
FUNCTION HandleDragDrop( aState,oData )
***********************
local nAltSel := select()
LOCAL aRet := oData:GetData( XBPCLPBRD_FILELIST )
LOCAL cShortFilename, cLongFilename, cData
LOCAL cProdId  := artikel->prodid

SetAppWindow(oCrtCover)
clear
Qout("hallo")
inkey(0)


IF aRet <> NIL .AND. len(aRet) >= 1
  DO CASE
    CASE upper(afteratnum(".",aRet[1])) <> "JPG"
      Fehler("Sie k”nnen nur Bilddateien mit der Endung 'JPG' zuweisen.",5)
    CASE empty(cProdId)
      Fehler("Die aktuelle Artikel-ID ist unzul„ssig !",5)
    OTHERWISE
      cLongFilename := aRet[1]
      cShortFilename := afteratnum("\",cLongFilename)
      cData := FileStr(cLongFilename)
      IF StrFile(cData,cpUncCover+alltrim(cProdId)+".JPG",.t.,0) > 0
        sleep(10)
        select Artikel
        IF r_lo()
          repl ProdImPath with '/storage/emulated/0/pictures/'+alltrim(cProdId)+".jpg"
          unlock
        ENDIF
      ELSE
        Fehler("Bild kann nicht kopiert werden. (Rechte prfen) !",5)
      ENDIF
  ENDCASE
ENDIF
sele (nAltSel)
RETURN(XBP_DROPMODE_NONE) 

Im Programm möchte ich dann eine JPG-Datei in die Dropzone des oCrtCover Fensters ziehen. Es passiert aber nichts. der Mousecursor zeigt das Verboten-Zeichen' an und nicht das + Zeichen. SetMouse(.t.) habe ich gesetzt.
Es wird auch kein Code ausgeführt. (ich hatte dort die Daten mit Qout() anzeigen wollen, um zu sehen, was ankommt)

Bin ratlos ...

Danke für Hinweise

Gruß Rudi

Re: HandleDragDrop im Hybrid-Mode

Verfasst: Sa, 29. Feb 2020 11:12
von AUGE_OHR
hi,
Bitmusterschuster hat geschrieben: Sa, 29. Feb 2020 8:50 Im oCrtCover Fenster werden die Produktbilkder angezeigt, wenn ich im Artikelbrowser in den Daten blättere,
das funktioniert einwandfrei.
"woher" kommen die Bilder :?:
"wie" hast du dargestellt :?:
Bitmusterschuster hat geschrieben: Im Programm möchte ich dann eine JPG-Datei in die Dropzone des oCrtCover Fensters ziehen. Es passiert aber nichts. der Mousecursor zeigt das Verboten-Zeichen' an und nicht das + Zeichen. SetMouse(.t.) habe ich gesetzt.
"wo" kommt die JPG-Datei her :?:

wenn keine "Filelist" ankommt stellt sich die Frage wer ist der "Absender" :idea:

man kann z.b. kein Attachment aus Outlook in eine Xbase++ App per DragDrop ziehen sondern nur aus dem Explorer (incl. Desktop)
auch aus einem "anderen" Xbase++ Fenster ist eine "senden" nicht vorgesehen sondern geht nur mit Tricks.

Re: HandleDragDrop im Hybrid-Mode

Verfasst: Sa, 29. Feb 2020 12:01
von Bitmusterschuster
Hi,

ich ziehe mit Drag aus einem Windows Explorer Fenster eine JPG Datei in das oCrtCover Fenster. Die Area ist mit DragDrop auf .t. gesetzt worden.
Dann müsste doch in aRet := oData:GetData( XBPCLPBRD_FILELIST ) die Fileliste stehen, die ich dann abarbeiten kann.
Bei allen anderen Windows Fenstern erscheint das + Symbol, dass ich die Datei dort fallen lassen kann, nur bei mir ist das Verboten-Zeichen (durchgetrichener Kreis)

Also Absender wäre Windows Dateiexplorer und Empfänger mein oCrt-Fenster.

Müsste doch gehen oder nicht ?

Danke fürs Mitdenken.

Gruß Rudi

Re: HandleDragDrop im Hybrid-Mode

Verfasst: Sa, 29. Feb 2020 12:38
von AUGE_OHR
Bitmusterschuster hat geschrieben: Sa, 29. Feb 2020 12:01 ich ziehe mit Drag aus einem Windows Explorer Fenster eine JPG Datei in das oCrtCover Fenster. Die Area ist mit DragDrop auf .t. gesetzt worden.
hast du die 3 Codeblöcke vom CRT auch "gefüllt" :?:

das setzen von DropZone "feuert" nur die Events bei DragDrop.
die Codeblöcke sind für die jeweilige Aktion zum "füllen"

Code: Alles auswählen

   oCrt:dragEnter := {| aState, oDragData, self | ... }
   oCrt:dragDrop := {| aState, oDragData, self | ... } 
   oCrt:dragLeave := {| uNIL1, uNIL1, self | ... } 
wie du ein Bild in einem CRT anzeigst ist mir allerdings immer noch schleierhaft :idea:

Re: HandleDragDrop im Hybrid-Mode

Verfasst: So, 01. Mär 2020 22:56
von Bitmusterschuster
Hallo Jimmy,

es funktioniert jetzt bei mir.
Ich hatte ja den Codeblock korrekt hinterlegt, aber wahrscheinlich SetMouse(.t.) nicht korrekt gesetzt.
Gestern ging es also auf meinem Entwicklungsrechner, aber heute plötzlich nicht mehr.

Nach 2 stündigem Test hatte ich die Nase voll und habe im Netz meinen Notebook gestartet und die Applikation von dort gestartet, dort läuft es.
Das heißt, wenn ich dort mit der Maus über das oCrtCover-Fenster gehe, kann ich eine JPG-Datei dort fallen lassen, es wird auch das +-Symbol angezeigt.
Auch der Codeblock wird korrekt ausgeführt. (kopiert die Datei vom Quellverzeichnis automatisch in meiner Subdir 'Cover' und benennt die Datei in <EANCode>.jpg um. dann kann mein Artikelbrowser diese Datei über den EAN-Code finden und im Coverfenster anzeigen)

Bei meinem Entwicklungsrechner lief es gestern noch, und heute nicht mehr.

Was könnte diesen Unterschied machen. Ich ziehe einfach nur eine JPG-Datei aus einem Verzeichnis in die Area meines oCrtCover.

Halte Dich auf dem Laufenden, wenn ich ein Ergebnis habe.

Gruß Rudi

Re: HandleDragDrop im Hybrid-Mode

Verfasst: Mo, 02. Mär 2020 12:35
von Bitmusterschuster
Hallo Jimmy,

ich habe jetzt das Problem erkannt.
Wenn ich die Applikation aus einem CMD-Fenster starte funktioniert der DragDrop Mechanismus nicht.

Starte ich die Version aber aus dem Windows-Explorer heraus funktioniert es.

Habe schon Alaska geschrieben, und um Hilfe gebeten.
Ich werde noch mal testen ob es etwas mit der Legacy-Konsole zu tun hat, die habe ich nämlich aktiviert.

Gruß Rudi

Re: HandleDragDrop im Hybrid-Mode

Verfasst: Mo, 02. Mär 2020 12:50
von AUGE_OHR
hi,
Bitmusterschuster hat geschrieben: Mo, 02. Mär 2020 12:35 Starte ich die Version aber aus dem Windows-Explorer heraus funktioniert es.
interessant.

versuch mal
1.) App "Senden an Desktop" und dann mit eine DblClick auf das Icon
2-) *.BAT mit

Code: Alles auswählen

START MY.EXE /I %1 %2 %3
ob das einen Unterschied gibt, Danke

Re: HandleDragDrop im Hybrid-Mode

Verfasst: Mo, 02. Mär 2020 14:21
von Bitmusterschuster
Hi,

es liegt definitiv an der aktivierten Legacy-Konsole.
Ich habe die jetzt mal abgeschaltet und neu gestartet, dann geht es einwandfrei auch aus dem Konsolenfenster.
Mal sehen, was Alaska dazu sagt.
Halte Euch auf dem Laufenden …

Gruß Rudi