xbpfileDialog Fenstergröße

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

xbpfileDialog Fenstergröße

Beitrag von Koverhage »

Die Bildschirme/Auflösungen werden immer größer, xbpFileDialog hat
aber eine Standardgröße, die dann sehr klein ist.
Es ist mühsam, jedes Mal das Fenster zu vergrößern.
Leider habe ich nichts gefunden, wie ich die Größe vorgeben kann.
Hat jemand einen Tipp für mich ?
Gruß
Klaus
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: xbpfileDialog Fenstergröße

Beitrag von AUGE_OHR »

Koverhage hat geschrieben:xbpFileDialog hat aber eine Standardgröße, die dann sehr klein ist.
Es ist mühsam, jedes Mal das Fenster zu vergrößern.
xbpFileDialog() ist ein Windows Control aus COMDLG32.DLL welche die API Function GetOpenFileNameA() mit oXbp:open() aufruft.

wenn du das Handle, angenommen nHwnd, von dem Windows Control hast könnte man so vorgehen
http://msdn.microsoft.com/en-us/library ... 85%29.aspx

Code: Alles auswählen

// ot4xb Syntax USER32.DLL
   @user32:ShowWindow( nHwnd , SW_MAXIMIZE ) // maximize the window
wenn du nur eine bestimmte Grösse setzten willst kann du es mit SendMessageA() versuchen

Code: Alles auswählen

   @user32:SendMessageA( nHwnd,WM_SIZE,x,y)
Nachtrag : em, äh ... XbpFileDialog() hat kein o:getHWND() :?:

man müsste mit FindWindowA() zunächst das Fenster finden, was nicht in der Taskliste ist.
dieser Code "müsste" funktionieren ...

Code: Alles auswählen

   lRet  := DllCall("User32.dll", DLL_STDCALL, "FindWindowA", "#32770"+Chr(0), "Öffnen"+Chr(0))
   IF nHwnd > 0
      TONE(1234)
und das ganze müsste im Thread laufen ...
gruss by OHR
Jimmy
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: xbpfileDialog Fenstergröße

Beitrag von Koverhage »

Habe gelesen, das es eine Resize Slot gibt, d.h. erst Anzeigen und dann die Größe ändern.
Das ist mir zu aufwändig, zumal (mindestens bei WIN 7) die letzte Einstellung beim nächsten Aufruf wieder gilt.
/Also gibt es in WIN vermutlich in der Registry was, damit man die Dialoggröße setzen kann).
Gruß
Klaus
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: xbpfileDialog Fenstergröße

Beitrag von AUGE_OHR »

Koverhage hat geschrieben:Habe gelesen, das es eine Resize Slot gibt, d.h. erst Anzeigen und dann die Größe ändern.
hast du einen Link dazu ?
es gibt nur die OFNHookProc / OFNHookProcOldStyle Callback Function die durch den OFN_ENABLEHOOK Flag aktiviert sein muss.

das der OFN_ENABLESIZING Flag bei XbpFileDialog() gesetzt ist sieht man ja am "Gripper" ( rechts unten )
innerhalb der API Function GetOpenFileName() ist ja ein ListView wie beim Explorer.
ich habe nun gelesen*** das man den Font des ListView ändern könnte was wohl ein "resize" auslösen würde ...
***http://software.intel.com/en-us/forums/topic/273587

aus Xbase++ musst du erst mal das Handle des GetOpenFileName() Dialog haben um an das ListView zu kommen.
FileDlg_Oeffnen.PNG
FileDlg_Oeffnen.PNG (66.97 KiB) 4432 mal betrachtet
Koverhage hat geschrieben:Das ist mir zu aufwändig, zumal (mindestens bei WIN 7) die letzte Einstellung beim nächsten Aufruf wieder gilt.
/Also gibt es in WIN vermutlich in der Registry was, damit man die Dialoggröße setzen kann).
wenn es den gäbe würde es ja auch beim 1st Mal klappen ;)

es gibt den OFN_RESTORESIZE Flag in der OPENFILENAME structure http://msdn.microsoft.com/en-us/library ... 85%29.aspx
der sorgt nun dafür das beim WM_SHOWWINDOW Event die bei WM_DESTROY "gesicherte" Grösse wiederhergestellt wird.
auch den View ( Ansicht ) oder Sortierung des ListView kann man wiederherstellen.

ähnliches gilt doch auch für das angezeigte Verzeichnis wenn du nichts angegeben hast.
gruss by OHR
Jimmy
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: xbpfileDialog Fenstergröße

Beitrag von Koverhage »

hast du einen Link dazu ?
Da es mir zu aufwendig erschien habe ich mir den nicht gespeichert, ich glaube der Suchbegriff war custom filedialog
Gruß
Klaus
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: xbpfileDialog Fenstergröße

