Fenstergröße

Auf dem Weg von Clipper, FoxPro u.ä. nach Xbase++

Moderator: Moderatoren

Antworten
MaTel
Rookie
Rookie
Beiträge: 1
Registriert: So, 24. Mär 2013 16:35

Fenstergröße

Beitrag von MaTel »

Ich habe die "ehrenvolle" Aufgabe, ein altes Clipper 5.2 Programm auf WIndows 7 laufen zu lassen... soweit so gut.

Leider ist das Programmfenster ( VIO-Modus ) immer sehr klein ( Bildschim läuft z.B. bei 1280*1024, kann aber noch höher sein!), da xbase vermutlich immer einen Standartzeichensatz für die Ausgabe nimmt.
Nun würde ich aber gern das Programmfenster der jeweiligen eingestellten Auflösung des Bildschirm in Bezug auf Fenstergröße + Zeichensatzgröße anpassen. Ist das im VIO-Modus überhaupt möglich? Wenn nein, geht es denn im XbpCrt-Modus?
Per Tastendruck ( welche auch immer ) soll zwischen 80x25 Zeichen auf 80x50 zeichen umgeschaltet werden können ( das alte Clipperprogramm hat sowas eingebaut ). Ist das mit dem XbpCrt-Modus möglich?

Ich stelle mir das so vor:
Programm ermittelt die Bildschirmauflösung und stellt darauf das Programmfenster und die Zeichensatzgröße in Abhängigkeit dieser Bildschirmauflösung ein.


Falls die Fragen unverständlich sind... ich bin NOCH ein absoluter xbase++ Laie und arbeite mich da gerade ein :(
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Fenstergröße

Beitrag von UliTs »

Hallo MaTel,

ist sicher kein Problem.
Noch besser ist aber -meine ich- der Hybridmodus :-) .

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
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

Beitrag von AUGE_OHR »

MaTel hat geschrieben:Programm ermittelt die Bildschirmauflösung und stellt darauf das Programmfenster und die Zeichensatzgröße in Abhängigkeit dieser Bildschirmauflösung ein.
suche mal nach APPSYS.PRG
mit SetMode(<nMaxRow>, <nMaxCol>) kannst du den Bildschirmmodus "umschalten".
gruss by OHR
Jimmy
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Fenstergröße

Beitrag von Jan »

Es gab hier vor kurzem eine Diskussion im Forum, wie man aus der Bildschirmauflösung die maximale Anzahl Splaten und Zeilen errechnen kann. Knechte doch mal die Foren-Suchfunktion danach. Manfred brauchte das, glaube ich.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2821
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 94 Mal
Danksagung erhalten: 13 Mal

Re: Fenstergröße

Beitrag von georg »

Guten Morgen,


vor einigen Jahren habe ich mich mit dem Problem herumgeschlagen. Ich muss allerdings erst das Programm raussuchen (habe von hier keinen Zugriff auf die Quellen).

Du solltest Dir mal die Funktion SetMode() anschauen. Das zweite Problem war damals (noch zu Zeiten von Windows 2000) war ein nicht-proportionaler Font, der auch entsprechend skalierbar ist. Ich habe damals Lucida Console verwendet. Da Windows überwiegend mit proportionalen Fonts arbeitet, ist die Auswahl von nicht-proportionalen Fonts recht bescheiden.

Je nach Grösse der Schriftart gibt es diese nicht, dann wird die nächst-kleinere, verfügbare Schriftgrösse genommen. Das Programm lief damals auf Monitoren mit 1024*768 Auflösung (wenn ich mich recht erinnere), und Lucida Console war die Schriftart, mit der man am besten (eben auch von der Darstellung her) klarkam.

Code-Beispiele folgen dann heute abend.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2821
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 94 Mal
Danksagung erhalten: 13 Mal

Re: Fenstergröße

Beitrag von georg »

Hallo,


einfach mal schnell rüberkopiert:

Code: Alles auswählen

   #define DEF_ROWS       25
   #define DEF_COLS       80

         aSizeDesktop    := AppDesktop():currentSize()
         nFontWide := Int(aSizeDesktop[1] / DEF_COLS * 0.95)
         nFontHigh := Int(aSizeDesktop[2] / DEF_ROWS * 0.95)
         aPos            := { (aSizeDesktop[1]-(DEF_COLS * nFontWide))  /2, ;
            (aSizeDesktop[2]-(DEF_ROWS * nFontHigh))  /2  }

         // Create XbpCRT object
         oCrt := XbpCrt():New ( NIL, NIL, aPos, DEF_ROWS, DEF_COLS )
         oCrt:FontWidth  := nFontWide
         oCrt:FontHeight := nFontHigh
         oCrt:title      := AppName()
         oCrt:titleBar   := TRUE
         oCrt:FontName   := "Lucida Console"
         oCrt:Create()
Wie geschrieben, Lucida Console war damals der Font, der am flexibelsten einsetzbar war.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen 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

Beitrag von brandelh »

Hi,

hier habe ich einen Vortrag zur Migration von der DevCon 2007.
Im letzten Beispiel zeige ich wie man mit einem XbpCRT() Programm (VIO geht nicht) einen Zeichensatz wählen und auch speichern kann.

http://www.xbaseforum.de/viewtopic.php?f=16&t=2294

auf der 4. Seite gibt es auch noch diesen Artikel, aber da wurde das Beispiel im Beitrag zerstört. Die ZIP müsste aber noch funktionieren.

http://www.xbaseforum.de/viewtopic.php?f=16&t=225
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

Beitrag von AUGE_OHR »

Jan hat geschrieben:Es gab hier vor kurzem eine Diskussion im Forum, wie man aus der Bildschirmauflösung die maximale Anzahl Splaten und Zeilen errechnen kann.
hier ist der Thread http://www.xbaseforum.de/viewtopic.php?f=30&t=6377
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: Fenstergröße

Beitrag von AUGE_OHR »

hi,

welche Fonts kann man im Hybrid Modus "richtig" resizen ? hiess es nicht es würde mit TTF Fonts gehen ?

mit dem Standard "Alaska CRT" hab ich bei 4:3 Auflösungen gute Resultate aber bei 16:9 oder 19:10 passt es im "Vollbild" nicht in der "Breite".
"Terminal" und "Courier New" haben bei "wide Screen" das selbe Problem wie "Alaska Crt".
"Lucida Console" geht da zwar ... ist mir aber "zu dünn".

so und nun eine Frage :

Code: Alles auswählen

oCrt   := XbpCrt() :new(...)
oCrt:SysMenu    := .F.
oCrt:titleBar   := .F.  // no CRT Titlebar
oCrt:Border     := XBPDLG_NO_BORDER
oCrt:setName(nSetName)  // better to Identify
oCrt:create()
oCrt:SetFont( oFont )
warum "knallt" es bei "SetFont" wenn ich diese Fonts verwende
"Times New Roman"
"Arial Black"
"Arial Fett"
"Arial Unicode MS"
"Courier"
"Verdana"
"Helvetica"
"Arial"
"MS Serif"
mit
oError:args :
-> VALTYPE: O CLASS: XbpCrt
-> VALTYPE: O CLASS: XbpFont
oError:canDefault : N
oError:canRetry : N
oError:canSubstitute: J
oError:cargo : NIL
oError:description : Parameter hat falschen Typ
oError:filename :
oError:genCode : 2
oError:operation : :setFont
oError:osCode : 0
oError:severity : 2
oError:subCode : 1025
oError:subSystem : BASE
oError:thread : 1
oError:tries : 0
gruss by OHR
Jimmy
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Fenstergröße

Beitrag von UliTs »

Hallo Jimmy,

warum benutzt Du SetFont unmittelbar nach Create() ?
Ich mache es so:

Code: Alles auswählen

  // XbpCRT-Fenster erzeugen
  oCrt := XbpCrt():New ( NIL, NIL, aPos,25/*nRows*/,80/*nCols*/ )
  oCrt:FontWidth  := nFontWidth
  oCrt:FontHeight := nFontHeight
  oCrt:title      := AppName()
  oCrt:FontName   := "COURIER NEW"+nationMsg(NAT_MSG_FNT_STYLE_BOLD)  // "Alaska Crt"
  oCrt:Create()
  oCrt:PresSpace()            // Presentation Space initialisieren
  SetAppWindow( oCrt )        // XbpCrt wird aktives Fenster und Ausgabegerät
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
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

Beitrag von brandelh »

AUGE_OHR hat geschrieben: so und nun eine Frage :
warum "knallt" es bei "SetFont" wenn ich diese Fonts verwende
"Times New Roman"
"Arial Black"
"Arial Fett"
"Arial Unicode MS"
"Courier"
"Verdana"
"Helvetica"
"Arial"
das steht in der Dokumentation von 1.90.355 zu XbpCrt():SetFont() ;-)
Hinweis: Der in <oXbpFont> angegebene Zeichensatz muß eine Nicht-Proportional-Schrift, d.h. ein Zeichensatz mit fester Breite, sein, andernfalls wird ein Laufzeitfehler ausgelöst.
Gruß
Hubert
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Fenstergröße

Beitrag von UliTs »

Courier ist allerdings ein Zeichensatz mit fester Zeichenbreite.
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
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

Beitrag von AUGE_OHR »

UliTs hat geschrieben:warum benutzt Du SetFont unmittelbar nach Create() ?
schon klar aber es geht hier um CRT "Vollbild" d.h. mit dem oCrt:resize Slot wo man dann oCrt:SetFont(oFont) verwenden muss.

p.s. es handelt sich um dass was Till uns auf dem JHV gezeigt hat
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: Fenstergröße

Beitrag von AUGE_OHR »

UliTs hat geschrieben:Courier ist allerdings ein Zeichensatz mit fester Zeichenbreite.
wenn ich das richtig verstehe "sollten" es die mit oFont:vector = .F. sein ?

wie Ulli sagte zeigt mir c:\ALASKA\XPPW32\Source\samples\basics\FONT\fontdb.prg für

Code: Alles auswählen

"Courier" 
"MS Serif"
"MS Sans Serif"
ebenfalls .F. an ... aber damit "knallt" es :banghead:
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

Beitrag von brandelh »

Ist Courier ein TrueType Font ? Ich meine nur Courier New ...

Ich nutze dieses Programm um einen schönen Font zu finden:
Dateianhänge
CrtFont.zip
(2.43 KiB) 511-mal heruntergeladen
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

Beitrag von AUGE_OHR »

hi,

sehr schön mit der INI Datei :thumbright:

ich habe mir aus dem FONTDB Sample etwas ähnliches gebaut aber wir beide arbeiten auf das oCRT mit oCrt:configure() statt wie Till mit oCrt:SetFont(oFont)

Frage : was war bei Cl*pper die möglichen "Auflösungen" ?

25 x 80
50 x 80
43 x 80
50 x 132
50 x 144 (?)
gruss by OHR
Jimmy
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Fenstergröße

Beitrag von UliTs »

brandelh hat geschrieben:Ist Courier ein TrueType Font ? Ich meine nur Courier New ...
Courier ist kein TrueType Font. Es funktioniert aber trotzdem. Man ist nur in der Wahl der Schriftgröße eingeschränkt.

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
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

Beitrag von brandelh »

AUGE_OHR hat geschrieben:sehr schön mit der INI Datei :thumbright:
Diese INI Lösung ist sehr alt und unflexibel, wer als eine INI Dateiverwaltung sucht, findet in der Wissensbasis bessere ;-)
Das Programm ermöglicht nur die Suche nach dem passenden Font für CRT, ich habe damals einige für uns freigeschaltet die gut ausgesehen haben.
Insbesondere bei den LINIEN Symbolen, aber auch z.B. bei § muss man aber immer mit Abstrichen rechnen.

Hier eine modernere Version im Anwendungsprogramm, das die Funktion beim Programmstart mit .f. aufruft,

Code: Alles auswählen

ChangeFont( .f. )             // ohne Nachzufragen letzte Einstellung starten.
ansonsten im Menü "Schriftart wählen" die möglichen Schriftarten durchschaltet, je nach Anwender will der mehr oder weniger Kontrolle.

Code: Alles auswählen

      case hpmen=NR_DIENST
         do case
           case submen=1
                ChangeFont()                // Bildschirmschriten umstellen

Code: Alles auswählen

*------------------------------------------------------------------------
procedure ChangeFont( lZeigAuswahlFenster )
  local oCrt := SetAppWindow()
  local aSizeDesktop    := AppDesktop():currentSize()
  local nDesktopBreite  := aSizeDesktop[1]
  local nDesktopHoehe   := aSizeDesktop[2]
  local nBreite, nHoehe
  local aFontList     := {  { "Alaska Crt"    , 16, 8 } ,;
                            { "8514oem"       , 20,10 } ,;
                            { "Terminal"      , 18,10 } ,;
                            { "IBM3270"       , 29,13 } ,;
                            { "IBM3270"       , 29,14 } ,;
                            { "IBM3270"       , 35,14 } ,;
                            { "IBM3270"       , 36,15 } ,;
                            { "IBM3270"       , 38,15 } ,;
                            { "Lucida Console", 28,13 } ,;
                            { "Lucida Console", 29,13 } ,;
                            { "Lucida Console", 30,14 } ,;
                            { "Lucida Console", 32,14 } ,;
                            { "Lucida Console", 35,14 } ,;
                            { "Lucida Console", 36,14 }     }

  static nAktivFont   := 1                       // Alaska CRT
  local nMaxFontNr    := len(aFontList)
  local cWahl
  local cFileName     := UserInI("INI")          // INI-Dateinamen DES Users ermitteln
  local cSection      := "Benutzervorgaben"
  local cVar          := "Bildschirmschriftart"

  DEFAULT lZeigAuswahlFenster TO .t.

  if lZeigAuswahlFenster

     do while .t.
        cWahl := ask(12,"Schrift: "+aFontList[nAktivFont,1]+;
                " ["+ntrim(aFontList[nAktivFont,2])+"-"+ntrim(aFontList[nAktivFont,3])+"]"+;
                        " wechseln ? <L>etzte, <N>„chste, <E>nde","<" )
        do case
           case cWahl = "E"
                exit
           case cWahl = "N"
                nAktivFont++
           case cWahl = "L"
                nAktivFont--
        end case
        * hier muá die Schriftart ge„ndert werden

        if nAktivFont > nMaxFontNr // šber und
           nAktivFont := 1
        endif
        if nAktivFont < 1          // Unterl„ufe ausgleichen
           nAktivFont := nMaxFontNr
        endif

        oCrt:FontName   := aFontList[nAktivFont,1]
        oCrt:FontHeight := aFontList[nAktivFont,2]
        oCrt:FontWidth  := aFontList[nAktivFont,3]
        oCrt:configure()
        nBreite := oCrt:currentSize()[1]
        nHoehe  := oCrt:currentSize()[2]
        oCrt:setPos( { (nDesktopBreite-nBreite)/2 , (nDesktopHoehe-nHoehe)/2 } )
     enddo

     if ! SetIni(cSection, cVar, nAktivFont , cFileName)
        meldung(12,"F",{ cSection + " - " + cVar,;
                         "konnten nicht in INI-Datei geschrieben werden:",;
                          cFileName } )
     endif

  else

     nAktivFont := val( GetIni(cSection, cVar, "1", cFileName) )

     if nAktivFont < 1 .or. nAktivFont > nMaxFontNr  // m”gliche Fehler ausgleichen
        nAktivFont := 1
     endif
     if nAktivFont > 1       // 1 ist ja Standard !
        oCrt:FontName   := aFontList[nAktivFont,1]
        oCrt:FontHeight := aFontList[nAktivFont,2]
        oCrt:FontWidth  := aFontList[nAktivFont,3]
        oCrt:configure()
        nBreite := oCrt:currentSize()[1]
        nHoehe  := oCrt:currentSize()[2]
        oCrt:setPos( { (nDesktopBreite-nBreite)/2 , (nDesktopHoehe-nHoehe)/2 } )
     endif
  endif
return
Mein Bestreben war aber nie einen ganzen Monitor zu füllen, sondern nur ein lesbares Bild zu bekommen.
Daher fehlt die das Fenster vergrößern würde.
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

Beitrag von AUGE_OHR »

UliTs hat geschrieben:Courier ist kein TrueType Font. Es funktioniert aber trotzdem. Man ist nur in der Wahl der Schriftgröße eingeschränkt.
und wie sehen deine BOX Zeichen aus ?
um die zu bekommen muss man oFont:Codepage := 255 setzten und dann funktioniert oCrt:SetFont nicht mehr :(
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

Beitrag von brandelh »

Hi,

ich hatte früher die doppelten Ränder außen, die sich mit einfach gekreuzt haben, die Kreuzungen fehlen komplett.
Daher habe ich bei den XbpCRT Programmen auf einfache Linien umgestellt und z.B. "Lucida Console" zeigt es schön an:
CrtAnwendung.png
CrtAnwendung.png (140.24 KiB) 19974 mal betrachtet
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

Beitrag von AUGE_OHR »

so langsam denke ich das oCRT:SetFont() noch nicht ganz richtig arbeitet ...
hier der Code

Code: Alles auswählen

oFont := oCrt:Setfont()
IF NIL <> oFont
   IF oFont:isDerivedFrom( XbpFont() )
      IF oFont:status() == XBP_STAT_CREATE
          // hier wäre erst OK 
      ELSE
         Msgbox("Error CREATE")
      ENDIF
   ELSE
      Msgbox("Error FONT")
   ENDIF
ELSE
   Msgbox("FONT = NIL")
ENDIF
oCrt:SetFont( oFont )
und hier Fehlermeldung
oError:args :
-> VALTYPE: O CLASS: XbpCrt
-> VALTYPE: O CLASS: XbpFont
oError:canDefault : N
oError:canRetry : N
oError:canSubstitute: J
oError:cargo : NIL
oError:description : Parameter hat falschen Typ
oError:filename :
oError:genCode : 2
oError:operation : :setFont
oError:osCode : 0
oError:severity : 2
oError:subCode : 1025
oError:subSystem : BASE
oError:thread : 1
oError:tries : 0
klar hat er vorher "Error CREATE" geschrienen ... aber ich habe vorher mit

Code: Alles auswählen

oCrt  := oDlg:drawingArea:ChildList()[1]
oFontDlg            := XbpFontDialog():New()
oFontDlg:fixedOnly  := .T.
oFontDlg:create()
oFont := oFontDlg:display()
IF NIL <> oFont
   oCrt:SetFont(oFont)
ENDIF
bestückt und einen "sichtbaren" Nachweis das sich der Font verändert während bei

Code: Alles auswählen

oCrt:FontName   := oFont:familyName
oCrt:FontHeight := oFont:height
oCrt:FontWidth  := oFont:width
oCrt:configure()
es "so" nicht "wirkte" ... hm :-k

ok, wenn es in der "Liste der Änderungen" unter "Neu" steht und in "Blau" im Helpfile dann ist es eben noch nicht sehr erprobt ( was User damit anstellen ... ) :-"
gruss by OHR
Jimmy
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Fenstergröße

Beitrag von UliTs »

AUGE_OHR hat geschrieben:
UliTs hat geschrieben:Courier ist kein TrueType Font. Es funktioniert aber trotzdem. Man ist nur in der Wahl der Schriftgröße eingeschränkt.
und wie sehen deine BOX Zeichen aus ?
um die zu bekommen muss man oFont:Codepage := 255 setzten und dann funktioniert oCrt:SetFont nicht mehr :(
Ich habe die Codepage nicht verändert. Einzellinien und Doppellinien funktionieren. Allerdings "Kreuzungen" und "Dreiecke" zwischen Einzel- und Doppellinien nicht.

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
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

Beitrag von AUGE_OHR »

im Prinzip ist es eigentlich egal ob die BOX Symbole "stimmen" oder nicht.
es scheint aber so das nicht alle "machbaren" Fonts auch "richtige" Ergebnisse liefern.

bislang hab ich CRT Fenster nur auf maximale Grösse gebracht ohne "resize"
wie bei Hubert muss man dann einen Kompromiss aus Font Grösse und Row/Col machen.

nun hat uns Till ja Beispiel zum Thema CRT "resize" gezeigt wobei er eine Class geschrieben hat.

Code: Alles auswählen

FUNCTION CreateSizeableCrt( oParent, nRows, nCols, cTitle, xBGColor )

   // Create a dialog that hosts the console window.
   // The dialog serves as a background for the
   // console
   oDlg := XbpDialog():New( oParent )
   ...
   oDlg:Create()
   // Create console window without frame and title
   // bar.
   oCrt := XbpMainCrt():New ( oDlg:DrawingArea,,, nRows, nCols )
   ...
   oCrt:Create()
   ...
RETURN oCrt
also genau das was ich als "Shell" für ein CRT Fenster vorgeschlagen habe.

die "Shell" ist ja schon fertig und mit "Lucida Console" funktioniert es ... aber welcher Font noch ?
wenn man meint "Alaska CRT" ist doch vorhanden dann probiert es mal mit verschiedenen "Auflösungen"
hierbei ist sowohl AppDeskTop:CurrentSize() als auch ROW / COL gemeint.

"Alaska CRT" scheint bei allen 4:3 "Auflösungen" zu funktionieren aber bei "wide-Screen" und "Vollbild"
stimmt ja dann die "Umrechnung" nicht wie bei "Lucida Console" d.h. statt 50 x 132 sind es dann 50 x 144

***

was nun oCrt:SetFont( oFont ), was ich vorher nie gesehen haben, angeht sieht es so aus das bei einem
"eingebetteten" CRT eine Änderrung per oCRT:Configure() nicht gleich zu einem "optischen" Resultat führt (refresh).
man muss ja auch die "Shell" entsprechend "umrechnen" und ggf. ändern wenn es nicht mehr auf den Bildschirm "passt"

***

was nun XbpFontDialog() -> oFont angeht ist ja oFont:fixedOnly := .T. MUSS für ein CRT Fenster,
aber damit wird auch "Courier" ohne "New" angezeigt was mit oCrt:SetFont( oFont ) abstürzt während
"Courier New" ohne Probleme funktioniert.

sieht man sich den Code von Till an so findet man oFont:Codepage := 255 was für OEM steht.
ich "denke" Alaska lässt bei oCrt:SetFont( oFont ) auch nun diese Fonts zu welche eine OEM Codepage haben.
man müsste also eine eigene Class machen und das für CRT Fenster weiter "abfangen"

Code: Alles auswählen

CLASS MyCrtFontDialog() FROM XbpFontDialog()
   EXPORTED:
      METHOD display()
ENDCLASS

METHOD MyFontDlg:display()
LOCAL oFont := NIL
LOCAL nButton

   DO WHILE .T.
      oFont := ::XbpFontDialog:display()
      IF NIL <> oFont
         IF oFont:fixed    = .T.  .AND. ;  // CRT-Fenster needs FIXEDFONT
            oFont:Codepage = 255         // OEM ... hm
            EXIT
         ELSE
            nButton := ConfirmBox( , ;
                    "wrong Font "+oFont:FamilyName+" for Hybrid Mode. try again ?" ,;
                    "Error Font", ;
                    XBPMB_YESNO , ;
                    XBPMB_QUESTION+XBPMB_APPMODAL+XBPMB_MOVEABLE,;
                    XBPMB_DEFBUTTON1)

            IF nButton = XBPMB_RET_YES
            ELSE
               oFont := NIL
               EXIT
            ENDIF
         ENDIF
      ELSE
         EXIT
      ENDIF
   ENDDO

RETURN oFont
aber dann bleiben nicht mehr viele Fonts übrig ...
gruss by OHR
Jimmy
Antworten