![]() |
Anzeige:
|
|
|||||||
| XProfan Alles rund um die Programmiersprache XProfan. |
|
![]() |
|
|
LinkBack | Themen-Optionen | Ansicht |
|
|
#1 (Direktlink) |
|
Ist öfter hier
![]() Registriert seit: 28.01.2010
Ort: bayerischer Untermain
Beiträge: 84
|
Gibt es im Zeichnenmodus eine Möglichkeit, Texte rechtsbündig auszugeben? Es geht um die Erstellung von Angeboten und Rechnungen - da brauche ich formatierte Ausgabe von Geldbeträgen mit zwei Nachkommastellen, und das ganze bitte ordentlich rechtsbündig.
Jemand ne Idee, über welchen Umweg das am besten zu realisieren ist, wenns keine direkte Möglichkeit gibt?
__________________
--- Xprofan X2 auf nem ollen PIII mit Win 2000 |
|
|
|
|
|
|
#2 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Dafür kannst du die GetTextExtent-API's benutzen. Die API DrawText kann es - glaube ich - auch. Hier ein älterer Code aus meinem Sourceordner, von Normal Strübli:
Code:
'WIN32 API
'THEMA: Einfache Textformatierung
'Autor: Normann Strübli
$H windows.ph
$H messages.ph
Declare Text$,Text#,Text2#,Size#,Size.cx&,Space&,Mempos&,findpos&,Startpos&
Declare Textwidth&,Textheight&,maxpos&,Ystart&,ystart2&,Xstart&,Xstart2&
declare test%,textlen&,Format%,merker&
Declare links&,mitte&,rechts&,Block&
'*** Festlegung der Größe des Textfeldes
Textwidth& = 400 'Max Breite des Textes
Textheight& = 300 'Max Höhe des Textes
Xstart& = 20
Ystart& = 50
Text$ = "Dies ist ein Beispiel, wie man mit einfachen Funktionen zur Textausgabe \
einen komplexen Text Formatieren kann um ihn z.B. auf einem Drucker auszugeben \
. Der dargestellte Text ist nur durch einen String definiert, der außer einem \
abschließenden NUL keine Steuerzeichen enthält. Bei jedem Leerzeichen wird mittels \
GetTextExtendetPoint32 geprüft ob in eine neue Zeile verschoben werden muß - \
falls ja wird das vorangehende Leerzeichen als Zeilenende benutzt. Diese Suche \
und Berechnung findet für alle vier möglichen Formatierungsarten statt. Will man \
allerdings Formatierungen erreichen wie z.B. Wordpad es tut (mit mehreren \
Schriftarten und größen in einer Zeile) wird es Richtig komplex und macht \
bestimmt keinen Spaß mehr ;-)"
text$ = @Trim$(text$)
textlen& = @len(text$)
Dim Text# ,textlen& +1
Dim Text2# ,textlen&+1
String Text#,0= text$
Dim Size#,8
Windowtitle "Einfache Textformatierung"
window 0,0-450,400
links& = @Create("Button",%hwnd,"Linksbündig",20,20,90,25)
mitte& = @Create("Button",%hwnd,"Mittig",120,20,60,25)
rechts& = @Create("Button",%hwnd,"Rechtsbündig",190,20,100,25)
Block& = @Create("Button",%hwnd,"Blocksatz",300,20,90,25)
UseBrush 1,@RGB(220,220,220)
Rectangle xstart&,Ystart&-Textwidth&+xstart&,Textheight&
Proc Showtext 'Gibt den Text aus
~GetTextExtentPoint32A(%hDC,Text2#,@MemPos(Text2#,0,@chr$(0)),Size#)
Size.cx& = @Long(Size#,0)
~SetBkMode(%hdc, ~TRANSPARENT)
if Format% = 1
Xstart2& = Xstart& + Textwidth& / 2 -size.cx& / 2 'Rechtsbündig
elseif Format% = 2
Xstart2& = Xstart& + Textwidth& -size.cx& 'Mittig
Elseif Format% = 3
~SetTextJustification(%hdc,Textwidth& - Size.cx&,space&) 'Blocksatz
Xstart2& = Xstart&
else
Xstart2& = Xstart& 'Linksbündig
endif
~TextOut(%hdc,Xstart2&,YStart&,Text2#,@MemPos(Text2#,0,@chr$(0))) 'Text ausgeben.
~SetTextJustification(%hdc,0,0)
~SetBkMode(%hdc2, ~TRANSPARENT)
~TextOut(%hdc2,Xstart2&,YStart&,Text2#,@MemPos(Text2#,0,@chr$(0))) 'damit's auch neugezeichnet wird
~SetTextJustification(%hdc2,0,0)
Endproc
Proc Formattext ' Bearbeitet Zeilenumbrüche und Trennzeichen
Findpos& = 0
Ystart& = 50
mempos& = 0
startpos& = 0
UseBrush 1,@RGB(220,220,220)
Rectangle xstart&,50-Textwidth&+xstart&,Textheight&
Space& = -1
Whilenot findpos&=-1
findpos& = @MemPos(Text#,Mempos&," ") 'Ab Position Mempos& nach Leerzeichen suchen
if findpos& > -1 'Solange was gefunden wird
findpos& = findpos& + mempos& '
Mempos& = findpos& +1
inc Space&
String Text2#,0=@Char$(text#,startpos&,findpos&-startpos&)
~GetTextExtentPoint32A(%hDC,Text2#,@MemPos(Text2#,0,@chr$(0)),Size#)
if @Long(Size#,0) > Textwidth& 'Wenn der Text nicht mehr in die Zeile Passt > Zeilenumbruch
dec space& 'letzte Leerzeichen ignorieren
String Text2#,0=@Char$(text#,startpos&,maxpos&-startpos&) 'Aktuelle Zeile in Text2# schreiben
Showtext 'Aktuelle Zeile anzeigen
Ystart& = Ystart& +@Long(Size#,4) 'Y-Startposition für nächste Zeile (einfach Texthöhe addieren)
startpos& = maxpos& +1
space& = 0
else
maxpos& = findpos&
endif
endif
wend
inc space&
String Text2#,0=@Char$(text#,startpos&,@len(@String$(text#,0))-startpos&)
Showtext
EndProc
'*** Hauptprogramm
UseFont "Arial",16,0,0,0,0
While 1
waitinput
if @getfocus(links&)
format% = 0
Formattext
elseif @getfocus(mitte&)
format% = 1
Formattext
elseif @getfocus(rechts&)
format% = 2
Formattext
elseif @getfocus(Block&)
format% = 3
Formattext
endif
@SetFocus(%hwnd)
wend
Dispose Text#
Dispose Text2#
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
#3 (Direktlink) |
|
Stammuser
![]() Registriert seit: 08.02.2009
Ort: Bielefeld
Alter: 53
Beiträge: 428
|
oder so
Code:
$H windows.ph cls ~SetTextAlign(%hdc,~TA_RIGHT) DrawText 120,10,"1020.80" DrawText 120,30,"120.80" DrawText 120,50,"12.80" DrawText 120,70,"120.80" DrawText 120,90,"1.80" DrawText 120,110,"0.80" waitinput end
__________________
Gruss Andreas ______________________ http://www.ampsoft.eu Profan 3.3 - XProfanX2 Windows 95,98,ME,2000,XP Vista - Windows 7 32 / 64 Bit ASUS X93S - Intel Core I7 - NVIDIA GForce GT540M - 8GB Arbeitsspeicher |
|
|
|
|
|
#4 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Andreas' Zauberhut ist nahezu unendlich tief. Die Löung ist noch einfacher.
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
#5 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 08.02.2009
Ort: Nußloch (bei Heidelberg)
Beiträge: 550
|
Hut ab!
Ich muss zu meiner Schande gestehen, dass diese API-Funktion sich bislang an mir vorbeigeschmuggelt hat. Vielleicht sollte ich in XProfan 12 ein Set("TextAlign", n%) einbauen ... Gruß Roland
__________________
Pentium D 2,8 GHz / 3 GB RAM / 500 GB HDD / ATI Radeon HD5450 1024 MB / Windows 7(32) - XProfan X2.0c AMD Athlon II X2 2,9 GHz / 3 GB RAM / 500 GB HDD / ATI Radeon 3000 / Windows 7(64) - XProfan X2.0c http://www.xprofan.de |
|
|
|
|
|
|
#6 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Vielleicht ein zusätzlicher Parameter für DrawText?
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. Geändert von Frabbing (26.02.2010 um 22:17 Uhr) |
|
|
|
|
|
#7 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 08.02.2009
Ort: Nußloch (bei Heidelberg)
Beiträge: 550
|
Auch keine schlechte Idee ...
Gruß Roland
__________________
Pentium D 2,8 GHz / 3 GB RAM / 500 GB HDD / ATI Radeon HD5450 1024 MB / Windows 7(32) - XProfan X2.0c AMD Athlon II X2 2,9 GHz / 3 GB RAM / 500 GB HDD / ATI Radeon 3000 / Windows 7(64) - XProfan X2.0c http://www.xprofan.de |
|
|
|
|
|
#8 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 08.02.2009
Ort: Nußloch (bei Heidelberg)
Beiträge: 550
|
Ok, ab XProfan 12 wird folgendes funktionieren:
Code:
$H windows.ph cls DrawText 120,10,"1020.80",~TA_RIGHT DrawText 120,30,"120.80" DrawText 120,50,"12.80" DrawText 120,70,"120.80" DrawText 120,90,"1.80" DrawText 120,110,"0.80" waitinput end Gruß Roland
__________________
Pentium D 2,8 GHz / 3 GB RAM / 500 GB HDD / ATI Radeon HD5450 1024 MB / Windows 7(32) - XProfan X2.0c AMD Athlon II X2 2,9 GHz / 3 GB RAM / 500 GB HDD / ATI Radeon 3000 / Windows 7(64) - XProfan X2.0c http://www.xprofan.de |
|
|
|
|
|
#9 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Finde ich eine gute Lösung.
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
#10 (Direktlink) |
|
Ist öfter hier
![]() Registriert seit: 28.01.2010
Ort: bayerischer Untermain
Beiträge: 84
|
und schon stapeln sich die Lösungen und Ideen - thanx dafür.
__________________
--- Xprofan X2 auf nem ollen PIII mit Win 2000 |
|
|
|
|
|
|
#11 (Direktlink) | |
|
Stammuser
![]() Registriert seit: 08.02.2009
Ort: Bielefeld
Alter: 53
Beiträge: 428
|
Zitat:
sehr einverstanden ![]() Vielleicht kannst Du noch über einen weiteren Flag (~DT_WORDBREAK) nachdenken ? Etwa in dieser Art. Code:
$H windows.ph cls ~GetSysColor(~COLOR_BTNFACE) UseFont "Arial",14,0,0,0,0 TextColor $FF0000,-1 Var h& = ExDrawText(40,20,"Ich habe einen mehrzeiligen Text z.B. aus einer Datei, der irgendwann mal automatisch\noder von Hand umgebrochen werden soll.",~DT_WORDBREAK | ~DT_CENTER) h& = ExDrawText(40,h&+10,"Ich habe einen mehrzeiligen Text z.B. aus einer Datei, der irgendwann mal automatisch\noder von Hand umgebrochen werden soll.",~DT_WORDBREAK | ~DT_RIGHT) h& = ExDrawText(40,h&+10,"Ich habe einen mehrzeiligen Text z.B. aus einer Datei, der irgendwann mal automatisch\noder von Hand umgebrochen werden soll.",~DT_WORDBREAK | ~DT_LEFT) waitinput end Proc ExDrawText Parameters X&,Y&,Text$,Flag& Declare Rect# Var TA& = ~GetTextAlign(%hdc2) ~SetTextAlign(%hdc2,~TA_LEFT) Var w& = Width(~WindowFromDC(%hdc))- (x&*2) Dim Rect#,16 ~SetRect(Rect#,X&,Y&,X&+W&,0) ~DrawText(%hdc2,Addr(Text$),Len(Text$),Rect#,Flag& | ~DT_CALCRECT ) ~DrawText(%hdc2,Addr(Text$),Len(Text$),Rect#,Flag&) ~SetTextAlign(%hdc2,TA&) Repaint Var Ret& = Long(Rect#,12) Dispose Rect# EndProc
__________________
Gruss Andreas ______________________ http://www.ampsoft.eu Profan 3.3 - XProfanX2 Windows 95,98,ME,2000,XP Vista - Windows 7 32 / 64 Bit ASUS X93S - Intel Core I7 - NVIDIA GForce GT540M - 8GB Arbeitsspeicher Geändert von Andreas Miethe (27.02.2010 um 15:15 Uhr) |
|
|
|
|
|
|
#12 (Direktlink) |
|
Stammuser
![]() Registriert seit: 08.02.2009
Ort: Bielefeld
Alter: 53
Beiträge: 428
|
Einen habe ich noch für Textausgaben.
Taballarische Ausgabe. Code:
$H windows.ph cls UseFont "Arial",16,0,0,0,0 DECLARE Tabs&[],sText$,sTab$,pTab& 'Minuswert des Tabs = rechtsbündige Ausgabe Tabs&[0] = -200 'PIXEL Tabs&[1] = -300 Tabs&[2] = -width(%hwnd) 'Pointer für Tabs ermitteln pTab& = Addr(Tabs&[0]) ' TAB-Zeichen zuweisen sTab$ = Chr$(9) 'Der Text könnte auch aus einer CSV-Datei kommen :-) sText$ = "Name;Einzelpreis;Anzahl;Preis" 'Semikolon zu TAB sText$ = TransLate$(sText$,";",sTab$) 'DC,X,Y,Textpointer,Textlänge,Tabarray,Tabanfang ~TabbedTextOut(%hdc2,0,0,Addr(sText$),Len(sText$),SizeOf(Tabs&[]),pTab&,0) sText$ = "Gabel;1,50 €;120;180,00 €" sText$ = TransLate$(sText$,";",sTab$) ~TabbedTextOut(%hdc2,0,30,Addr(sText$),Len(sText$),SizeOf(Tabs&[]),pTab&,0) sText$ = "Messer;2,81 €;10;28,10 €" sText$ = TransLate$(sText$,";",sTab$) ~TabbedTextOut(%hdc2,0,50,Addr(sText$),Len(sText$),SizeOf(Tabs&[]),pTab&,0) sText$ = "MwSt;;19;39,54 €" sText$ = TransLate$(sText$,";",sTab$) ~TabbedTextOut(%hdc2,0,70,Addr(sText$),Len(sText$),SizeOf(Tabs&[]),pTab&,0) sText$ = "Gesamt;;;247,64 €" sText$ = TransLate$(sText$,";",sTab$) ~TabbedTextOut(%hdc2,0,120,Addr(sText$),Len(sText$),SizeOf(Tabs&[]),pTab&,0) repaint CLEAR Tabs&[] waitinput end
__________________
Gruss Andreas ______________________ http://www.ampsoft.eu Profan 3.3 - XProfanX2 Windows 95,98,ME,2000,XP Vista - Windows 7 32 / 64 Bit ASUS X93S - Intel Core I7 - NVIDIA GForce GT540M - 8GB Arbeitsspeicher Geändert von Andreas Miethe (01.03.2010 um 20:19 Uhr) |
|
|
|
|
|
#13 (Direktlink) |
|
Dauergast
![]() Registriert seit: 06.02.2009
Ort: Wien, Österreich
Beiträge: 1.082
|
Ui, da wäre dann "Zahlen rechtsbündig" und "Zahlen am Komma ausgerichtet" auch noch interessant. Aber dann sind wir bald bei Excel LOL
__________________
Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,XPSE,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB2:USB3 |
|
|
|
|
|
#14 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Klasse
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
#15 (Direktlink) | |
|
Stammuser
![]() Registriert seit: 04.04.2009
Ort: Lübeck
Beiträge: 264
|
Zitat:
Wäre dann ein Grund mal wieder Excel zu testen. Gruß Thomas |
|
|
|
|
|
![]() |
|
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Sprachein-/ ausgabe | Jamie82 | Windows XP | 6 | 15.05.2009 11:24 |
| Ausgabe aus mysql db | 12null34 | PHP/MySQL | 9 | 27.02.2007 16:49 |
| Windows Ausgabe | Noldi | Software - Allgemein | 4 | 02.06.2006 14:36 |
| php formular ausgabe | Cage | PHP/MySQL | 3 | 22.02.2006 20:47 |
| Ausgabe einer kette von zahlen | chas | Visual Basic, Visual Basic.NET | 8 | 23.09.2005 12:22 |