| |
|
|
| pas-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))
imprimer loadfile$(,)
waitinput
end
proc wproc(Wnd&, Msg&, Wparam&, Lparam&)
callwindowproc(_owp&,Wnd&, Msg&, Wparam&, Lparam&)
endproc
qui Source zeigt (glaube ist mais un altes Problem!) cela LoadFile$ pas den gewünschten Wert zurückgibt.
je veux ici pas sur dem Problem rumhacken mais es simple nochmals ansprechen. je denke avec ChooseDir verhält es sich ähnlich. |
|
|
| |
|
|
|
RGH | si on ins Profan-interne Messagehandlich eingreift, etwa par den Fastmode ou bien mittels eines Umbiegens qui Windows-Prozeduren, darf on sich pas wundern, si le vordefinierten Dialoge pas plus comment gewünscht marcher, là vous sur cela Profan-interne Messagehandling angewiesen sommes.
Salut 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 | si on sich mais tzrotzdem cela écrivons eigener Dialoge ersparen veux, peux on oui avant dem Aufruf de LoadFile$ qui ursprüngliche Windows-Procédure (findet sich exakt trop diesem Zweck dans &WinProc) einsetzen et direct après wieder sur qui eigene commuter, etwa so:
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
Paramètres WND&, MSG&, WPARAM&, LPARAM&
call(__cf2&,_OWP&,WND&, MSG&, WPARAM&, LPARAM&)
endproc
Proc WLoadFile
Paramètres titel$, filtre$
call(__cf1&,%HWND,-4,&winproc)
var erg$ = LoadFile$(titel$, filtre$)
call(__cf1&,%HWND,-4,MyWProc&)
return erg$
ENDPROC
Hauptprogramm
-------------
CLS
MyWProc& = PROCADDR(WPROC,4)
VAR _OWP&=call(__cf1&, %HWND, -4,MyWProc&)
PRINT WLoadFile(,)
WAITINPUT
call(__cf1&,%HWND,-4,&winproc)
FIN
ah oui: avant dem Fin doit qui Original-Procédure aussi encore eingewsetzt volonté, là es sonst beim Programmende zum Absturz venons peux.
Salut 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 un. on muss alors pour chaque Contrôle welches on SubClasst avant dem Aufruf qui vordefinierten Dialoge qui originalWinProzedur wiederherstellen - cela deckt sich aussi avec meinen Erfahrungen.
je trouve un Hinweis dans qui Hilfedatei chez den Vordefinierten Dialogen et chez ProcAddr ist angebracht et peux viele Verzweiflungen im Vorraus verhindern. |
|
|
| |
|
|
|
RGH | oui, je sollte es dans qui Aider à passender Stelle erwähnen. qui geschickteste Possibilité wäre sûrement, aucun vordefinierten Dialoge dans solchen Programmen trop verwenden. qui qui Windowsprozedur selbst écrit, schafft es sûrement aussi, qui Dialoge selbst trop écrivons. ;)
Salut 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
oui, je sollte es dans qui Aider à passender Stelle erwähnen. qui geschickteste Possibilité wäre sûrement, aucun vordefinierten Dialoge dans solchen Programmen trop verwenden. qui qui Windowsprozedur selbst écrit, schafft es sûrement aussi, qui Dialoge selbst trop écrivons. ;)
Salut Roland
bof und dir réellement doch et avec ca eleganter - besonders si on so fainéant ist comment je es suis!
Um es kurz trop veranschaulichen - je beschäftige simple qui gleiche Exe avec neuem Prozess pour qui nötige devoir...
//seulement zur Veranschaulichung!
include usermessages.pcu = um.
include pipe.pcu = pipe.
include scrollarea.inc
si %parcount
sélectionner 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))
imprimer 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$
um.add 7788
tandis que pipe.get(pipe&)<>done
waitinput
Wend
um.sub 7788
sleep 100
pipe.pop pipe&
var result$:=pipe.pop(pipe&)
pipe.close pipe&
enablewindow hwnd::window&,1
setactivewindow(hwnd::window&)
return result$
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 result$:=loadfile$(desc$,mask$)
pipe.push pipe&,done
pipe.push pipe&,result$
pipe.close pipe&
sendmessage(hwnd&,7788,0,0)
end
endproc
|
|
|
| |
|
|
|
Frank Abbing |
on muss alors pour chaque Contrôle welches on SubClasst avant dem Aufruf qui vordefinierten Dialoge qui originalWinProzedur wiederherstellen - cela deckt sich aussi avec meinen Erfahrungen.
mais pas avec meinen. là donnais es seulement avec dem Hauptfenster ab et à Probleme, nie mais avec anderen Controls. quoi oui aussi logisch ist, là sich qui qui Fastmode seulement sur %hwnd bezieht. |
|
|
| |
|
|
|
RGH | on a ici deux Tatbestände vorliegen, qui direct dans XProfan intervenir: qui Fastmode et qui Umdefinierung qui Windowsprozeduren.
oui c'est ca pris bezieht sich qui Fastmode seulement sur cela XProfan-interne Messagehandling, qui par cette weitgehend abgeschaltet wird. cela peux (doit mais pas dans chaque le cas) Auswirkungen sur qui vordefinierten Dialoge avons.
cela Zweite sommes qui Windowsroutinen. en hat XProfan 4 Strück: Hauptfenster (&WinProc), Hauptfenster im Dialogstil (&WinDProc), Dialogfenster avec @Créer(Dialog (&DlgProc) et la fenêtre avec @Créer(Fenêtre (&DlgWProc). qui vordefinierten Dialoge avons comme Elternfenster toujours cela Hauptfenster, si es car existiert, ou bien simple 0.
comment De toute façon: qui am offenen Herzen de XProfan operiert, doit avec cela le calcul, den une ou bien anderen Bypass poser trop doit. ;) |
|
|
| 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 Abbingon muss alors pour chaque Contrôle welches on SubClasst avant dem Aufruf qui vordefinierten Dialoge qui originalWinProzedur wiederherstellen - cela deckt sich aussi avec meinen Erfahrungen. mais pas avec meinen. là donnais es seulement avec dem Hauptfenster ab et à Probleme, nie mais avec anderen Controls. quoi oui aussi logisch ist, là sich qui qui Fastmode seulement sur %hwnd bezieht.
Na ensuite exposition Dir la fois que voici à Frank, je denke cela peux Votre attitude changement:
{$cleq}
cls
var listbox&:=createlistbox(hwnd,,10,10,100,100)
var _owp&:=setwindowlong(listbox&,gwl_wndproc,procaddr(wproc,4))
imprimer loadfile$(,)
waitinput
end
proc wproc(Wnd&, Msg&, Wparam&, Lparam&)
callwindowproc(_owp&,Wnd&, Msg&, Wparam&, Lparam&)
endproc
ici wird qui listbox& gesubclasst - et Loadfile verhält sich dämlich comment erwartet... |
|
|
| |
|
|