| |
|
|
| No-XPSE:
DECLARE __cf1&,__cf2&
Def __cf1(2) !KERNEL32,GetProcAddress
Def __cf2(1) !KERNEL32,GetModuleHandleA
__cf1&=__cf1(__cf2(user32.dll),SetWindowLongA)
__cf2&=__cf1(__cf2(user32.dll),CallWindowProcA)
$DEFINE XPSE
CLS
VAR _OWP&=call(__cf1&,%HWND,-4,PROCADDR(WPROC,4))
PRINT LOADFILE$(,)
WAITINPUT
FIN
proc WPROC
PARAMETERS WND&, MSG&, WPARAM&, LPARAM&
call(__cf2&,_OWP&,WND&, MSG&, WPARAM&, LPARAM&)
ENDPROC
cls
var _owp&:=setwindowlong(hwnd,gwl_wndproc,procaddr(wproc,4))
imprimir loadfile$(,)
waitinput
end
proc wproc(Wnd&, Msg&, Wparam&, Lparam&)
callwindowproc(_owp&,Wnd&, Msg&, Wparam&, Lparam&)
ENDPROC
Der Source zeigt (glaube es aber una altes Problema!) el LoadFile$ no el deseado Valor zurückgibt.
Yo voluntad hier no en el Problema rumhacken pero simplemente nochmals ansprechen. Yo denke con ChooseDir verhält lo ähnlich. |
|
|
| |
|
|
|
RGH | Wenn uno en el Profano-interne Messagehandlich eingreift, etwa por el Fastmode oder mittels uno Umbiegens el Windows-Prozeduren, darf uno se no wundern, si la vordefinierten Dialoge no mehr como gewünscht trabajo, como ellos el Profano-interne Messagehandling angewiesen son.
Saludo Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 23.10.2006 ▲ |
|
|
|
|
RGH | Wenn uno se aber tzrotzdem el Carta eigener Dialoge ersparen voluntad, puede ser sí antes el Aufruf de LoadFile$ el ursprüngliche Windows-Procedimiento (findet se exakt a diesem Zweck en &WinProc) einsetzen y direkt danach otra vez en el propio umschalten, etwa así:
DECLARE __cf1&, __cf2&, MyWProc&
Def __cf1(2) !KERNEL32,GetProcAddress
Def __cf2(1) !KERNEL32,GetModuleHandleA
__cf1&=__cf1(__cf2(user32.dll),SetWindowLongA)
__cf2&=__cf1(__cf2(user32.dll),CallWindowProcA)
proc WPROC
Parámetros WND&, MSG&, WPARAM&, LPARAM&
call(__cf2&,_OWP&,WND&, MSG&, WPARAM&, LPARAM&)
ENDPROC
Proc WLoadFile
Parámetros titel$, filter$
call(__cf1&,%HWND,-4,&winproc)
var erg$ = LoadFile$(titel$, filter$)
call(__cf1&,%HWND,-4,MyWProc&)
volver erg$
ENDPROC
Hauptprogramm
-------------
CLS
MyWProc& = PROCADDR(WPROC,4)
VAR _OWP&=call(__cf1&, %HWND, -4,MyWProc&)
PRINT WLoadFile(,)
WAITINPUT
call(__cf1&,%HWND,-4,&winproc)
FIN
Ach sí: Vor el End muß el Original-Procedimiento auch todavía eingewsetzt voluntad, como lo sonst beim Programmende para Choque kommen kann.
Saludo Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 23.10.2006 ▲ |
|
|
|
|
| OK - leuchtet una. Man muss also para cada Control welches uno SubClasst antes el Aufruf el vordefinierten Dialoge el originalWinProzedur wiederherstellen - el deckt se auch con media Erfahrungen.
Yo finde una Referencia en el Hilfedatei en el Vordefinierten Dialogen y en ProcAddr es adecuado y kann viele Verzweiflungen en el Vorraus verhindern. |
|
|
| |
|
|
|
RGH | Sí, Yo debería lo en el Ayuda a passender Punto erwähnen. El geschickteste Möglichkeit wäre sicher, no vordefinierten Dialoge en solchen Programmen utilizarse. Wer el Windowsprozedur incluso schreibt, schafft lo sicher auch, el Dialoge incluso a escribir. ;)
Saludo Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 23.10.2006 ▲ |
|
|
|
|
| RGH
Sí, Yo debería lo en el Ayuda a passender Punto erwähnen. El geschickteste Möglichkeit wäre sicher, no vordefinierten Dialoge en solchen Programmen utilizarse. Wer el Windowsprozedur incluso schreibt, schafft lo sicher auch, el Dialoge incluso a escribir. ;)
Saludo Roland
Naja lo va tatsächlich todavía algo eleganter - besonders si uno así faul es Yo lo bin!
Um lo kurz a veranschaulichen - Yo beschäftige simplemente el gleiche Exe con neuem Prozess para el nötige Tarea...
//sólo a Veranschaulichung!
include usermessages.pcu = en.
include pipe.pcu = pipe.
include scrollarea.inc
if %parcount
seleccionar par$(1)
caseof loadfile
app.loadfile
caseof browsefolder
app.browseForFolder
otherwise
end
endselect
endif
var hwnd:=new(ScrollArea,0,(%maxx/2-305),(%maxy/2-300),610,430,610-18,600,sa_complete | SA_DESKTOPISDIALOG - SA_MINIMIZEBOX,apptitle)
var _owp&:=setwindowlong(hwnd,gwl_wndproc,procaddr(wproc,4))
imprimir hwnd.loadfile$(,)
waitinput
end
proc wproc(Wnd&, Msg&, Wparam&, Lparam&)
callwindowproc(_owp&,Wnd&, Msg&, Wparam&, Lparam&)
ENDPROC
proc hwnd.loadfile(desc$,mask$)
enablewindow hwnd::window&,0
var sid$:=str$(gettickcount)
var pipe&:=pipe.create(sid$)
pipe.push pipe&,desc$
pipe.push pipe&,mask$
pipe.push pipe&,str$(%hwnd)
shell par$(0)+ loadfile +sid$
en.add 7788
mientras que pipe.get(pipe&)<>done
waitinput
wend
en.sub 7788
sleep 100
pipe.pop pipe&
var resultado$:=pipe.pop(pipe&)
pipe.close pipe&
enablewindow hwnd::window&,1
setactivewindow(hwnd::window&)
volver resultado$
ENDPROC
proc app.loadfile
var sid$:=par$(2)
var pipe&:=pipe.create(sid$)
var desc$:=pipe.pop(pipe&)
var mask$:=pipe.pop(pipe&)
var hwnd&:=val(pipe.pop(pipe&))
var resultado$:=loadfile$(desc$,mask$)
pipe.push pipe&,done
pipe.push pipe&,resultado$
pipe.close pipe&
sendmessage(hwnd&,7788,0,0)
end
ENDPROC
|
|
|
| |
|
|
|
Frank Abbing |
Man muss also para cada Control welches uno SubClasst antes el Aufruf el vordefinierten Dialoge el originalWinProzedur wiederherstellen - el deckt se auch con media Erfahrungen.
Aber no con media. Dort gab lo sólo el Ventana principal de y a Problemas, nie aber con otro Controls. Was en efecto logisch es, como se el el Fastmode sólo en %hwnd bezieht. |
|
|
| |
|
|
|
RGH | Wir haben hier zwei Tatbestände vorliegen, el direkt en XProfan eingreifen: Der Fastmode y el Umdefinierung el Windowsprozeduren.
Exactamente genommen bezieht se el Fastmode sólo el XProfan-interne Messagehandling, daß por esta weitgehend abgeschaltet se. Das kann (muß pero no en cada Fall) Auswirkungen en el vordefinierten Dialoge haben.
Das Zweite son el Windowsroutinen. Davon ha XProfan 4 Strück: Ventana principal (&WinProc), Ventana principal en el Dialogstil (&WinDProc), Dialogfenster con @Crear(Diálogo (&DlgProc) y Ventana con @Crear(Ventana (&DlgWProc). El vordefinierten Dialoge haben como Elternfenster siempre la ventana principal, si porque existiert, oder simplemente 0.
Como De todos modos: Wer al offenen Herzen de XProfan operiert, muß así rechnen, el una oder otro Bypass legen tener. ;) |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 23.10.2006 ▲ |
|
|
|
|
| Frank Abbing
Frank AbbingMan muss also para cada Control welches uno SubClasst antes el Aufruf el vordefinierten Dialoge el originalWinProzedur wiederherstellen - el deckt se auch con media Erfahrungen. Aber no con media. Dort gab lo sólo el Ventana principal de y a Problemas, nie aber con otro Controls. Was en efecto logisch es, como se el el Fastmode sólo en %hwnd bezieht.
Na entonces mostrar Dir veces que aquí a Franco, Yo denke el kann Su Meinung ändern:
{$cleq}
cls
var listbox&:=createlistbox(hwnd,,10,10,100,100)
var _owp&:=setwindowlong(listbox&,gwl_wndproc,procaddr(wproc,4))
imprimir loadfile$(,)
waitinput
end
proc wproc(Wnd&, Msg&, Wparam&, Lparam&)
callwindowproc(_owp&,Wnd&, Msg&, Wparam&, Lparam&)
ENDPROC
Hier se el listbox& gesubclasst - y Loadfile verhält se dämlich como esperado... |
|
|
| |
|
|