![]() |
Anzeige:
|
|
|||||||
| XProfan Alles rund um die Programmiersprache XProfan. |
|
![]() |
|
|
LinkBack | Themen-Optionen | Ansicht |
|
|
#1 (Direktlink) |
|
MoRoGeP-Träger 2011
![]() Registriert seit: 06.02.2009
Ort: Heidelberg
Alter: 71
Beiträge: 1.878
|
Hallo an alle XProfaner
Im Moment schlage ich mich mit diesem Problem rum: Ein längerer Text (1 String) soll mit Drawtext X%,Y%,text$ in einem begrenzten Platz angezeigt werden. Dieser String hat im Programm immer wieder einen anderen Inhalt. Wird aus eine Datei gelesen. Das ist an sich einfach mit LEN, LEFT$(.., MID$(..., RIGHT$(... Aber hier werden Wörter einfach getrennt und in der nachsten Zeile weitergeschrieben. Das sieht nicht gut aus und ist auch nicht besonders gut lesbar. Wie kann ich den Code überlisten, den Zeilenumbruch nur an einer Leerstelle vorzunehmen Drawtext muss ich verwenden,weil der Text farbig sein muss. Create("Text".... hilft mir also nicht. Danke für einen Denkanstoss
__________________
Gruss, horst Computer werden kleiner und kleiner, bald verschwinden sie völlig. (Ephraim Kishon 1924-2005) http://www.web-treffpunkt.de Geändert von horsthorn (24.09.2009 um 12:43 Uhr) Grund: Hatte was vergessen. |
|
|
|
|
|
|
#2 (Direktlink) |
|
Weiß worum´s geht
![]() Registriert seit: 08.02.2009
Ort: Berlin
Beiträge: 226
|
Einfach ein HTML-Control zur Textausgabe verwenden oder die Text-Ausgabelänge pro Buchstaben berechnen ( http://quelltext.xprofan.com/src/12537927146922.txt ) und selbst umbrechen.
__________________
Programmieren für Anfänger. |
|
|
|
|
|
#3 (Direktlink) |
|
Stammuser
![]() Registriert seit: 08.02.2009
Ort: Bielefeld
Alter: 53
Beiträge: 428
|
Hallo Horst,
nimm einfach die API DrawText() Code:
$H Windows.ph Struct RECT = left&,top&,right&,bottom& CLS Var Text$ = "Das ist ein langer Text, der umgebrochen werden soll" TextColor $ff,-1 DrawText 10,10,Text$ Var Rect# = New(RECT) ~SetRect(Rect#,10,40,200,100) ~DrawText(%hdc2,Addr(Text$),Len(Text$),Rect#,~DT_WORDBREAK) Repaint waitinput end Code:
$H Windows.ph CLS Var Text$ = "Das ist ein langer Text, der umgebrochen werden soll" TextColor $ff,-1 DrawText 10,10,Text$ DrawTextEx(10,40,200,Text$,$FF0000) waitinput end Proc DrawTextEx Parameters X&,Y&,W&,Text$,Color& TextColor Color&,-1 Struct RECT = left&,top&,right&,bottom& Var Rect# = New(RECT) ~SetRect(Rect#,X&,Y&,X&+W&,0) ~DrawText(%hdc2,Addr(Text$),Len(Text$),Rect#,~DT_WORDBREAK | ~DT_CALCRECT) ~DrawText(%hdc2,Addr(Text$),Len(Text$),Rect#,~DT_WORDBREAK) Repaint 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 (24.09.2009 um 14:20 Uhr) |
|
|
|
|
|
#4 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Hier noch eine Lösung von Normann 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. |
|
|
|
|
|
#5 (Direktlink) |
|
MoRoGeP-Träger 2011
![]() Registriert seit: 06.02.2009
Ort: Heidelberg
Alter: 71
Beiträge: 1.878
|
Hiermit möchte ich mich bei allen XProfanern bedanken, die mir hier so schnell mit Tipps geholfen haben.
__________________
Gruss, horst Computer werden kleiner und kleiner, bald verschwinden sie völlig. (Ephraim Kishon 1924-2005) http://www.web-treffpunkt.de |
|
|
|
|
|
|
#6 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 15.02.2009
Beiträge: 10.786
|
Hallo Horst...
Das passt zwar nicht ganz zu deiner Frage, ich denke aber, das brauchst du auch noch: Code:
Declare Rückgabe$, Zeilen$, Position&, TeilString$ 'So sieht der String aus. 'Das Trennzeichen der Zeilen ist " | " Rückgabe$ = "Code von Modul Test.exe wurde verändert." Rückgabe$ = Rückgabe$ + " | " + "Ladegröße von Modul winet.dll stimmt nicht." Rückgabe$ = Rückgabe$ + " | " + "Zugriff verweigert." Rückgabe$ = Rückgabe$ + " | " + "Code von Modul AXT.DLL wurde geändert." 'Ein Trennzeichen am Ende hinzufügen... Zeilen$ = Rückgabe$ + " | " Position& = 1 While SubStr$(Zeilen$ , Position& ," | ")<>"" TeilString$ = SubStr$(Zeilen$ , Position& , " | ") Print "Zeile " + Str$(Position&) + ": " + TeilString$ Position& = Position& + 1 EndWhile While 1 WaitInput EndWhile
__________________
______________ Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert! Mfg AHT |
|
|
|
![]() |
|
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Gibts es ein VideoProg wo man Text ins Video einfügen kann? | pcboy | Software - Allgemein | 8 | 17.02.2008 21:10 |
| Kann man von PDF Seiten den Text irgendwie kopieren ? | pcboy | Allgemein | 6 | 03.02.2008 23:31 |
| wie kann ich in geslicete hps text eingeben? | Checkervara | Homepagegestaltung | 10 | 01.03.2007 20:25 |
| Mit welchem prog kann ich nem Video Vorspann geben,Text etc. | pcboy | Software - Allgemein | 3 | 24.02.2007 19:22 |
| Womit kann ich für Videos Text hinzufügen? | pcboy | Software - Allgemein | 1 | 29.11.2004 23:32 |