Español
Fuente/ Codesnippets

Einfache Textformatierung

 

Normann
Strübli
Hab mich veces con Características a Textausgabe y Fomatierung una wenig auseinandergesetzt.
Rausgekommen es esta una kleines Ejemplo en el una beliebiger Texto en uno beliebigen Schriftart en una bekannten DC ausgegeben, y el Formatierung eingestellt voluntad kann. Is no Perfekt ha also kleine Schönheitsfehler wer also Lust ha no puede sí algo dolles de hacer.

PS: Is nich así kompliziert wies tal vez aussieht.
KompilierenMarcaSeparación
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&,Space&
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&
Dim Text2# ,textlen&
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)))   damits 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

'./../../funktionsreferenzen/XProfan/disponer/'>Disponer Texto#
Disponer Texto2#
 
23.05.2004  
 



Zum Quelltext


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

2.825 Views

Untitledvor 0 min.
RudiB.13.04.2020
Manfred Barei28.03.2020
GDL13.09.2015
rafl22.10.2014
Más...

Themeninformationen

Dieses Thema ha 1 subscriber:

Normann Strübli (1x)


Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie