Español
Foro

GetSaveFileName y OFNHookProc Problema

 

Georg
Hovenbitzer
¡Hola zusammen,

Yo verstehe veces otra vez Windows no
Der Code unten funktioniert, sólo si yo por .Flag OFN_ENABLEHOOK einschalte se el Ventana no mehr en el Explorer Style adecuado. Also lo fehlen links el großen Buttons. Wobei lo laut win32.hlp así ir se.
Testen puede ser dies, si uno en el Code bajo .Flag& el $20 löscht. El HookProc se aufgerufen si uno una Expediente auswählt el disponible es y OK drückt.

Noch una Zusatzfrage:
Yo habe el código veces así geändert, que un Diálogo en el HookProc geöffnet se.
El Schriftart en el Messagebox y en el Diálogo son unterschiedlich, como bekomme Yo, el Diálogo en el gleichen Schrift como Messagebox. Mit SetDialogfont 0 Yo lo ya probiert, bringt aber nichts.
KompilierenMarcaSeparación
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/disponer/'>Disponer Rect#
End
 
Viele Grüsse, Georg Hovenbitzer(Windows XP Pro, XProfan 11.2, Profan2Cpp 1.6a)
02.06.2006  
 



Tuve el Ganze hier  [...]  algo anders gelöst, pero yo glaube mich a erinnern el dass Problema el Selbe war.
 
02.06.2006  
 



Puedo me vorstellen el WinXP mittels uno eigenen Hooks esta Bar producido, qué entonces no geschieht si uno una owner-Hook definiert.
 
02.06.2006  
 




Georg
Hovenbitzer
Hola si,

dein Demo saber Yo muy bien
Yo klaue doch gerne

Aber en dir se el Explorer Sytle auch no adecuado

Tiempo el Auszug de el Win32.hlp:

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



Ist imho doch auch correcto como el Win como reagiert. Dort es sí schliesslich no el OFN_EXPLORER para el Bar zuständig es. Für mich es schlüssig el Windows como el default LoadSaveDialog anzeigt como sólo una propio HookProc para esta Extras sorgen se.

Yo habe no Rat cómo beides miteinander vereinen kann.
 
02.06.2006  
 




Georg
Hovenbitzer
Hola si,

qué es porque entonces el Explorer Style ?!
Como beide Varianten se sólo por el Bar a el linken Página unterscheiden.
 
Viele Grüsse, Georg Hovenbitzer(Windows XP Pro, XProfan 11.2, Profan2Cpp 1.6a)
02.06.2006  
 




Uwe
''Pascal''
Niemeier
¡Hola Personas!

Seit Win2000 wurde el OpenFileName-Struktur en 3 optionale Parámetro ergänzt (siehe MSDN). Wird el Grösse el Struktur entsprechend erweitert (el drei LongInts al Ende necesario Null ser) debería lo klappen.
Hier una Demo, en una Diálogo por Hook en el Miniatur-Ansicht a abierto (zwecks Bild-Auswahl):
KompilierenMarcaSeparación
!
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  
 



Lo funktioniert.
 
02.06.2006  
 




Georg
Hovenbitzer
Der Pascal veces otra vez

Lo funktioniert klasse

Lo links nennt se places bar y kann en el avanzado Variante con 1 en FlagsEx (letzter Parámetro) de- y 0 eingeschaltet voluntad.
 
Viele Grüsse, Georg Hovenbitzer(Windows XP Pro, XProfan 11.2, Profan2Cpp 1.6a)
02.06.2006  
 




Georg
Hovenbitzer
¡Hola zusammen,

me fällt como en el Code vom Pascal nochwas en Yo no kannte.

¿Es erlaubt el Variables para el Hook Proc en el Hauptproc a deklarieren, como en el Ejemplo vom Pascal ?
Bajo Profano klappt dies muy bien, sólo lo läßt se por Profano2CPP no traducir.
 
Viele Grüsse, Georg Hovenbitzer(Windows XP Pro, XProfan 11.2, Profan2Cpp 1.6a)
07.06.2006  
 




Sebastian
König
[quote:beab6f0e39]¿Es erlaubt el Variables para el Hook Proc en el Hauptproc a deklarieren, como en el Ejemplo vom Pascal ?
Bajo Profano klappt dies muy bien, sólo lo läßt se por Profano2CPP no traducir.[/quote:beab6f0e39]
Sí, en (X)Profano klappt el (desafortunadamente ). Mit Profano2Cpp debería lo trabajo, si en el Übersetzungsoptionen Alle Variables global deklarieren aktivierst.

MfG

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



Respuesta


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

2.419 Views

Untitledvor 0 min.
Andreas Koch19.04.2012
liveFamilie28.03.2012

Themeninformationen



Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie