Français
Forum

GetSaveFileName et OFNHookProc Problem

 

Georg
Hovenbitzer
allô zusammen,

je comprends la fois wieder Windows pas
qui Code unten funktioniert, seulement si je per .Flag OFN_ENABLEHOOK einschalte wird cela la fenêtre pas plus im Explorer Style angezeigt. alors es manquer à gauche qui grand Buttons. Wobei es le son win32.hlp so aller soll.
Testen peux on ca, si on im Code sous .Flag& cela $20 löscht. qui HookProc wird aufgerufen si on une Dossier auswählt qui vorhanden ist et OK drückt.

encore une Zusatzfrage:
j'ai den Code la fois so geändert, dass un Dialog dans qui HookProc ouvert wird.
qui Schriftart dans qui Messagebox et dans dem Dialog sommes unterschiedlich, comment bekomme Je l' Dialog dans qui gleichen Schrift comment qui Messagebox. avec SetDialogfont 0 habe je es déjà probiert, bringt mais rien.
KompilierenMarqueSéparation
Def GetSaveFileName(1) !"COMDLG32.DLL","GetSaveFileNameA"
Def Make256String(1) ((@$(1) + @Chr$(0)) + @Space$(256 - @Len(@$(1))))
Struct tagOFN = lStructSize&,
hWndOwner&,
hInstance&,
lpstrFilter&,
lpstrCustomFilter&,
nMaxCustFilter&,
nFilterIndex&,
lpstrFile&,
nMaxFile&,
lpstrFileTitle&,
nMaxFileTitle&,
lpstrInitialDir&,
lpstrTitle&,
Flags&,
nFileOffset%,
nFileExtension%,
lpstrDefExt&,
lCustData&,
lpfnHook&,
lpTemplateName&
Declare ofn#
Dim ofn#,tagOFN
Struct _Rect = Left&,
Top&,
Right&,
Bottom&
Declare Rect#
Dim Rect#,_Rect

Proc SaveDateiHook

    Parameters hdlg&,uMsg&,wParam&,lParam&
    Declare Parent&
    Clear Rect#

    If uMsg& = 49265

        If @FileExists(@String$(ofn#.lpstrFile&,0)) = 1

            Parent& = @External("USER32","GetParent",hdlg&)
            @External("USER32","GetWindowRect",Parent&,Rect#)
            Declare Fenster&
            Declare Weiter&
            Declare Neu&
            Declare Abbruch&
            Fenster& = @Create("Dialog",Parent&,"Datei existiert",10,10,300,150)
            Weiter& = @Create("DefButton",Fenster&,"Anhängen",20,60,120,30)
            Neu& = @Create("Button",Fenster&,"Überschreiben",150,60,120,30)
            @MessageBox("Left = "+@Str$(Rect#.Left&)+"
            "+"Top = "+@Str$(Rect#.Top&)+"
            "+"Right = "+@Str$(Rect#.Right&)+"
            "+"Bottom = "+@Str$(Rect#.Bottom&)+"
            "+"File = "+@String$(ofn#.lpstrFile&,0),"Info",1)
            Return 1

        EndIf

    EndIf

    Return 0

EndProc

Proc SaveDatei

    Parameters hWnd&,Titel$,FileSpec$,InitialDir$,Filter$,DefExt$
    Declare CustomFilter$
    Declare FileTitle$
    Declare rCode&
    Declare Auswahl$
    Clear ofn#
    Titel$ = Make256String(Titel$)
    FileSpec$ = Make256String(FileSpec$)
    InitialDir$ = Make256String(InitialDir$)
    Filter$ = @Translate$(Filter$,"|",@Chr$(0)) + @Chr$(0)
    Filter$ = Make256String(Filter$)
    DefExt$ = Make256String(DefExt$)

    With ofn#

        .lStructSize&       = @SizeOf(ofn#)
        .hWndOwner&         = hWnd&
        .hInstance&         = %hInstance
        .lpstrFilter&       = @Addr(Filter$)
        .lpstrCustomFilter& = @Addr(CustomFilter$)
        .nMaxCustFilter&    = 0
        .nFilterIndex&      = 1
        .lpstrFile&         = @Addr(FileSpec$)
        .nMaxFile&          = 256
        .lpstrFileTitle&    = @Addr(FileTitle$)
        .nMaxFileTitle&     = 256
        .lpstrInitialDir&   = @Addr(InitialDir$)
        .lpstrTitle&        = @Addr(Titel$)
        .Flags&             = ($4 | $20 | $80000 | $800)
        OFN_HIDEREADONLY $4
        OFN_ENABLEHOOK $20
        OFN_PATHMUSTEXIST $800
        OFN_EXPLORER $80000
        .lpstrDefExt&       = @Addr(DefExt$)
        .lpfnHook&					= @ProcAddr(SaveDateiHook,4)

    EndWith

    rCode& = GetSaveFileName(ofn#)

    If rCode& <> 0

        Auswahl$ = @String$(ofn#.lpstrFile&,0)

    Else

        Auswahl$ = ""

    EndIf

    Dispose ofn#
    Return Auswahl$

EndProc

Window 100,100-800,600
Print SaveDatei(%hWnd,"Datei speichern unter:","DLQueue",$ProgDir,"Download File (*.dat)|*.dat|Textfile (*.txt)|*.txt","*.dat")
WaitInput
Dispose ofn#
../function-references/XProfan/dispose/'>Dispose Rect#
Fin
 
Viele Grüsse, Georg Hovenbitzer(Windows XP Pro, XProfan 11.2, Profan2Cpp 1.6a)
02.06.2006  
 



je hatte cela Ganze ici  [...]  quelque chose anders gelöst, mais je crois mich trop erinnern cela dass Problem cela Selbe était.
 
02.06.2006  
 



je peux mir présenter cela WinXP mittels eines eigenen Hooks cet bar erzeugt, quoi ensuite pas geschieht si on une owner-Hook défini.
 
02.06.2006  
 




Georg
Hovenbitzer
allô iF,

dein Demo kenne je très bien
je klaue doch volontiers

mais chez dir wird qui Explorer Sytle aussi pas angezeigt

la fois qui Auszug aus qui Win32.hlp:

[quote-part:d1a14d6a62]
By default, Windows 95 and Windows NT version 4.0 display a new version of le Save dialog box that provides user-interface features that sont similar to le Windows Explorer. You can provide à OFNHookProc hook procedure for à Explorer-style Save dialog box. To enable le hook procedure, set le OFN_EXPLORER and OFN_ENABLEHOOK flags dans le Flags member of le OPENFILENAME structure and specify le address of le hook procedure dans le lpfnHook member.
[/quote-part:d1a14d6a62]
 
Viele Grüsse, Georg Hovenbitzer(Windows XP Pro, XProfan 11.2, Profan2Cpp 1.6a)
02.06.2006  
 



Ist imho doch aussi richtig comment cela Win là reagiert. là steht oui schliesslich pas cela OFN_EXPLORER pour qui bar zuständig ist. Pour mich ist es schlüssig cela Windows là den default LoadSaveDialog anzeigt là arrêt une eigene HookProc pour cet Extras sorgen soll.

j'ai keinen conseil comment on beides miteinander vereinen peux.
 
02.06.2006  
 




Georg
Hovenbitzer
allô iF,

quoi ist car ensuite qui Explorer Style ?!
là beide Varianten sich seulement par qui bar à qui linken page unterscheiden.
 
Viele Grüsse, Georg Hovenbitzer(Windows XP Pro, XProfan 11.2, Profan2Cpp 1.6a)
02.06.2006  
 




Uwe
''Pascal''
Niemeier
allô gens!

depuis Win2000 wurde qui OpenFileName-Struktur um 3 optionale paramètre ergänzt (siehe MSDN). Wird qui Grösse qui Struktur entsprechend erweitert (qui trois LongInts am Ende doit zéro son) sollte es marcher.
ici une Demo, um une Dialog per Hook dans qui Miniatur-Ansicht trop ouvrir (zwecks Bild-sélection):
KompilierenMarqueSéparation
!
window 10,10-700,500
 $H Messages.ph
 $H Windows.ph

proc OpenFileHook-------------------------------OpenFileHook----------------------------

    parameters dlg&,msg&,wparam&,lparam&
    case Status%:return 1-----Ansicht muss nur einmal angepasst werden
    casenot msg&=~WM_NOTIFY:return 1

    if long(lparam&,8)=-603---Bei  Init existieren DefView und LV noch nicht!

        Status%=1
        DefView&=~FindWindowEx(~GetParent(dlg&),0,"SHELLDLL_DefView","")
        sendmessage(DefView&,~WM_COMMAND,$702D,0)--Undokumentierte Message

    endif

    return 1
    endproc---------------------------------------------------------------------------------

    proc LoadPicDialog------------------------------LoadPicDialog---------------------------

        parameters Pfad$,Titel$,Name$
        declare ofn#,Result$,Result&
        declare DefView&,Status%------Variablen für Hook
        Name$=Name$+"z*.bmp;*.jpe;*.jpeg;*.jpg;*.gifzz"--Filter (bei Bedarf anpassen)
        dim ofn#,88+256---------------Struktur (Win2000/NT/XP) + Puffer
        clear ofn#
        long ofn#,0=88----------------Grösse Struktur für GetOpenFileName (76 für Win9x)
        long ofn#,4=%hwnd-------------übergeordnetes Fenster
        long ofn#,12=addr(Name$)------Filter/Typ
        long ofn#,28=ofn#+88----------Beginn Puffer
        long ofn#,32=255--------------Puffergrösse
        long ofn#,44=addr(Pfad$)------Anfangspfad
        long ofn#,48=addr(Titel$)-----Titel
        long ofn#,52=$880024----------Flags
        long ofn#,68=procaddr("OpenFileHook",4)
        Result&=external("COMDLG32","GetOpenFileNameA",ofn#)
        Result$=string$(ofn#,88)
        casenot Result&:Result$=""
        procaddr("OpenFileHook",-4)
        dispose ofn#
        return Result$
        endproc---------------------------------------------------------------------------------
        print LoadPicDialog("","Bitte Bild wählen","Bild")
        waitkey

HTH
Pascal
 
02.06.2006  
 



Es funktioniert.
 
02.06.2006  
 




Georg
Hovenbitzer
qui Pascal la fois wieder

Es funktioniert super

cela Ding à gauche nennt sich places bar et peux dans qui erweiterten variante avec 1 dans FlagsEx (dernier paramètre) aus- et 0 eingeschaltet volonté.
 
Viele Grüsse, Georg Hovenbitzer(Windows XP Pro, XProfan 11.2, Profan2Cpp 1.6a)
02.06.2006  
 




Georg
Hovenbitzer
allô zusammen,

mir fällt là im Code vom Pascal nochwas sur quoi je pas kannte.

Ist es erlaubt qui Variablen pour qui Hook Proc dans qui Hauptproc trop déclarer, so comment dans dem Beispiel vom Pascal ?
sous Profan klappt ca très bien, seulement es läßt sich per Profan2CPP pas traduire.
 
Viele Grüsse, Georg Hovenbitzer(Windows XP Pro, XProfan 11.2, Profan2Cpp 1.6a)
07.06.2006  
 




Sebastian
König
[quote-part:beab6f0e39]Ist es erlaubt qui Variablen pour qui Hook Proc dans qui Hauptproc trop déclarer, so comment dans dem Beispiel vom Pascal ?
sous Profan klappt ca très bien, seulement es läßt sich per Profan2CPP pas traduire.[/quote-part:beab6f0e39]
oui, dans (X)Profan klappt cela (malheureusement ). avec Profan2Cpp sollte es marcher, si Du dans den Übersetzungsoptionen Alle Variablen global déclarer aktivierst.

MfG

Sebastian
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
08.06.2006  
 



répondre


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

2.412 Views

Untitledvor 0 min.
Andreas Koch19.04.2012
liveFamilie28.03.2012

Themeninformationen



Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie