Fenstergröße unter Windows 7

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

KHKDampflok
UDF-Programmierer
UDF-Programmierer
Beiträge: 68
Registriert: Do, 14. Dez 2006 20:55
Wohnort: 22946 Trittau
Kontaktdaten:

Fenstergröße unter Windows 7

Beitrag von KHKDampflok »

Hallo Leute,

nach langer Zeit mal wieder ein neues Problem !!!

Ich habe mir einen neuen Rechner mit Windows 7 zugelegt. Der anfänglichen Euphorie folgte recht schnell die Ernüchterung. Bei meinem Programm (Eisenbahn-Triebfahrzeugs-Datenbank LOKLISTE) stimmen jetzt alle Fenstergrößen nicht mehr !!! Der äußere Rahmen kommt jetzt durch den hellblauen Windows 7-Rahmen dem inneren Rahmen XbpStatic() sehr nahe, bzw. überschreibt diesen sogar. Beim Anruf eines Warn- oder Informationsfenster mit MSGBOX oder CONFIRMBOX ist der X-Button oben rechts am Rand des Fensters ohne obere Abgrenzung (unschön anzusehen). Gib es dafür eine generelle Xbase++ - Lösung oder muß ich jetzt alle Fenster (ca.660 Stück) an Windows 7 anpassen. Bei den Info-Fenstern gibts sowieso m.W. keine Programmierlösung. Ich hasse MicroSoft !!!

MfG

Dipl.Ing. Karl-Heinz Kahl aus Trittau
Mit xbase habe ich ein Triebfahrzeugsarchiv "LOKLISTE" erstellt. Dieses Archiv enthält Daten aller Eisenbahntriebfahrzeuge vom "ADLER" bis zum ICE. Genaueres erfährt man unter www.lokliste.de, wo man auch eine kostenlose DEMO-Version herrunterladen kann !!!
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: Fenstergröße unter Windows 7

Beitrag von AUGE_OHR »

KHKDampflok hat geschrieben:... stimmen jetzt alle Fenstergrößen nicht mehr !!! Der äußere Rahmen kommt jetzt durch den hellblauen Windows 7-Rahmen dem inneren Rahmen XbpStatic() sehr nahe, bzw. überschreibt diesen sogar.
den "breiten" Rahmen nennt man "Borderpadding" zu deutsch "Rahmenfüllung".
wenn du im Forum mal suchst wirst du sehen das ich das schon seit der "beta" von Win 7 das Thema angesprochen habe.

grundsätzlich kann man mit "GetSystemMetrics" die Grösse feststellen

Code: Alles auswählen

// Defines used with the GetSystemMetrics()-API, see
// xbpGetSystemMetrics()

#define SM_CXDLGFRAME            7
#define SM_CYDLGFRAME            8
#define SM_CYMENU               15
#define SM_CYCAPTION             4
#define SM_CXPADDEDBORDER       92

FUNCTION xbpGetSystemMetrics( nValue )
RETURN DllCall( "USER32.DLL", DLL_STDCALL, "GetSystemMetrics", nValue )

Function GetTitleBarHeight()
RETURN (xbpGetSystemMetrics(SM_CYCAPTION))

Function GetMenubarHeight()
RETURN (xbpGetSystemMetrics(SM_CYMENU))

Function GetBorderHeight()
RETURN (xbpGetSystemMetrics(SM_CYDLGFRAME))

Function GetBorderWidth()
RETURN (xbpGetSystemMetrics(SM_CXDLGFRAME))

Function GetBorderPadding()
LOCAL nRet := 0
   IF OnOSVersion() > 5
      nRet := xbpGetSystemMetrics(SM_CXPADDEDBORDER)
   ENDIF
RETURN nRet
die Frage ist nur wie ändere ich meinen "gesamten" Code um es anzupassen ?

ich habe es "nur" in den o:resize Functionen, die ich für jedes "Fenster" habe, eingesetzt und korrigiere dort die Grössen.
gruss by OHR
Jimmy
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Fenstergröße unter Windows 7

Beitrag von Martin Altmann »

Moin Karl-Heinz,
Du musst leider alle Fenster anpassen - aber mache es dann bitte gleich richtig, damit Du zukünftig nicht wieder Probleme bekommst!
Schau Dir mal die Instanzvariable :clientSize an (XbpDialog)!!!
Die ist recht neu und damit setzt Du nicht mehr die Größe des Fensters, sondern der :drawingArea (also dem Bereich innerhalb des Rahmens)!
Das erleichtert Dir zukünftig vieles!

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Fenstergröße unter Windows 7