Beitrag von AUGE_OHR »

Koverhage hat geschrieben:
hast du einen Link dazu ?
Da es mir zu aufwendig erschien habe ich mir den nicht gespeichert, ich glaube der Suchbegriff war custom filedialog
schade.
hier noch mal ein Demo von Pablo wie er mit der OpenFileName Structure umgeht.
OPENFILENAME.zip
(1.39 KiB) 259-mal heruntergeladen
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: xbpfileDialog Fenstergröße

Beitrag von AUGE_OHR »

AUGE_OHR hat geschrieben:dieser Code "müsste" funktionieren ...

Code: Alles auswählen

   lRet  := DllCall("User32.dll", DLL_STDCALL, "FindWindowA", "#32770"+Chr(0), "Öffnen"+Chr(0)) 
und das ganze müsste im Thread laufen ...
ja ja ... deutsche Umlaute und Windows OS() ...

Code: Alles auswählen

   nHwnd := DllCall("User32.dll", DLL_STDCALL, "FindWindowA", "#32770"+Chr(0),;
                                   ConvToAnsiCP("Öffnen")+Chr(0))
so funktioniert es !

wie schon gesagt muss man den Code in einem Thread laufen lassen was so aussehen könnte

Code: Alles auswählen

#include "Xbp.ch"
#include "Appevent.ch"
#include "common.ch"
#include "DLL.ch"
#define SW_MAXIMIZE           3
#pragma library("XppUi2")

PROCEDURE Main
LOCAL nEvent, mp1, mp2, oXbp
LOCAL oMLE, oFileDlg
#IFDEF UseFunc
LOCAL oThread := Thread():new()
#ENDIF

   SetAppWindow():SetPos({0,0})
   SetColor("N/W")
   CLS

#IFDEF UseFunc
   oFileDlg   := XbpFileDialog():new()
#ELSE
   oFileDlg   := MyFileDlg():new()
#ENDIF
   oFileDlg:create(SetAppWindow())

   // MLE erzeugen
   oMLE       := XbpMLE():new():create( ,, {50,50}, {550,300} )
   oMLE:cargo := ""

#IFDEF UseFunc
   oThread:setInterval(100)
   oThread:start( "ShowBig", oThread )
#ENDIF

   oFileDlg:Open()

   // Event loop = Programmsteuerung
   nEvent := 0
   DO WHILE nEvent <> xbeP_Close
      nEvent := AppEvent( @mp1, @mp2, @oXbp )
      DO CASE
         CASE nEvent = xbeP_Keyboard .and. mp1 = xbeK_ALT_F4
            EXIT
      OTHERWISE
         oXbp:HandleEvent( nEvent, mp1, mp2 )
      ENDCASE
   ENDDO

#IFDEF UseFunc
   IF NIL <> oThread
      oThread:setInterval(NIL)
      oThread := NIL
   ENDIF
#ENDIF
RETURN

PROCEDURE ShowBig(oThread)
LOCAL nHwnd := 0

   nHwnd := DllCall("User32.dll", DLL_STDCALL, "FindWindowA", "#32770"+Chr(0),;
                          ConvToAnsiCP("Öffnen")+Chr(0))
   IF nHwnd > 0
   * http://msdn.microsoft.com/en-us/library/windows/desktop/ms633548%28v=vs.85%29.aspx
       DllCall("User32.DLL", DLL_STDCALL,"ShowWindow",nHwnd, SW_MAXIMIZE )
       TONE(1234)
       oThread:setInterval(NIL)
       oThread := NIL
   ENDIF
RETURN
diese Code mit /DUseFunc compilieren ... an der DXE CLASS Version arbeite ich noch

denn ...
Ansicht änderbar z.b. auf LVS_REPORT festlegen
die Schrift / Icons sind immer noch zu klein
Sortierung ...

da muss man also noch an das Listview ran aber das ist eine andere Geschichte.

Nachtrag : #include / #define / #pragma
Zuletzt geändert von AUGE_OHR am Mi, 16. Okt 2013 6:46, insgesamt 1-mal geändert.
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: xbpfileDialog Fenstergröße

Beitrag von AUGE_OHR »

hi,

unter Win 8 ( Vista / Win 7 ? ) scheint PDR 4728 wieder mal aufzutreten :(
http://www.alaska-software.com/scripts/ ... PDRID=4728

wenn man das Demo c:\ALASKA\XPPW32\SOURCE\samples\activex\acrobat\main.prg laufen lässt fehlt links "my Places" weil o:center := .T. gesetzt wurde.

wenn man die Zeile 232

Code: Alles auswählen

231    oDlg := XbpFileDialog():new( AppDesktop() )
232*   oDlg:center       := .T.
auskommentiert wird auch links unter Win 8 "my Places" wieder angezeigt.
gruss by OHR
Jimmy
Antworten