 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1274 Wohnort: Ruhrpott
|
Verfasst am: 25.10.2014, 00:28 Titel: Drag & drop - Simulation |
|
|
Hallo allerseits!
Bei dem Versuch, einen Drag & Drop - Vorgang aus einem Programm heraus zu simulieren, komme ich nicht weiter.
Beim Notepad und bei Winamp funktioniert das Programm wunschgemäß, bei Audacity und Firefox passiert gar nichts (außer daß mir PostMessage eine "1" für eine erfolgreiche Ausführung zurückmeldet). Mein eigentliches Ziel ist es, das gleichzeitige Öffnen mehrerer Dateien in einer Audacity - Instanz zu automatisieren. Kann mir jemand weiterhelfen?
Code: | #Include "windows.bi"
#include "win\shellapi.bi"
#Include "win/tlhelp32.bi"
Type DROPFILES
pFiles As Integer
pt As POINT
fNC As BOOL
fWide As BOOL
files As ZString*1000
End Type
Dim As DROPFILES Ptr hd
Dim As String audacity, g, editor, firefox, winamp
Dim As ZString * 1000 text
Dim As Integer x, pid
Dim As LPDWORD prozess
Dim As HANDLE snapshothandle
Dim As PROCESSENTRY32 prozessantwort
Dim As HWND fensterhandle
audacity = "C:\Programme\Audio\Audacity203\audacity.exe"
editor = "C:\WINDOWS\system32\notepad.exe"
firefox = "C:\Programme\Internet\Firefox\firefox.exe"
winamp = "C:\Programme\Audio\Winamp\winamp.exe"
'Sleep 5000
g = ""
snapshothandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0) 'handle für systemschnappschuß erstellen
prozessantwort.dwSize = SizeOf(prozessantwort) 'größe der datenstruktur für antwort übergeben
Process32First(snapshothandle,@prozessantwort) 'ersten prozesshandle suchen (ist SYSTEM IDLE PROCESS)
Do While Process32Next(snapshothandle, @prozessantwort) 'alle prozesse durchsuchen
If LCase(prozessantwort.szExeFile) = "winamp.exe" Then
'If LCase(prozessantwort.szExeFile) = "firefox.exe" Then
'If LCase(prozessantwort.szExeFile) = "audacity.exe" Then 'prozess gehört zu audacity
'If LCase(prozessantwort.szExeFile) = "notepad.exe" Then
g = prozessantwort.szExeFile 'dateiname
pid = prozessantwort.th32ProcessID 'prozess-ID
Exit Do 'suche beenden
EndIf
Loop
CloseHandle(snapshothandle) 'ressourcen freigeben
'fensterhandle aus PID ermittteln
fensterhandle = GetWindow(FindWindow(0,0), GW_HWNDFIRST) 'erstes fensterhandle
Print fensterhandle
Do
fensterhandle = GetWindow(fensterhandle,GW_HWNDNEXT) 'nächstes fensterhandle
GetWindowThreadProcessId(fensterhandle, @prozess) 'prozess-ID des fensters ermitteln
Print fensterhandle;" ";prozess;
If pid = prozess Then 'fenster gehört zum gesuchten prozess
GetWindowText(fensterhandle,@text,200) 'fenstertext ermitteln
Print " ";text
'If InStr(text,"Editor") Then
'If InStr(text,"Audacity") Then 'hauptfenster
'If InStr(text,"Firefox") Then
If InStr(text,"Winamp 5") Or InStr(text,"- Winamp")Then
Exit Do 'suche beenden
EndIf
Else
Print
EndIf
Loop While fensterhandle
Print
Print text 'fenstertext
Print "PID ";pid
Print
Print prozess;" ";fensterhandle
Print
g = "h:\test\Lady in black.wav" + Chr(0,0) 'zu "droppende" datei
'g = "e:\text.txt" + Chr(0,0)
hd = Callocate(20 + Len(g)) 'DROPFILES - struktur anlegen
hd->pFiles = 20 'offset für dateiliste
hd->fNC = 0 'drop - koordinaten sind relativ zum anwendungsfenster
hd->fWide = 0 'dateiliste ist ASCII
hd->pt.x = 200 'drop - koordinaten
hd->pt.y = 200
hd->files = g 'dateiliste
Print DragQueryFile(hd,-1,@text,1000) 'anzahl der files
Print DragQueryFile(hd,0,@text,1000) '1. filename
Print text
DragAcceptFiles(fensterhandle,TRUE)
Print PostMessage(fensterhandle,WM_DROPFILES,hd,0) 'meldung an anwendung senden
'Print SendMessage(fensterhandle,WM_DROPFILES,hd,0) '--> PROGRAMMABSTURZ
DeAllocate hd
Sleep
|
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
 |
noop
Anmeldungsdatum: 04.05.2005 Beiträge: 259
|
Verfasst am: 01.11.2014, 02:37 Titel: |
|
|
Hi,
1) Du schreibst, dass du mehrere Dateien gleichzeitig in Audacity öffnen möchtest. Muss Audacity vorher schon laufen?
Falls nicht: Wäre ein simpler Aufruf der Art "audacity.exe datei1.wav datei2.wav" möglich?
2) Ich habe den Code ausprobiert und mit Notepad getestet - funktioniert bei mir allerdings nicht.
Ich habe es daher mal mit Internet "querlesen" folgendermaßen implementiert (keine Ahnung, ob das so wasserdicht dicht ist. Dieses Gebiet ist für mich noch etwas Neuland).
Code: | #define UNICODE
#define GHND &h42
#Include "windows.bi"
#include once "win\shellapi.bi"
#include once "win\Shlobj.bi"
#Include once "win\tlhelp32.bi"
declare sub dropFileOn(hWnd as HWND, filename as string)
Dim As wstring*(MAX_PATH+1) text
dim as DWORD pid
Dim As DWORD prozess
Dim As HANDLE snapshothandle
Dim As PROCESSENTRY32W prozessantwort
Dim As HWND fensterhandle
dim as string exe,wndName,filename
filename = "c:\test1.txt"
exe = "notepad.exe"
wndName = "Notepad"
'exe = "chrome.exe"
'wndName = "Chrome"
'filename = "c:\w1.wav"
'exe = "audacity.exe"
'wndName = "Audacity"
snapshothandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0) 'handle für systemschnappschuß erstellen
prozessantwort.dwSize = SizeOf(prozessantwort) 'größe der datenstruktur für antwort übergeben
Process32First(snapshothandle,@prozessantwort) 'ersten prozesshandle suchen (ist SYSTEM IDLE PROCESS)
Do While Process32Next(snapshothandle, @prozessantwort) 'alle prozesse durchsuchen
If LCase(prozessantwort.szExeFile) = exe Then
pid = prozessantwort.th32ProcessID 'prozess-ID
Exit Do 'suche beenden
EndIf
Loop
CloseHandle(snapshothandle) 'ressourcen freigeben
'fensterhandle aus PID ermittteln
fensterhandle = GetWindow(FindWindow(0,0), GW_HWNDFIRST) 'erstes fensterhandle
Do
fensterhandle = GetWindow(fensterhandle,GW_HWNDNEXT) 'nächstes fensterhandle
GetWindowThreadProcessId(fensterhandle, @prozess) 'prozess-ID des fensters ermitteln
If pid = prozess Then 'fenster gehört zum gesuchten prozess
GetWindowText(fensterhandle,@text,MAX_PATH) 'fenstertext ermitteln
If InStr(text,wndName) Then
Exit Do 'suche beenden
EndIf
EndIf
Loop While fensterhandle
Print "PID: ";pid
Print "Fenstertitel: ";text
print "Fensterhandle: ";fensterhandle
Print
dropFileOn(fensterhandle,filename)
sleep
sub dropFileOn(hWnd as HWND, filename as string)
dim as DROPFILES ptr dfPTR = cast(DROPFILES ptr,globalAlloc(0,sizeof(DROPFILES) + (len(filename)+1)*sizeof(wstring)))
dfPTR->pFiles = sizeof(DROPFILES) ' offset to start of file list
dfPTR->fWide = TRUE ' Unicode {TRUE/FALSE}
*cast(wstring ptr,dfPTR+1) = wstr(filename) 'dfPTR+1 <-> dfPTR+sizeof(DROPFILES) <-> start of file list
print "PostMessage: ";postMessage(hWnd, WM_DROPFILES, cast(WPARAM,dfPTR), 0)
print "Letzter Fehler: ";getLastError()
globalFree(dfPTR)
end sub |
Damit klappts bei mir mit Notepad [Beachte: Bei mir heißt das Fenster Notepad und nicht Editor].
SendMessage klappt bei mir auch nicht. Hab das auch öfters auf Foren gelesen, dass das bei denen nur mit PostMessage geklappt hat.
Mit Google Chrome und Audacity klappt es hingegen nicht. Dazu habe ich eine mögliche Erklärung gefunden:
http://microsoft.public.platformsdk.shell.narkive.com/HuJ9fjDN/send-hdrop-data-with-wm-dropfiles-message
Ganz unten, insb. letzter Post:
Zitat: | [...] these applications do not actually handle the WM_DROPFILES message. Instead, they implement IDropTarget and call RegisterDragDrop. Unfortunately, there is currently no documented method of retrieving the IDropTarget interface associated with a window. |
Und hier: http://codeverge.com/embarcadero.delphi.nativeapi/how-to-programmiclly-drag-and-dr/1069356
Wieder letzter Post:
Zitat: | The "preferred" way to pass data around is to implement the IDataObject and
IDragSource interfaces in your code. Microsoft wants you to use the Win32
API DoDragDrop() function, however since you want to send data to a specific
window, that will not work as DoDragDrop() is an interactive function that
requires human action to do its work. There is no official way to get an
IDropTarget interface from a specific HWND, but there is an unofficial way
(untested):
{code:delphi}
var
DT: IDropTarget;
begin
DT := IDropTarget(GetProp(hWnd, 'OleDropTargetInterface'));
...
end;
{code}
With that (assuming it works), you can then call the IDropTarget.DragEnter()
method to ask the other app for permission to "drop" your data, and then if
allowed call the IDropTarget.Drop() to do the actual drop.
> procedure DoDropFiles(Wnd: HWND; Files: TStringList); |
Vielleicht hilft dir das ja weiter. Solltest du was irgendwie hinkriegen,
poste bitte die Lösung! Bin auch daran interessiert. |
|
Nach oben |
|
 |
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1274 Wohnort: Ruhrpott
|
Verfasst am: 01.11.2014, 11:01 Titel: |
|
|
Hallo noop!
Zitat: | Wäre ein simpler Aufruf der Art "audacity.exe datei1.wav datei2.wav" möglich? | Das wäre schön, aber wenn ich Audacity so aufrufe, habe ich hinterher zwei Instanzen mit jeweils einer Audiodatei.
Vielleicht sollte ich zum näheren Verständnis kurz erläutern, was ich eigentlich vorhabe: Meine Musiksammlung besteht im Wesentlichen aus Radiomitschnitten, und beim Sammeln habe ich drei Gegner: Ansager, Tontechniker und Geisterfahrer. Daher kommt es öfter vor, daß ich -mithilfe von Audacity- aus mehreren kaputtgequatschten oder endlos crossgefadeten Aufnahmen eine intakte mache. Um mir diese Arbeit zu erleichtern, habe ich mir ein Verwaltungsprogramm geschrieben, das -nachdem ich die entsprechenden Dateien ausgewählt habe- zunächst -falls erforderlich- Audacity startet, dann die Dateien in ein Arbeitsverzeichnis kopiert ("H:\test\"), dieses Verzeichnis öffnet und in den Vordergrund holt. Dort kann ich dann die Dateien mit der Maus markieren und auf das Audacity - Fenster ziehen. Diese letzten zwei Arbeitsschritte sind es, die ich auch noch automatisieren möchte.
Soweit ich bis jetzt herausgefunden habe, gibt es beim Drag & Drop zwei Verfahren: Einmal jenes mit DROPFILES, das noch von Windows 3.1 stammt und aus Gründen der Abwärtskompatibilität weiter implementiert ist. Danach hat man sich bei Microsoft gesagt: "Warum einfach, wenn's auch kompliziert geht?" und sich ein zweites Verfahren mit IUnknown, IDropTarget, IDropSource, IDataObjekt und IEnumFormatEtc ausgedacht.
Zu diesem Thema hat stephanbrunker ein sehr schönes Tutorial geschrieben, durch das ich mich gerade durcharbeite.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
 |
noop
Anmeldungsdatum: 04.05.2005 Beiträge: 259
|
Verfasst am: 01.11.2014, 13:07 Titel: |
|
|
Das wurde anscheinend geändert. Mit meiner alten Version klappt der Kommandozeilenaufruf. Neuerdings geht es so:
Schreibe in eine Datei *.lof die Zeilen
Code: | window
file "C:\w1.wav"
file "C:\w2.wav" | und öffne die Datei mit audacity per Kommandozeile.
Das klappt auch bei der neuen Version. Siehe dazu auch hier: http://manual.audacityteam.org/o/man/lof_files.html |
|
Nach oben |
|
 |
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1274 Wohnort: Ruhrpott
|
Verfasst am: 01.11.2014, 15:01 Titel: |
|
|
Danke für den Tip, das hätte auch mit meiner alten Audacity - Version funktioniert - wenn ich es gewußt hätte. Wer lesen kann, ist klar im Vorteil! Immerhin: Dafür habe ich jetzt die neueste Version installiert.
Einen Haken hat die Sache allerdings: Im Dateinamen dürfen, anders als bei Drag & Drop, keine Umlaute enthalten sein.
Und wirklich praktikabel ist diese Methode für mich auch nicht, denn sie funktioniert nur zusammen mit einem Neustart von Audacity. Ich könnte zwar eine eventuell laufende Instanz von meinem Programm aus beenden, aber das dauert jedesmal 20 - 30 Sekunden zusätzlich, da geht markieren und draufziehen doch schneller.
Da werde ich doch weiter versuchen, Drag & Drop zu simulieren - aber nicht mehr heute, ich habe schon ganz eckige Augen...
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 01.11.2014, 19:19 Titel: |
|
|
grindstone hat Folgendes geschrieben: | Einen Haken hat die Sache allerdings: Im Dateinamen dürfen, anders als bei Drag & Drop, keine Umlaute enthalten sein. |
Oder sie müssen einfach im richtigen Encoding sein. Ich nehme stark an, dass Audacity eine UTF-8-Strings in der Datei erwartet, während FreeBASIC typischerweise mit Steinzeit-ANSI-Strings arbeitet. Eine Kombination von MultiByteToWideChar und WideCharToMultiByte aus der WinAPI kann dir helfen, zwischen ANSI und UTF-8 zu konvertieren. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1274 Wohnort: Ruhrpott
|
Verfasst am: 02.11.2014, 19:10 Titel: |
|
|
Ja, sowas in der Art vermute ich auch. Aber wie gesagt, die Methode mit dem .lof - File ist für mich sowieso nicht praktikabel, und zum nur-mal-kurz-ausprobieren ist mir die Parameterliste der API-Funktionen zu umfangreich. Aber gut zu wissen, daß es sie gibt
Ich habe mein Problem inzwischen auf andere Weise gelöst, und zwar mithilfe von SendInput. Damit lassen sich Tastatureingaben, Mausaktionen und Hardwareeingaben simulieren. Code: | #Include "windows.bi"
#Include "win\tlhelp32.bi"
Declare Sub TastenSim(taste As UByte, ut As String = "")
Type IINPUT
itype As Integer
Union
mi As MOUSEINPUT
ki As KEYBDINPUT
hi As HARDWAREINPUT
End Union
End Type
Dim As String g, f
Dim As Integer x, y
Dim As Short kc
Dim As UByte b
ReDim As String datei(1)
Sleep 5000
ReDim datei(2)
datei(1) = "Lady in black.mp3"
datei(2) = "Da sprach der alte Häuptling der Indianer.wav"
TastenSim(Asc("D"),"alt") 'datei-menü öffnen
TastenSim(Asc("I")) 'importieren
TastenSim(Asc("A")) 'audio
For x = 1 To UBound(datei) 'dateinamen übermitteln
If x > 1 Then
TastenSim(Asc(" ")) 'space als trennzeichen
EndIf
TastenSim(Asc("2"),"shift") 'anführungszeichen
For y = 1 To Len(datei(x)) 'dateinamen
'Sleep 200
g = Mid(datei(x),y,1)
kc = VkKeyScan(g[0]) 'in scancodes umwandeln
Select Case HiByte(kc) 'umschalttasten
Case 1
f = "shift"
Case 2
f = "ctrl"
Case 6
f = "altgr"
Case Else
f = ""
End Select
TastenSim(LoByte(kc),f) 'tastendruck simulieren
Next
TastenSim(Asc("2"),"shift") 'anführungszeichen
Next
TastenSim(VK_RETURN) 'enter
Sub TastenSim(taste As UByte, ut As String = "")
Dim As IINPUT ip
ip.itype = INPUT_KEYBOARD
With ip.ki
.wScan = 0
If ut <> "" Then
.dwFlags = 0
Select Case ut 'umschalttaste drücken
Case "shift"
.wVk = VK_SHIFT
Case "alt"
.wVk = VK_MENU
Case "altgr"
.wVk = VK_RMENU
Case "ctrl"
.wVk = VK_CONTROL
End Select
SendInput(1,Cast(LPINPUT,@ip),SizeOf(ip))
EndIf
.dwFlags = 0
.wVk = taste
SendInput(1,Cast(LPINPUT,@ip),SizeOf(ip)) 'taste drücken
.dwFlags = KEYEVENTF_KEYUP
SendInput(1,Cast(LPINPUT,@ip),SizeOf(ip)) 'taste loslassen
If ut <> "" Then
.dwFlags = KEYEVENTF_KEYUP
Select Case ut 'umschalttaste loslassen
Case "shift"
.wVk = VK_SHIFT
Case "alt"
.wVk = VK_MENU
Case "altgr"
.wVk = VK_RMENU
Case "ctrl"
.wVk = VK_CONTROL
End Select
SendInput(1,Cast(LPINPUT,@ip),SizeOf(ip))
EndIf
End With
End Sub |
Damit das Beispiel funktioniert, muß Audacity laufen und im Vordergrund sein (darum die 5 Sekunden Pause). Außerdem muß der Importpfad von Audacity auf das Verzeichnis mit den Audiodateien zeigen. Dazu reicht es, einmal eine Audiodatei aus dem betreffenden Verzeichnis zu importieren.
Auch für simulierte Mausaktionen habe ich ein kleines Beispiel geschrieben: Code: | #Include "windows.bi"
Type IINPUT
itype As Integer
Union
mi As MOUSEINPUT
ki As KEYBDINPUT
hi As HARDWAREINPUT
End Union
End Type
Dim As Integer x
Dim As IINPUT ip
ip.itype = INPUT_MOUSE
With ip.mi
.mouseData = 1
.dwFlags = MOUSEEVENTF_ABSOLUTE Or MOUSEEVENTF_MOVE
For x = 1 To 5
.dx = 10000
.dy = 10000
SendInput(1,Cast(LPINPUT,@ip),SizeOf(ip))
Sleep 1000
.dx = 30000
.dy = 30000
SendInput(1,Cast(LPINPUT,@ip),SizeOf(ip))
Sleep 1000
Next
End With
|
Mit entsprechendem Aufwand ließe sich damit durchaus ein Drag & Drop - Vorgang realisieren.
Nebenbei hätte SendInput auch das Potential zum Mobbingwerkzeug, um Arbeitskollegen und andere computerbenutzende Mitmenschen in den Wahnsinn zu treiben.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 02.11.2014, 21:18 Titel: |
|
|
grindstone hat Folgendes geschrieben: | Nebenbei hätte SendInput auch das Potential zum Mobbingwerkzeug, um Arbeitskollegen und andere computerbenutzende Mitmenschen in den Wahnsinn zu treiben.  |
Hilfe, die 90er sind zurück und wollen ihre Scherzprogramme wieder haben.  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1274 Wohnort: Ruhrpott
|
Verfasst am: 03.11.2014, 02:09 Titel: |
|
|
Du meinst, wir sind schon zu alt für sowas?
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
 |
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1274 Wohnort: Ruhrpott
|
Verfasst am: 03.11.2014, 23:20 Titel: |
|
|
Geschafft!
Nach dem o.a. Workaround hier nun eine "echte" Drag & Drop - Simulation.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
 |
VANYA
Anmeldungsdatum: 17.06.2011 Beiträge: 8
|
Verfasst am: 18.07.2017, 11:44 Titel: |
|
|
Hallo an alle!
Zitat: | Zu diesem Thema hat stephanbrunker ein sehr schönes Tutorial geschrieben, durch das ich mich gerade durcharbeite. |
Mein Programm stürzt ab, wenn Sie von das Dialogfeld im Explorer-Fenster ziehen. Ich wollte in die Angelegenheit prüfen, aber ich denke, es ist nicht der Fall, wenn das endgültige Ergebnis nicht zufriedenstellend Programm. Während selbst ausführbare die vom Autor selbst erstellte auch nicht funktioniert.
Vielleicht ist der Autor von Lektionen wird diese Nachricht sehen und sieht, dass der Code falsch ist.
DragDrop5.zip _________________ http://free-basic.ru/ - Russian FreeBasic site |
|
Nach oben |
|
 |
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1274 Wohnort: Ruhrpott
|
Verfasst am: 21.07.2017, 12:58 Titel: |
|
|
Hallo VANYA!
Deine Anfrage geht wohl an stephanbrunker als Autor des Tutorials, aber der scheint sich inzwischen vom deutschen FreeBasic - Forum verabschiedet zu haben.
Und ich kann dir leider auch nicht weiterhelfen .
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
 |
VANYA
Anmeldungsdatum: 17.06.2011 Beiträge: 8
|
Verfasst am: 22.07.2017, 17:16 Titel: |
|
|
Hallo grindstone!
Ich wird versuchen, zu verstehen. Ich muss sagen, dass der Code ist sehr schwierig. Danke für die Antwort in diesem Thema. _________________ http://free-basic.ru/ - Russian FreeBasic site |
|
Nach oben |
|
 |
stephanbrunker
Anmeldungsdatum: 06.08.2017 Beiträge: 2
|
Verfasst am: 06.08.2017, 09:28 Titel: |
|
|
Hallo,
ich war hier noch nie aktiv, außerdem programmiere ich nur ein paar mal im Jahr was. Ich bekomme zwar so einmal im Jahr eine email mit irgendwelchen Fragen (zuletzt ein Bugfix in der BigInteger) und da kümmere ich mich schon drum. Da das hier mein Klarname ist kann man den auch googeln. Ich dachte zwar das meine email-Adresse beim freebasic-portal.de einsehbar ist, aber das habe ich nie nachgesehen.
Der Drag&Drop Code hat funktioniert als ich ihn geschrieben habe. Wie das aber immer so ist, hat sich seitdem der Compiler verändert und die Windows-Version auch und deshalb ist das alles nicht von Dauer.
Ich habe die Beispielprogramme aus dem Tutorial durchprobiert und bis Dragdrop4 funktionieren sie alle - das Prinzip funktioniert also. Nr. 5 weitet Nr. 4 nur auf andere Formate aus, da muss irgendwo noch ein Fehler drin sein. |
|
Nach oben |
|
 |
stephanbrunker
Anmeldungsdatum: 06.08.2017 Beiträge: 2
|
Verfasst am: 06.08.2017, 10:35 Titel: |
|
|
Jetzt funktioniert es wieder. Das war der Bug, den ich auf Seite 3 des Tutorials auch erwähnt hatte. IDropSource:QueryInterface hatte in der DragDrop5 noch die Deklaration "iid as IID Ptr" drin, während es in allen anderen Versionen der DragDropSource schon auf "iid as REFIID" geändert war. Da Drag in allen vorherigen Steps funktioniert hat, musste man nur mit WinMerge die Steps vergleichen um den Fehler zu sehen. Ich gehe aber jetzt hin und gleiche alle Steps untereinander mit WinMerge nochmal an, damit da wirklich nur die Unterschiede auftauchen. Das macht dann auch deutlicher, wie die Steps aufeinander aufbauen. Ich war da zwar ziemlich, aber nicht zu 100% konsequent, da ich das Tutorial als Abfallprodukt zu einem eigenen Projekt geschrieben habe. |
|
Nach oben |
|
 |
VANYA
Anmeldungsdatum: 17.06.2011 Beiträge: 8
|
Verfasst am: 08.08.2017, 05:14 Titel: |
|
|
stephanbrunker hat Folgendes geschrieben: | Jetzt funktioniert es wieder. Das war der Bug, den ich auf Seite 3 des Tutorials auch erwähnt hatte. IDropSource:QueryInterface hatte in der DragDrop5 noch die Deklaration "iid as IID Ptr" drin, während es in allen anderen Versionen der DragDropSource schon auf "iid as REFIID" geändert war. Da Drag in allen vorherigen Steps funktioniert hat, musste man nur mit WinMerge die Steps vergleichen um den Fehler zu sehen. Ich gehe aber jetzt hin und gleiche alle Steps untereinander mit WinMerge nochmal an, damit da wirklich nur die Unterschiede auftauchen. Das macht dann auch deutlicher, wie die Steps aufeinander aufbauen. Ich war da zwar ziemlich, aber nicht zu 100% konsequent, da ich das Tutorial als Abfallprodukt zu einem eigenen Projekt geschrieben habe. |
Hallo stephanbrunker!
Vielen Dank für Ihre Bemühungen! Nun, wenn es funktioniert, kann ich zum Lesen des Lehrbuches vorgehen. Und obwohl ich nicht weiß, an allen deutschen, ich denke, mit Hilfe von Google kann ich verstehen. _________________ http://free-basic.ru/ - Russian FreeBasic site |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|