Beitrag von brandelh »

Hi,

genau wie Martin sagt, ist die einzige richtige Vorgehensweise die, dass man den inneren Bereich eines Fensters definiert den man selbt braucht
und der Rest vom Programm berechnet wird. Leider geht das erst mit der 1.90.355 (SP1) so, vorher hätte man das berechnen können, aber
unter Windows XP war der ja immer gleich (solange man nicht die Darstellung geändert hatte).

Aber neu ist das Thema nicht !

Ich habe mit Windows 98/NT 4.0 angefangen mit Xbase++ Programme zu schreiben (so wie alle ohne Rücksicht auf die Rahmenbreite).
Dann kam XP mit seinen RIESIGEN Rändern, die Umstellung auf "Windows-klassisch" behebt das zwar, aber niemand - außer mir - wollte die langweilige Anzeige ...

MsgBox() und andere Systemfenster müssten aber automatisch stimmen.

PS: es soll ja wahnsinnige geben, die den Office 2007 Look gut finden :roll:
Gruß
Hubert
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: Fenstergröße unter Windows 7

Beitrag von AUGE_OHR »

hi,

o:clientSize ist schon gut, aber es nützt dir bei einem o:resize ja nichts wenn man z.b. sein Programm auf die neue Bildschirm Grösse anpassen möchte.
hat der User dann auch noch die DPI Einstellung von 96 auf 144 ( = 150%) erhöht stimmt Pos / Size mit der Font Grösse nicht mehr ... deshalb ein o:resize.

p.s. ich baue meine Xbparts aus einem Array mit aPos=aSize={0,0} auf wobei auch der Dialog 0.0 ist.
erst nach dem ersten o:show() schicke ich ihn durch das o:resize was einen "Effekt" ergibt ( Stufen einstellbar )
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Fenstergröße unter Windows 7

Beitrag von brandelh »

Bei mir gibt es nur fixe Fenstergrößen ;-)
Gruß
Hubert
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: Fenstergröße unter Windows 7

Beitrag von AUGE_OHR »

brandelh hat geschrieben:Bei mir gibt es nur fixe Fenstergrößen ;-)
640x480 ;)

die meist "moderne" LCD haben nicht mehr das 4:3 Format sondern 1920x1024 oder 1680x1050 oder 1600x900 ...
gruss by OHR
Jimmy
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Fenstergröße unter Windows 7

Beitrag von Martin Altmann »

Jimmy,
die Aussage, bei einer anderen Schriftgröße würde das mit :clientSize nicht mehr stimmen, ist natürlich falsch.
Das kann man natürlich problemlos berücksichtigen - mache ich schließlich auch.
Da ich keine Luste habe, hier noch Mal alles dazu zu schreiben, verweise ich der Einfachheit halber mal auf den folgenden Thread :arrow: http://www.xbaseforum.de/viewtopic.php? ... 848#p13848 - sollte Dir ja bekannt vorkommen 8)
Anhand dessen einfach:
...
nZoomV := ( AppDesktopDPI() / 96 )
...
::xbpDialog:clientSize := { int( nZoomV * 170 ), int( nZoomV * 120 ) }

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
KHKDampflok
UDF-Programmierer
UDF-Programmierer
Beiträge: 68
Registriert: Do, 14. Dez 2006 20:55
Wohnort: 22946 Trittau
Kontaktdaten:

Re: Fenstergröße unter Windows 7

Beitrag von KHKDampflok »

Hallo Leute,

erstmal Danke für die Tipps. Das mit dem ClientSize scheint wohl für mich der richtige Weg zu sein, nur leider weiß ich wieder nicht, wie das angewendet wird. Ich schicke mal ein Standardfenster von mir. Vielleicht kann einer von Euch mal kurz abändern oder ergänzen, was für ClientSize notwendig ist ?

oSuch := DataDialog():new( oParent, oOwner,, aSize,, .F. )
oSuch:title := "Suchfunktion"
oSuch:icon := nIcon
oSuch:create()

drawingArea := oSuch:drawingArea // Anzeigebereich vom Dialog holen
drawingArea:setFontCompoundName( "8.Helv" )

