Programm im Hybridmodus / 50 Zeilen....
Moderator: Moderatoren
- mini990
- 1000 working lines a day
- Beiträge: 592
- Registriert: Sa, 28. Jan 2006 9:44
- Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
- Danksagung erhalten: 1 Mal
Programm im Hybridmodus / 50 Zeilen....
Hallo,
habe hier ein älteres Programm das ich momentan schrittweise auf GUI umstelle.
Mein Problem ist folgendes:
ich benötige an einer Stelle 50 Zeilen.
unter Clipper lief das mit VGA50() einwandfrei.
Setze ich nun den Befehl VGA50() oder SetScrMode(306) ein bekomme ich eine Fehlermeldung:
beschreibung für dieses Objekt unbekannt: Setmode()
Setze ich
oCRT2:= XbpCrt():new( , , , 50, 79, "Titel", )
ein erscheint keine Fehlermeldung aber es passiert..... nix. keine Änderung.
Das Programm wird zuvor gestartet mit:
SetAppWindow():close := {|u1,u2,oXbp| CloseApp() }
SetAppWindow():configure()
RestoreFont()
WInit()
Kann mir da jemand helfen?
Danke im voraus...
Gruß Stefan
habe hier ein älteres Programm das ich momentan schrittweise auf GUI umstelle.
Mein Problem ist folgendes:
ich benötige an einer Stelle 50 Zeilen.
unter Clipper lief das mit VGA50() einwandfrei.
Setze ich nun den Befehl VGA50() oder SetScrMode(306) ein bekomme ich eine Fehlermeldung:
beschreibung für dieses Objekt unbekannt: Setmode()
Setze ich
oCRT2:= XbpCrt():new( , , , 50, 79, "Titel", )
ein erscheint keine Fehlermeldung aber es passiert..... nix. keine Änderung.
Das Programm wird zuvor gestartet mit:
SetAppWindow():close := {|u1,u2,oXbp| CloseApp() }
SetAppWindow():configure()
RestoreFont()
WInit()
Kann mir da jemand helfen?
Danke im voraus...
Gruß Stefan
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Programm im Hybridmodus / 50 Zeilen....
Hallo Stefan,
schau Dir mal SetMode() an.
Jan
schau Dir mal SetMode() an.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Programm im Hybridmodus / 50 Zeilen....
deine Syntax ist FALSCHmini990 hat geschrieben: ↑Di, 07. Nov 2017 16:11ein erscheint keine Fehlermeldung aber es passiert..... nix. keine Änderung.Code: Alles auswählen
oCRT2:= XbpCrt():new( , , , 50, 79, "Titel", )
Code: Alles auswählen
XbpCrt():new( [<oParent>] , [<oOwner>] , [<aPos>] , ;
[<nRowCount>], [<nColCount>], [<cTitle>], ;
[<lVisible>] ) --> oXbpCrt
da du Hybrid geschrieben hast nehme ich an das du weitere XbParts hinzufügen möchtest.mini990 hat geschrieben: ↑Di, 07. Nov 2017 16:11Code: Alles auswählen
SetAppWindow():close := {|u1,u2,oXbp| CloseApp() } SetAppWindow():configure() RestoreFont() WInit()
wenn ja dann würde ich dir raten ein XbpDialog() als Parent zu nutzen damit du für die folgenden XbParts weniger Probleme hast mit dem "Focus" beim "umschalten"
gruss by OHR
Jimmy
Jimmy
- mini990
- 1000 working lines a day
- Beiträge: 592
- Registriert: Sa, 28. Jan 2006 9:44
- Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
- Danksagung erhalten: 1 Mal
Re: Programm im Hybridmodus / 50 Zeilen....
hallo,
ich kämpfe da immer noch.....
Angezeigt wird Zeile 23 - 49
spiele ich etwas mit der Maus so wird irgendwann Zeile 0-24 angezeigt.
Editierbar sind alle Felder (Zeilen)
Setmode(50,80) gibt .T. zurück
Verändere ich nun den Font (Fonthöhe halbieren oder entsprechend kleinen Font wählen) ändert sich nichts bei der Anzeige
Aber die Fensterhöhe ändert sich in Abhängigkeit von der Fonthöhe.
??????? (krieg noch die krise...)
Gruß Stefan
ich kämpfe da immer noch.....
Code: Alles auswählen
SetAppWindow():close := {|u1,u2,oXbp| CloseApp() } // don't use :destroy() here !
SetAppWindow():icon := ICON_APPLICATION
SetAppWindow():configure()
RestoreFont()
WInit()
*** Modus ist 24/80
*** Font wird so gewählt dass er möglichst bildschirmfüllend ist
oCrt := SetAppWindow()
SetMode(50,80)
@ 0,0 say...
...
...
@ 50,0 say...
spiele ich etwas mit der Maus so wird irgendwann Zeile 0-24 angezeigt.
Editierbar sind alle Felder (Zeilen)
Setmode(50,80) gibt .T. zurück
Verändere ich nun den Font (Fonthöhe halbieren oder entsprechend kleinen Font wählen) ändert sich nichts bei der Anzeige
Aber die Fensterhöhe ändert sich in Abhängigkeit von der Fonthöhe.
??????? (krieg noch die krise...)
Gruß Stefan
- brandelh
- Foren-Moderator
- Beiträge: 15707
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 71 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Re: Programm im Hybridmodus / 50 Zeilen....
nicht alle Fonts sind skalierbar / erlaubt ... muss man durchprobieren.
Für die Veranstaltung in Berlin hatte ich ein Hybridfenster mit Fontauswahl - steht meine ich auch in der Wissensbasis.
Für die Veranstaltung in Berlin hatte ich ein Hybridfenster mit Fontauswahl - steht meine ich auch in der Wissensbasis.
Gruß
Hubert
Hubert
- brandelh
- Foren-Moderator
- Beiträge: 15707
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 71 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Re: Programm im Hybridmodus / 50 Zeilen....
Hybrid bedeutet, dass man ein XbpCRT() Fenster nutzt, auf das KANN man auch XbParts legen, aber eben auch nur die @ SAY Syntax nutzen.
Ein XbpDialog() ist immer ein reines GUI Fenster, da geht nix mit @ SAY ...
Ein XbpDialog() ist immer ein reines GUI Fenster, da geht nix mit @ SAY ...
Gruß
Hubert
Hubert
- mini990
- 1000 working lines a day
- Beiträge: 592
- Registriert: Sa, 28. Jan 2006 9:44
- Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
- Danksagung erhalten: 1 Mal
Re: Programm im Hybridmodus / 50 Zeilen....
also wird bei einem CRT Fenster die Höhe und Breite immer durch den Font bestimmt?
kann man da nichts vorgeben?
kann man da nichts vorgeben?
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Programm im Hybridmodus / 50 Zeilen....
Stefan,
da sich SetMode() an Zeilen und Spalten festmacht, wird das immer danach gehen. Egal welche Fontgröße Du einstellst. Zeile ist Zeile, egal ob 10 oder 24 Punkt.
Jan
da sich SetMode() an Zeilen und Spalten festmacht, wird das immer danach gehen. Egal welche Fontgröße Du einstellst. Zeile ist Zeile, egal ob 10 oder 24 Punkt.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- mini990
- 1000 working lines a day
- Beiträge: 592
- Registriert: Sa, 28. Jan 2006 9:44
- Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
- Danksagung erhalten: 1 Mal
Re: Programm im Hybridmodus / 50 Zeilen....
jan, das verstehe ich jetzt nicht.
Mein Verständnis lag so:
Ich habe ein CRT Fenster mit einem bestimmten Font.
Dieser bestimmt die Fenstergröße.
Soweit ok.ich dachte dass ich in diesem Fenster mit z.B. Setmode(50,80) die Zeilenanzahl manipulieren kann
und die Schriftart dann entsprechend ausgegeben wird.
Dem ist aber nicht so.
Da Xbase ja von unten links aus den Bildschirminhalt ausgibt "sehe" ich die
letzten 24 Zeilen meiner 50zeiligen @ say Angaben.
Wo denke ich jetzt verkehrt?
Steh jetzt echt auf dem Schlauch...
Gruß Stefan
Mein Verständnis lag so:
Ich habe ein CRT Fenster mit einem bestimmten Font.
Dieser bestimmt die Fenstergröße.
Soweit ok.ich dachte dass ich in diesem Fenster mit z.B. Setmode(50,80) die Zeilenanzahl manipulieren kann
und die Schriftart dann entsprechend ausgegeben wird.
Dem ist aber nicht so.
Da Xbase ja von unten links aus den Bildschirminhalt ausgibt "sehe" ich die
letzten 24 Zeilen meiner 50zeiligen @ say Angaben.
Wo denke ich jetzt verkehrt?
Steh jetzt echt auf dem Schlauch...
Gruß Stefan
- brandelh
- Foren-Moderator
- Beiträge: 15707
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 71 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Re: Programm im Hybridmodus / 50 Zeilen....
Ihr schreibt an einander vorbei !
In meinem Migrationsbeispiel (und meinen Programmen hier) kann man durch die sinnvoll verfügbaren Schriften durchschalten.
Nicht jede Kombination ist sinnvoll !
Ich ändere zwar nicht die Zeilen / Spalten, aber das sollte auch gehen, womöglich aber nicht mit jeder Kombination.
Die Schriftgröße bestimmt dabei die Fenstergröße (24 * Fonthöhe, 80 * Fontbreite, aber beides in dpi) !
Eine kleine Schrift und das Fenster wird klein angezeigt, eine größere und es wird größer.
Einige der von mir gezeigten Schriften überfordern auch große Monitore obwohl nur 24 x 80 er Anzeige genutzt wird.
Der Standard Alasca Crt Font sollte aber immer gehen, ist halt klein.
In meinem Migrationsbeispiel (und meinen Programmen hier) kann man durch die sinnvoll verfügbaren Schriften durchschalten.
Nicht jede Kombination ist sinnvoll !
Ich ändere zwar nicht die Zeilen / Spalten, aber das sollte auch gehen, womöglich aber nicht mit jeder Kombination.
Die Schriftgröße bestimmt dabei die Fenstergröße (24 * Fonthöhe, 80 * Fontbreite, aber beides in dpi) !
Eine kleine Schrift und das Fenster wird klein angezeigt, eine größere und es wird größer.
Einige der von mir gezeigten Schriften überfordern auch große Monitore obwohl nur 24 x 80 er Anzeige genutzt wird.
Der Standard Alasca Crt Font sollte aber immer gehen, ist halt klein.
Gruß
Hubert
Hubert
- brandelh
- Foren-Moderator
- Beiträge: 15707
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 71 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Re: Programm im Hybridmodus / 50 Zeilen....
Schau mal hier, wenn man mit F2 einen anderen Font auswählt (die Größe kann man auch größer wählen als angegeben), wird das Fenster größer angezeigt.
configure ... wird hier benötig. SetMode() habe ich noch nicht probiert
configure ... wird hier benötig. SetMode() habe ich noch nicht probiert
Code: Alles auswählen
#include "inkey.ch"
#include "common.ch"
#define CRLF (chr(13)+chr(10))
procedure Main()
cls
// Windows Schließenbutton aktivieren | Close with X-Button
SetAppWindow():close := {|u1,u2,oXbp| CloseApp() } // don't use :destroy() here !
SetAppWindow():configure()
if RestoreFont() // registry or INI-File
@ 24,10 say "Font wurde geladen | font restored !"
endif
do while lastkey() # K_ESC // ESC beendet das Programm
@1,1 say "Dies ist ein Test für XbpCrt - Fonts "+Version()+" ("+;
Version(1)+"."+Version(2)+"."+Version(3)+")"
@3,1 say "1234567890 ABCDEFGHIJKLMNOPQRSTUVWXYZ ÄÖÜ ß"
@4,1 say "1234567890 abcdefghijklmnopqrstuvwxyz äöü ß"
@6,1 say "wichtig ist ein FixedFont ! | only fixed fonts !"
@7,1 say "F2 - startet die Fontauswahl | starts Fontdialog"
@8,1 say "F3 - Font merken | save font for next startup"
@9,1 say "F4 - Alaska Crt (16|8) | back to standard font"
@10,1 say "F5 - Lösche INI Datei | delete INI file"
@12,1 say "ESC - beendet das Programm | end"
@20,1 say "SetAppWindow():FontName: '"+SetAppWindow():FontName+"'"
if chr(0) $ SetAppWindow():FontName
@20,73 say " HEX0 " color "w+/r"
endif
@21,1 say "TrimHex0(...): '"+TrimHex0(SetAppWindow():FontName)+"'"
if chr(0) $ TrimHex0(SetAppWindow():FontName)
@21,73 say " HEX0 " color "w+/r"
else
@21,73 say " OK ! " color "w+/g"
endif
@22,1 say "SetAppWindow():FontHeight: "+ntrim(SetAppWindow():FontHeight)
@23,1 say "SetAppWindow():FontWidth: "+ntrim(SetAppWindow():FontWidth)
inkey(0)
cls
do case
case lastkey() = K_F2
if FontWahl()
@ 24,10 say "Font wurde gewählt ! | font changed "
endif
case lastkey() = K_F3
if SaveFont() // registry or INI-File
@ 24,10 say "Font wurde gespeichert ! | font saved "
endif
case lastkey() = K_F4
CRT_SetFont()
CRT_center()
@ 24,10 say "Alaska Crt (16|8) ? "
case lastkey() = K_F5
delete file (GetNameINI())
@ 24,10 say GetNameINI()+" gelöscht ?"+;
iif(! file(GetNameINI()),"JA","NEIN")
endcase
enddo
return
*-----------------------------------------------------------
procedure CloseApp()
quit
return
*-----------------------------------------------------------
function nTrim(nNum)
return alltrim(str(nNum))
*-----------------------------------------------------------
function TrimHex0(cTxt) // AsciiZ -> ASCII
local nPosHex0
cTxt := alltrim(cTxt)
nPosHex0 := at(chr(0),cTxt)
if nPosHex0 > 0
cTxt := left(cTxt,nPosHex0-1)
endif
return alltrim(cTxt)
*-----------------------------------------------------------
function FontWahl(cTitle)
local oCrt := SetAppWindow()
local oFont
local oFontDlg
local lOK := .f.
default cTitle to oCrt:title+" - Fontwahl"
oFontDlg := XbpFontDialog():New()
oFontDlg:fixedOnly := .t. // CRT-Fenster needs FIXEDFONT
oFontDlg:familyName := oCrt:FontName // Vorgabe ist aktueller Font | show active font
oFontDlg:strikeOut := .f.
* oFontDlg:style := .f.
oFontDlg:underScore := .f.
oFontDlg:title := cTitle
oFontDlg:create() // Font-Dialog anfordern
oFont := oFontDlg:display()
if ! IsNil(oFont)
CRT_SetFont( { TrimHex0(oFont:familyName),;
oFont:height,;
oFont:width } )
oFont:destroy() // Font freigeben
CRT_center()
lOK := .t.
endif
oFontDlg:destroy() // Font-Dial
return lOK
*-----------------------------------------------------------
function CRT_SetFont(aFont) // { NAME, Height, Width }
local oCrt := SetAppWindow()
DEFAULT aFont TO { "Alaska Crt" , 16, 8 }
oCrt:FontName := aFont[1]
oCrt:FontHeight := aFont[2]
oCrt:FontWidth := aFont[3]
oCrt:configure()
return .t.
*-----------------------------------------------------------
procedure CRT_center()
local oCrt := SetAppWindow()
local aSizeDesktop := AppDesktop():currentSize()
local nDesktopBreite := aSizeDesktop[1]
local nDesktopHoehe := aSizeDesktop[2]
local nBreite, nHoehe, nPosX, nPosY
nBreite := oCrt:currentSize()[1]
nHoehe := oCrt:currentSize()[2]
if nHoehe < nDesktopHoehe
nPosY := (nDesktopHoehe-nHoehe) /2
else
nPosY := (nDesktopHoehe-nHoehe)
endif
if nBreite < nDesktopBreite
nPosX := (nDesktopBreite-nBreite)/2
else
nPosX := 1
endif
oCrt:setPos( { nPosX , nPosY } )
return
*-------------------------------------------------------------------------------------------------------
function SaveFont() // registry or INI-File - here easy
local oCrt := SetAppWindow()
MemoWrit(GetNameINI(), TrimHex0(oCrt:FontName)+ CRLF +;
ntrim(oCrt:FontHeight)+ CRLF +;
ntrim(oCrt:FontWidth) )
return .t.
*-----------------------------------------------------------
function RestoreFont() // registry or INI-File
local lOK := .f.
local cTxt := memoread(GetNameINI())
local cFontName := alltrim(memoLine(cTxt,200,1,1,.f.))
local nFontHeight := val(memoLine(cTxt,200,2,1,.f.))
local nFontWidth := val(memoLine(cTxt,200,3,1,.f.))
if ! ( empty(cFontName) .or. empty(nFontHeight) .or. empty(nFontWidth) )
CRT_SetFont( { cFontName,nFontHeight,nFontWidth } )
CRT_center()
lOK := .t.
endif
return lOK
*------------------------------------------------------------
function GetNameINI()
local cName := AppName(.t.)
local nLen := len(cName)
if upper(right(cName,4)) = ".EXE"
cName := left(cName,nLen-3)+"INI"
else
cName := cName+".INI"
endif
return cName
- Dateianhänge
-
- CrtFont.zip
- (2.43 KiB) 361-mal heruntergeladen
Gruß
Hubert
Hubert
- brandelh
- Foren-Moderator
- Beiträge: 15707
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 71 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Re: Programm im Hybridmodus / 50 Zeilen....
Wenn ich aber diese Zeilen nach den SetAppWindow() Zeilen einfüge:
sieht das Fenster so aus:
ansonsten so:
jeweils ohne jede weitere Änderung, in der Hilfe steht aber dazu, dass man bei GUI Anwendungen das bei XbpCrt() angeben kann.
Man könnte das so verstehen, dass SetMode() eher der alten hardware Änderung von VIO Modus Anwendungen gedacht ist und es anders besser wäre ...
Könnte man auch noch probieren.
Ein Zuweisen eines anderen Fonts führt übrigens wieder zu der alten Anzeige ...
Code: Alles auswählen
IF .NOT. SetMode( 43, 80 )
@ 24,10 say "Fehler bei SetMode() !"
inkey(0)
ENDIF
Man könnte das so verstehen, dass SetMode() eher der alten hardware Änderung von VIO Modus Anwendungen gedacht ist und es anders besser wäre ...
Könnte man auch noch probieren.
Ein Zuweisen eines anderen Fonts führt übrigens wieder zu der alten Anzeige ...
Gruß
Hubert
Hubert
- brandelh
- Foren-Moderator
- Beiträge: 15707
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 71 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Re: Programm im Hybridmodus / 50 Zeilen....
Wenn man die configure Zeile so ändert, funktioniert es auch mit dem Font-Wechsel:
Code: Alles auswählen
* SetAppWindow():configure()
* :configure( [<oParent>] , [<oOwner>] , [<aPos>] , [<nRowCount>], [<nColCount>], [<cTitle>], [<lVisible>] ) --> self
SetAppWindow():configure( , , , 50 , 80 , "Neuer CRT Test" )
Gruß
Hubert
Hubert
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Programm im Hybridmodus / 50 Zeilen....
so ähnlich FALSCH hat es bei mir am Anfang auch ausgesehenmini990 hat geschrieben: ↑Fr, 26. Jan 2018 10:55 ich kämpfe da immer noch.....Code: Alles auswählen
oCrt := SetAppWindow() SetMode(50,80) @ 0,0 say... ... ... @ 50,0 say...
das du CRT Object (Hybrid) statt dem Root Object (VIO) nimmst ist ja schon mal ein grosser Schritt
nun musst du aber auch die Methoden des Object nehmen und nicht die Function
Code: Alles auswählen
oCRT:setMode( [<nRowCount>], [<nColCount>] ) --> aOldMode
wenn man mit mehreren CRT Fenstern arbeiten will muss man dafür sorgen das nur im "aktiven" Fenster eine "Ausgabe" erfolgt.
Code: Alles auswählen
SetAppWindow(oCrt)
Code: Alles auswählen
oCrt := SetAppWindow()
User schaltet auf eine andere App und zurück und klickt dann auf "irgendein" Fenster / Control das dann das "aktive" ist
wenn man ein Object hat dann sollte man auch damit arbeiten und nicht mit der Rückgabe von einer Function
gruss by OHR
Jimmy
Jimmy
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Programm im Hybridmodus / 50 Zeilen....
wenn du einen Font für CRT Fenster auswählst dann probiere : Umlaute und Euro Zeichen
damit reduziert es sich auf einige wenige für CRT Fenster.so erzeuge ich meinen CRT Font.
---
Anmerkung "viele" Fenster :
ein CRT "in" einem CRT, also CRT als Parent ist schwierig in Griff zu bekommen.
wenn man auf Hybrid geht empfehle ich einen XbpDialog() als "Shell" dessen o:DrawingArea als Parent "für alle" dient.
wenn man z.b. den Font ändert dann sollten ja auch alle anderen den selben Font bekommen !
hier ein Hybrid Code Beispiel aus dem Demo was ich auf der Forum Konferenz 2018 zeigen will.
es verwendet den XbpFontDialog() zur Auswahl des geeigneten Fonts für ein CRT Fenster.
damit reduziert es sich auf einige wenige für CRT Fenster.
Code: Alles auswählen
oFont := XBPFONT() :New()
oFont:fixed := .T.
---
Anmerkung "viele" Fenster :
ein CRT "in" einem CRT, also CRT als Parent ist schwierig in Griff zu bekommen.
wenn man auf Hybrid geht empfehle ich einen XbpDialog() als "Shell" dessen o:DrawingArea als Parent "für alle" dient.
wenn man z.b. den Font ändert dann sollten ja auch alle anderen den selben Font bekommen !
hier ein Hybrid Code Beispiel aus dem Demo was ich auf der Forum Konferenz 2018 zeigen will.
es verwendet den XbpFontDialog() zur Auswahl des geeigneten Fonts für ein CRT Fenster.
Code: Alles auswählen
PROCEDURE SetNewFont( oParent, oCrt )
LOCAL oFont, oFontDlg, aSize
oFontDlg := XBPFONTDIALOG() :New()
oFontDlg:fixedOnly := .T.
oFontDlg:familyName := SP_Font() :familyName
oFontDlg:nominalPointSize := SP_Font() :nominalPointSize
oFontDlg:create()
SP_FontMenu( .T. ) // lock
// auswählen lassen
DO WHILE ( oFont := oFontDlg:display( XBP_DISP_APPMODAL ) ) <> NIL
SP_Font( oFont ) // remember
oCrt:FontName := oFont:familyName
oCrt:FontHeight := oFont:height
oCrt:FontWidth := oFont:width
oCrt:Configure()
aSize := oCrt:CurrentSize()
// Statusbar
aSize[ 2 ] += nSBarHeight
SP_SBar() :SetSize( { aSize[ 1 ], nSBarHeight } )
SP_SBar() :SetFont( oFont )
// XbpDialog
oParent:clientSize := aSize
oParent:DrawingArea:SetFont( oFont )
oParent:SetNewPos() // other CenterControl()
SP_MenuBar() :SetFont( oFont )
CenterControl( oParent, APPDESKTOP() )
// Aktuellen Fontnamen
oFontDlg:familyName := oFont:familyName // registrieren
oFontDlg:nominalPointSize := oFont:nominalPointSize
* NEIN
* oFont:destroy() // Font freigeben
ENDDO
oFontDlg:destroy() // Font-Dialog freigeben
SaveFontSetup()
SP_FontMenu( .F. ) // unlock
RETURN
gruss by OHR
Jimmy
Jimmy
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Programm im Hybridmodus / 50 Zeilen....
So mache ich das in diesen Fällen auch.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- brandelh
- Foren-Moderator
- Beiträge: 15707
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 71 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Re: Programm im Hybridmodus / 50 Zeilen....
in der Hilfe zur 1.90.xxx steht diese Methode aber nicht, im Gegenteil wird dort configure ODER die Funktion SetMode() empfohlen;AUGE_OHR hat geschrieben: ↑Fr, 26. Jan 2018 22:07 so ähnlich FALSCH hat es bei mir am Anfang auch ausgesehen
das du CRT Object (Hybrid) statt dem Root Object (VIO) nimmst ist ja schon mal ein grosser Schritt
nun musst du aber auch die Methoden des Object nehmen und nicht die FunctionCode: Alles auswählen
oCRT:setMode( [<nRowCount>], [<nColCount>] ) --> aOldMode
muss ich später mal probieren, ob die Methode auch geht (wäre schön, ich mag kein Configure)Hilfe hat geschrieben:Beschreibung
Durch die Methode :setSize() kann die Größe eines XbpCrt-Fensters geändert werden. Die maximale Größe ist durch :maxRow und :maxCol vorgegeben, die bei der Erzeugung eines XbpCrt-Fensters angegeben wurden. Die aktuelle Größe wird durch die Methode :currentSize() abgefragt.
Die Größe eines XbpCrt-Fensters kann unter Windows nicht mit der Methode :setSize() geändert werden. Stattdessen wird die Größe durch den impliziten Textpuffer vorgegeben. Die Größe des Textpuffers wird in :create() eingestellt und kann über die Methode :configure() oder die Funktion SetMode() geändert werden. Der Aufruf der Methode :setSize() hat auf Windows-Rechnern keine Auswirkung und die Methode gibt immer den Wert .F. (FALSE) zurück.
Gruß
Hubert
Hubert
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Programm im Hybridmodus / 50 Zeilen....
uuuups ... die Method ist von VCrt()
aber ich glaub ich "weiss" was Stefan uns sagen will : das CRT Fenster verschiebt sich nach oben
also musst Stefan noch ein o:SetPos() hinterher schieben oder CenterControl() einsetzten um es auf dem Parent zu zentrieren. wenn es dann noch nicht "passt" ist dein Font zu gross.
gruss by OHR
Jimmy
Jimmy