oStatic := XbpStatic():new( drawingArea,,{5,5}, aStatic )
oStatic:caption := cSuchbegriff
oStatic:type := XBPSTATIC_TYPE_GROUPBOX
oStatic:create()

Im Voraus schon Vielen Dank sagt

Dipl.Ing. Karl-Heinz Kahl aus Trittau
Mit xbase habe ich ein Triebfahrzeugsarchiv "LOKLISTE" erstellt. Dieses Archiv enthält Daten aller Eisenbahntriebfahrzeuge vom "ADLER" bis zum ICE. Genaueres erfährt man unter www.lokliste.de, wo man auch eine kostenlose DEMO-Version herrunterladen kann !!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Fenstergröße unter Windows 7

Beitrag von brandelh »

Hi,

zunächst braucht man die 1.90.355 ... wenn man dann mit dem XppFD ein PRG erzeugt,
dann sieht man das Vorgehen von clientsize ...

Man darf selbst aSize nicht füllen, d.h. der Parameter wird nicht übergeben und auch intern nicht gesetzt.
Danach setzt man die ClientSize Variabel auf die gewünschten Werte.
Gruß
Hubert
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Fenstergröße unter Windows 7

Beitrag von Martin Altmann »

Moin Karl-Heinz,
an Deinem Beispiel:

Code: Alles auswählen

oSuch := DataDialog():new( oParent, oOwner,, ,, .F. )
 oSuch:clientSize := aSize
 oSuch:title := "Suchfunktion"
 oSuch:icon := nIcon
 oSuch:create()

 drawingArea := oSuch:drawingArea // Anzeigebereich vom Dialog holen
 drawingArea:setFontCompoundName( "8.Helv" )

 oStatic := XbpStatic():new( drawingArea,,{5,5}, aStatic )
 oStatic:caption := cSuchbegriff
 oStatic:type := XBPSTATIC_TYPE_GROUPBOX
 oStatic:create()
Also einfach den aSize-Parameter aus der new(,,,) entfernen, und dafür clientSize entsprechend setzen.
Achtung: Wenn Du das so einfach machst, ist der Bereich in Deinem Fenster, auf dem Du Text ausgibst, natürlich zu groß! Der innere Bereich ist ja dann so groß, wie es früher das gesamte Fenster war. Du musst also die Werte ein wenig verkleinern.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Fenstergröße unter Windows 7

Beitrag von Rolf Ramacher »

Hi KarlHeinz

kleiner Tipp noch von mir. Ich habe das bei mir so, daß ich die positionen der xbparts in einem Array drin habe. und dann mir plus + minus berechne.
hat den vorteil, wenn du die Maske veränderst , mußt du nur das Startarray entsprechend der Größe anpassen.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
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: Fenstergröße unter Windows 7

Beitrag von AUGE_OHR »

Martin Altmann hat geschrieben:die Aussage, bei einer anderen Schriftgröße würde das mit :clientSize nicht mehr stimmen, ist natürlich falsch.
Das kann man natürlich problemlos berücksichtigen - mache ich schließlich auch.
Da ich keine Luste habe, hier noch Mal alles dazu zu schreiben, verweise ich der Einfachheit halber mal auf den folgenden Thread :arrow: http://www.xbaseforum.de/viewtopic.php? ... 848#p13848 - sollte Dir ja bekannt vorkommen 8)
Anhand dessen einfach:
...
nZoomV := ( AppDesktopDPI() / 96 )
...
::xbpDialog:clientSize := { int( nZoomV * 170 ), int( nZoomV * 120 ) }
genau das ist nicht richtig "so" ... da "fehlt" noch was für "DPI-aware". ich "zitiere" hier mal aus der Ot4xb

Code: Alles auswählen

extern "C" HFONT OT4XB_API _create_font_(HDC hDC, LPSTR szFaceName, int iDeciPtHeight,int iDeciPtWidth, int iAttributes, BOOL fLogRes)
{
   FLOAT      cxDpi, cyDpi;
   HFONT      hFont;
   LOGFONT    lf;
   POINT      pt;
   TEXTMETRIC tm;

   SaveDC (hDC) ;
   SetGraphicsMode (hDC, GM_ADVANCED) ;
   ModifyWorldTransform (hDC, NULL, MWT_IDENTITY) ;
   SetViewportOrgEx (hDC, 0, 0, NULL) ;
   SetWindowOrgEx   (hDC, 0, 0, NULL) ;
   if (fLogRes)
   {
      cxDpi = (FLOAT) GetDeviceCaps (hDC, LOGPIXELSX) ;
      cyDpi = (FLOAT) GetDeviceCaps (hDC, LOGPIXELSY) ;
   }
   else
   {
      cxDpi = (FLOAT) (25.4 * GetDeviceCaps (hDC, HORZRES) / GetDeviceCaps(hDC, HORZSIZE)) ;
      cyDpi = (FLOAT) (25.4 * GetDeviceCaps (hDC, VERTRES) / GetDeviceCaps(hDC, VERTSIZE)) ;
   }
   pt.x = (int) (iDeciPtWidth  * cxDpi / 72) ;
   pt.y = (int) (iDeciPtHeight * cyDpi / 72) ;
   DPtoLP (hDC, &pt, 1) ;
   lf.lfHeight         = - (int) (fabs((FLOAT)pt.y) / 10.0 + 0.5) ;
   lf.lfWidth          = 0 ;
   lf.lfEscapement     = 0 ;
   lf.lfOrientation    = 0 ;
   lf.lfWeight         = (LONG) (iAttributes & 1 ? 700 : 0 ); // Bold
   lf.lfItalic         = (BYTE) (iAttributes & 2 ?   1 : 0 );
   lf.lfUnderline      = (BYTE) (iAttributes & 4 ?   1 : 0 );
   lf.lfStrikeOut      = (BYTE) (iAttributes & 8 ?   1 : 0 );
   lf.lfCharSet        = 0 ;
   lf.lfOutPrecision   = 0 ;
   lf.lfClipPrecision  = 0 ;
   lf.lfQuality        = 0 ;
   lf.lfPitchAndFamily = 0 ;

   _xstrcpy (lf.lfFaceName, szFaceName) ;

   hFont = CreateFontIndirect (&lf) ;

   if (iDeciPtWidth != 0)
   {
      hFont = (HFONT) SelectObject (hDC, hFont) ;
      GetTextMetrics (hDC, &tm) ;
      DeleteObject (SelectObject (hDC, hFont)) ;
      lf.lfWidth = (int) (tm.tmAveCharWidth * fabs((FLOAT)pt.x) / fabs((FLOAT)pt.y) + 0.5) ;
      hFont = CreateFontIndirect (&lf) ;
   }
   RestoreDC (hDC, -1) ;
   return hFont ;
siehst du was "fehlt" ?
gruss by OHR
Jimmy
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Fenstergröße unter Windows 7

Beitrag von Martin Altmann »

Jimmy,
bei den Varianten an Einstellungsmöglichkeiten (und Änderungen im Verhältnis zu 96 dpi) ist (nach meiner Erfahrung) der Unterschied zwischen horizontalem und vertikalem Verhältnis vernachlässigbar! Beide Angaben mit dem selben Faktor multipliziert passt - schließlich sehe ich das ja an meiner eigenen Anwendung - und den Text nahtlos untereinander setzen tut ja eh keiner, zwischen den einzelnen Zeilen ist immer ein wenig Abstand (wie ja auch hier bei dem Text).

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
KHKDampflok
UDF-Programmierer
UDF-Programmierer
Beiträge: 68
Registriert: Do, 14. Dez 2006 20:55
Wohnort: 22946 Trittau
Kontaktdaten:

Re: Fenstergröße unter Windows 7

Beitrag von KHKDampflok »

Hallo Leute, insbesondere Martin,

Danke fürs Beispiel, leuchtet ein und funktioniert !!!

Ein Schönheitsfehler ist aber noch dabei :

drawingArea := oSuch:drawingArea // Anzeigebereich vom Dialog holen
drawingArea:setFontCompoundName( "8.Helv" )

oStatic := XbpStatic():new( drawingArea,,{5,5}, aStatic )

Der Rahmen bzw. das Feld innerhalb des Rahmens positioniert sich ja nachwievor an der Gesamtfenstergröße, die ja mit drawingArea := oSuch:drawingArea bestimmt wird.
Wie kann ich das umgehen ?

MfG Karl-Heinz Kahl
Mit xbase habe ich ein Triebfahrzeugsarchiv "LOKLISTE" erstellt. Dieses Archiv enthält Daten aller Eisenbahntriebfahrzeuge vom "ADLER" bis zum ICE. Genaueres erfährt man unter www.lokliste.de, wo man auch eine kostenlose DEMO-Version herrunterladen kann !!!
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: Fenstergröße unter Windows 7

Beitrag von AUGE_OHR »

hi,

Frage : was ist dein jetzige Application Grösse und welche Bildschirm Auflösung hast du eingestellt ?

wenn du z.b. 1024x768 für beides verwendest und die Masken "bis zum Rand" gefüllt sind, welche nun unter Win7 durch "Borderpadding" nicht mehr "passt", dann musst du schon deine XbParts "verkleinern".

wenn nun deine Bildschirm Auflösung > Application ist kannst du das "Innen Mass", also o:DrawingArea:CurrentSize() unter XP, als "Innen Mass" unter Win7 nehmen.
damit hättest du dann unter Win7 1024+"Borderpadding" x 768+"Borderpadding".
gruss by OHR
Jimmy
KHKDampflok
UDF-Programmierer
UDF-Programmierer
Beiträge: 68
Registriert: Do, 14. Dez 2006 20:55
Wohnort: 22946 Trittau
Kontaktdaten:

Re: Fenstergröße unter Windows 7

Beitrag von KHKDampflok »

Hallo Leute,

mein Einwand vom 19.11.2011 (mit der Positionierung) war zwar falsch, da als drawingarea ja ::clientSize verwendet wird und somit keine Beeinträchtigung der Positionierung eintritt. Es funktioniert ja jetzt auch schon weitestgehend, aber ein Problem habe ich trotzdem noch :
Ich verwende überwiegend zur Fenstererzeugung die Superklasse DataDialog, die in den XBase++ Beispielen beschrieben ist. Mir gefällt dabei die Datensatzbehandlung so gut, da kaum noch Ergänzugsschritte notwendig waren. Ich habe zwar noch geringfügige Ergänzungen vorgenommen, die aber bestimmt nicht Problemrelevant sind.

Das Problem besteht darin, das in der DataDialog-Klasse die Max- bzw.Min-Buttons in der Taskleiste nicht deaktiviert werden können. Das hat mich bislang nicht sonderlich gestört, da nach Wiederherstellung das Fenster die gleiche Form wie vorher hatte. Da ich für die Verwendung von ::clientSize := aSize die Werte von aSize verkleinern mußte, werden jetzt aber nach Betätigung des Min- bzw. Max-Buttons bei der Wiederherstellung die Fenster mit abgeschnittenem Inhalt angezeigt, d.h. bei der Wiederherstellung wird mein aSize für die Gesamtfenstergröße verwendet. Wer weiß Rat ?

Wichtig wäre mir, zu wissen, ob ich

a. auch bei Verwendung der DataDialog-Superklasse eine Eleminierung der Max- bzw.Min-Buttons erreichen kann (Ich brauche diese Funktionen nicht, da ich nur mit festen Fenstergrößen arbeite) und
b. wenn ich die Buttons nicht elemenieren kann, eine ::clientSize-Fenstergröße wiederherstellen kann ?

In der XBase++ - Hilfe habe ich folgenden Hinweis gefunden :

Bei einem MDI Client Fenster wird der Pushbutton zum Maximieren des Fensters immer angezeigt, es sei denn, :titleBar ist auf .F. (falsch) gesetzt.

Hängt das mit dem o.g. Problem zusammen ?

MfG. Karl-Heinz Kahl aus Trittau
Mit xbase habe ich ein Triebfahrzeugsarchiv "LOKLISTE" erstellt. Dieses Archiv enthält Daten aller Eisenbahntriebfahrzeuge vom "ADLER" bis zum ICE. Genaueres erfährt man unter www.lokliste.de, wo man auch eine kostenlose DEMO-Version herrunterladen kann !!!
Dieter
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 237
Registriert: Do, 14. Aug 2008 14:59
Wohnort: Straelen
Hat sich bedankt: 2 Mal
Danksagung erhalten: 3 Mal

Re: Fenstergröße unter Windows 7

Beitrag von Dieter »

Hallo Karl-Heinz,
schau dir doch mal folgenden Link an http://www.xbaseforum.de/viewtopic.php? ... 096#p35653
Mit Hilfe dieses Beitrages habe ich die manchmal lästigen Min-Max-Buttons entfernen können.
Viele Grüße

Dieter

Was man nicht versteht, besitzt man nicht.
KHKDampflok
UDF-Programmierer
UDF-Programmierer
Beiträge: 68
Registriert: Do, 14. Dez 2006 20:55
Wohnort: 22946 Trittau
Kontaktdaten:

Re: Fenstergröße unter Windows 7

Beitrag von KHKDampflok »

Hallo Leute, insbesondere Dieter und Jimmy,

wohwwww.... seit Ihr gut. Schon lange habe ich mich mit der Unterdrückung der Min- und Max-Buttons beschäftigt, aber nie eine zufriedenstellende Lösung gefunden, aber durch Eure Hilfe ging das ganz einfach. Danke vielmals !!!

Jetzt habe ich nur noch ein ganz kleines Problem, bei dem Ihr mir vielleicht auch noch helfen könnt. Bei manchen Fenstern meiner LOKLISTE macht es Sinn, die Fenster verkleinern zu können, um darunter liegende Inhalte zu lesen. Stelle ich die alte Fenstergröße wieder her, erscheint bei der Superklasse DataDialog ein Fenster mit abgeschnittenem Inhalt. Das liegt m.E. daran, das bei der Wiederherstellung das Größenarray aSize für das ganze Fenster incl. Rahmen benutzt wird, bei der Erzeugung aber nur für oClient:clientSize. Bei Verwendung der XbpDialog-Klasse tritt der Fehler nicht auf !!!

Wer weiß Rat ?

Mfg Karl-Heinz Kahl aus Trittau
Mit xbase habe ich ein Triebfahrzeugsarchiv "LOKLISTE" erstellt. Dieses Archiv enthält Daten aller Eisenbahntriebfahrzeuge vom "ADLER" bis zum ICE. Genaueres erfährt man unter www.lokliste.de, wo man auch eine kostenlose DEMO-Version herrunterladen kann !!!
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: Fenstergröße unter Windows 7

Beitrag von AUGE_OHR »

KHKDampflok hat geschrieben:Bei manchen Fenstern meiner LOKLISTE macht es Sinn, die Fenster verkleinern zu können, um darunter liegende Inhalte zu lesen.
...
Wer weiß Rat ?
willst du "nur" lesen ?
dann mach doch das Fenster "transparent" dann kannst du das darunterliegende "lesen" :)

... ansonsten mal deine Code von o:resize zeigen.
gruss by OHR
Jimmy
KHKDampflok
UDF-Programmierer
UDF-Programmierer
Beiträge: 68
Registriert: Do, 14. Dez 2006 20:55
Wohnort: 22946 Trittau
Kontaktdaten:

Re: Fenstergröße unter Windows 7

Beitrag von KHKDampflok »

Hallo Jimmy,

ich verwende keinen o:resize Code. Ich meine die Ereignisse, die durch Min-Button, bzw. Wiederherstellungs-Button ausgelöst werden.

Kanst Du trotzdem helfen ?

Gruß Karl-Heinz aus Trittau
Mit xbase habe ich ein Triebfahrzeugsarchiv "LOKLISTE" erstellt. Dieses Archiv enthält Daten aller Eisenbahntriebfahrzeuge vom "ADLER" bis zum ICE. Genaueres erfährt man unter www.lokliste.de, wo man auch eine kostenlose DEMO-Version herrunterladen kann !!!
KHKDampflok
UDF-Programmierer
UDF-Programmierer
Beiträge: 68
Registriert: Do, 14. Dez 2006 20:55
Wohnort: 22946 Trittau
Kontaktdaten:

Re: Fenstergröße unter Windows 7

Beitrag von KHKDampflok »

Hallo Leute, meine gestrige Euphorie ist totaler Ernüchterung gewichen.

Meine Entwicklungsebene ist noch auf dem Windows XP-Rechner installiert und dort funktionierte alles, wie berichtet. Ich habe dann heute das Ergebnis auf den Windows 7-Rechner installiert, und siehe da, es
wurde nichts übernommen. :blob8: nicht einmal o:clientSize !!!!

Ich wiederhole mich : Scheiß Windows

Gruß Karl-Heinz
Zuletzt geändert von KHKDampflok am Do, 24. Nov 2011 12:39, insgesamt 2-mal geändert.
Mit xbase habe ich ein Triebfahrzeugsarchiv "LOKLISTE" erstellt. Dieses Archiv enthält Daten aller Eisenbahntriebfahrzeuge vom "ADLER" bis zum ICE. Genaueres erfährt man unter www.lokliste.de, wo man auch eine kostenlose DEMO-Version herrunterladen kann !!!
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: Fenstergröße unter Windows 7

Beitrag von AUGE_OHR »

KHKDampflok hat geschrieben:... Stelle ich die alte Fenstergröße wieder her, erscheint bei der Superklasse DataDialog ein Fenster mit abgeschnittenem Inhalt.

Wer weiß Rat ?
wer kennt sich aus mit dem DataDialog MDI Demo von Alaska ...

es gibt doch eine "Fenster Verwaltung"

Code: Alles auswählen

/*
 * Men zur Verwaltung offener Fenster erzeugen
 */
FUNCTION WinMenu()
dort gibt es die Method

Code: Alles auswählen

CLASS METHOD WindowMenu:cascadeWindows
...
   FOR i:=1 TO ::winCount
      aDlgSize := ::windowStack[i]:currentSize()
also "holt" er die Grösse aus einem Array !!!

nun muss das "Fenster" ja irgendwann in die "Verwaltung" aufgenommen worden sein.
suche mal in deinem Code nach

Code: Alles auswählen

WinMenu():addItem
wenn du die Stellen gefunden hast siehe dir an ob "davor" die Grösse "geändert" wurde.

wenn Grössen Änderungen "danach" kommen wird die dem Array nicht "bekannt" sein und ich "denke" das dass dein Problem ist.
KHKDampflok hat geschrieben:Meine Entwicklungsebene ist noch auf dem Windows XP-Rechner installiert und dort funktionierte alles, wie berichtet. Ich habe dann heute das Ergebnis auf den Windows 7-Rechner instlliert, und siehe da, es wurde nichts übernommen ...
du hast das EXE vom XP PC genommen und auf dem Win7 PC gestartet ? mit / ohne XP Manifest ?
gruss by OHR
Jimmy
KHKDampflok
UDF-Programmierer
UDF-Programmierer
Beiträge: 68
Registriert: Do, 14. Dez 2006 20:55
Wohnort: 22946 Trittau
Kontaktdaten:

Re: Fenstergröße unter Windows 7

Beitrag von KHKDampflok »

Hallo Jimmy,

ersteinmal Danke für die prompte Antwort. Den ersten Tipp habe ich noch nicht geprüft, kann daher auch noch nichts dazu sagen.

Zum zweiten Thema :

Ich habe alle PRG-Files auf den Windows 7-Rechner kopiert und das Programm dort dann komplett neu compiliert, mit dem Ergebnis, das zwar alle Änderungen im Quellcode enthalten, aber in der Ausführung unwirksam sind !!! :blob8:

MfG Karl-Heinz
Mit xbase habe ich ein Triebfahrzeugsarchiv "LOKLISTE" erstellt. Dieses Archiv enthält Daten aller Eisenbahntriebfahrzeuge vom "ADLER" bis zum ICE. Genaueres erfährt man unter www.lokliste.de, wo man auch eine kostenlose DEMO-Version herrunterladen kann !!!
KHKDampflok
UDF-Programmierer
UDF-Programmierer
Beiträge: 68
Registriert: Do, 14. Dez 2006 20:55
Wohnort: 22946 Trittau
Kontaktdaten:

Re: Fenstergröße unter Windows 7

Beitrag von KHKDampflok »

Hallo Jimmy,

Deinen ersten Tipp :

CLASS METHOD WindowMenu:cascadeWindows
...
FOR i:=1 TO ::winCount
aDlgSize := ::windowStack:currentSize()

habe ich mit einem Debug-Stopp()-Befehl überprüft. Anscheinend gelangt das Programm nicht in diese Routine.

Weiß sonst noch jemand Rat ?

MfG Karl-Heinz
Mit xbase habe ich ein Triebfahrzeugsarchiv "LOKLISTE" erstellt. Dieses Archiv enthält Daten aller Eisenbahntriebfahrzeuge vom "ADLER" bis zum ICE. Genaueres erfährt man unter www.lokliste.de, wo man auch eine kostenlose DEMO-Version herrunterladen kann !!!
Antworten