Schrift (Font) in GUIEdit ändern

  • Hallo,


    kurze knappe Frage, wie kann ich beim UDF GuiEdit die Schriftart ändern?

    GUICtrlSetFont ($Textfeld, 14, 400 ,1) funktioniert da irgendwie nicht!

    Danke schon mal für die Hilfe

    Michael

    Einmal editiert, zuletzt von Michael B. (28. Januar 2011 um 13:14)

  • Hallo MichaelB.

    aber natürlich kann man in einem Edit-Control damit die Fonteigenschaften verändern, siehe

    Spoiler anzeigen
    [autoit]

    #region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_outfile=TextBausteine.exe
    #AutoIt3Wrapper_Compression=4
    #endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include<WindowsConstants.au3>
    #include <GuiComboBox.au3>

    [/autoit] [autoit][/autoit] [autoit]

    #cs ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    AutoIt Version: 3.3.6.1
    Author: AutoBert: http://www.autoit.de/index.php?page…4445#post164445

    [/autoit] [autoit][/autoit] [autoit]

    Skriptbeispiel für den Umgang mit INI-Files und ComboBox und Edit
    #ce ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Const $sElect = "Textbaustein auswählen"
    Global $sTB, $sIni = @ScriptDir & "\TextBausteine.ini"

    [/autoit] [autoit][/autoit] [autoit]

    If Not FileExists($sIni) Then ;Ini-File vorbelegen
    $sData = "Hilfe=Hier kannst du dir die Hilfe herunterladen." & @CRLF
    $sData &= "Tutorial=Hier gibt es ein Tutorial: http://wiki.autoit.de/wiki/index.php/Tutorial" & @CRLF
    $sData &= "richtigPosten=Autoit-Anfänger Guide / Wie poste ich richtig??" & @CRLF
    $sData &= "Buch peethebee=Sehr hilfreich ist auch das Buch von @peethebee"
    IniWriteSection($sIni, "Bausteine", $sData)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Global $sTitel = 'Beispiel für wiederkehrende Textbausteine'

    [/autoit] [autoit][/autoit] [autoit]

    Local $hMainGui = GUICreate($sTitel, 800, 520, 140, 150, BitOR($WS_MINIMIZEBOX, $WS_MAXIMIZEBOX, $WS_SIZEBOX))
    ;erzeugt eine GUI die zurückgebebene ID wird in der Variablen $hMainGui gespeichert
    ;die GUI hat BOXen für Mininmieren, Maximieren und ist in der Größe frei änderbar

    [/autoit] [autoit][/autoit] [autoit]

    Global $hedtBox = GUICtrlCreateEdit("", 10, 10, 600, 480, BitOR($ES_WANTRETURN, $ES_MULTILINE))
    GUICtrlSetFont(-1,14,1200)
    ;erzeugt ein Edit Steuerelement die zurückgegebe ID wird in der Variablen $hedtBox gespeichert
    GUICtrlSetResizing(-1, $GUI_DOCKBORDERs)
    ;verankert das Inputfield an allen Seiten
    ;beim Resizen bleibt es dadurch auf seiner Position und den Abstand zu den Seiten es ändert lediglich Breite und Höhe

    [/autoit] [autoit][/autoit] [autoit]

    Global $hcboTB = GUICtrlCreateCombo("", 620, 10, 150, 25)
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKRIGHT + $GUI_DOCKTOP)
    $hbtnAdd = GUICtrlCreateButton("&Hinzufügen Textbaustein", 620, 40, 150, 25)
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKRIGHT + $GUI_DOCKTOP)
    $hbtnDel = GUICtrlCreateButton("&Löschen Textbaustein", 620, 70, 150, 25)
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKRIGHT + $GUI_DOCKTOP)
    $hbtnSave = GUICtrlCreateButton("Änderungen &speichern", 620, 100, 150, 25)
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKRIGHT + $GUI_DOCKTOP)
    $hbtnToClip = GUICtrlCreateButton("&ins ClipBoard", 620, 150, 150, 25)
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKRIGHT + $GUI_DOCKTOP)
    $hbtnFromClip = GUICtrlCreateButton("&aus ClipBoard", 620, 180, 150, 25)
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKRIGHT + $GUI_DOCKTOP)
    $hbtnClear = GUICtrlCreateButton("&Neu (leere EditBox)", 620, 210, 150, 25)
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKRIGHT + $GUI_DOCKTOP)

    [/autoit] [autoit][/autoit] [autoit]

    $hbtnExit = GUICtrlCreateButton('Be&enden', 620, 260, 150, 25)
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKRIGHT + $GUI_DOCKBOTTOM)

    [/autoit] [autoit][/autoit] [autoit]

    read_INI()
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE, $hbtnExit
    GUIDelete($hMainGui)
    Exit
    Case $hcboTB ;ComboBoxauswahl wurde geändert
    show_Selection()
    Case $hbtnAdd ;Hinzufügen Textbaustein"
    _addTB()
    Case $hbtnDel ;"&Löschen Textbaustein"
    $sDel = GUICtrlRead($hcboTB) ;Kurzbezeichnung holen
    IniDelete($sIni, "Bausteine", $sDel) ;aus INI löschen
    GUICtrlSetData($hcboTB, "") ;ComboBox leeren
    read_INI() ;Routine zum INI einlesen aufrufen
    show_Selection() ;Routine zum anzeigen der Selektion aufrufen
    Case $hbtnSave ;"Änderungen &speichern"
    If GUICtrlRead($hcboTB) = $sElect Then
    ;es ist kein Textbaustein selektiert
    GUICtrlSetState($hbtnClear, $GUI_DISABLE)
    GUICtrlSetData($hedtBox, "")
    _addTB() ;
    Else
    $sId_TB = GUICtrlRead($hcboTB) ;Kurzbezeichnung holen
    _writeTB($sId_TB) ;Routine zum Schreiben aufrufen
    EndIf
    Case $hbtnToClip ;"&ins ClipBoard"
    ClipPut(GUICtrlRead($hedtBox))
    Case $hbtnFromClip ;"&aus ClipBoard"
    ;Daten aus Clipboard holen EditBox wird mit Clipboard überschrieben
    GUICtrlSetData($hedtBox, ClipGet())
    Case $hbtnClear ;"&Neu (leere EditBox)"
    GUICtrlSetData($hcboTB, $sElect,$sElect)
    show_Selection() ;Routine zum anzeigen der Selektion aufrufen
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func read_INI() ;Ini einlesen
    $list1 = IniReadSection($sIni, "Bausteine")
    If IsArray($list1) Then ;nur wenn Array da ansonsten Absturz
    For $i = 1 To $list1[0][0] ;von 1 bis zum letzen Eintrag im Array
    GUICtrlSetData($hcboTB, $list1[$i][0]) ;in ComboBox eintragen
    Next
    EndIf
    _GUICtrlComboBox_InsertString($hcboTB, $sElect, 0) ;$sElect (= "Textbaustein auswählen") an erster Stelle einfügen
    _GUICtrlComboBox_SetCurSel($hcboTB, 0) ;1 Eintrag selektieren
    EndFunc ;==>read_INI

    [/autoit] [autoit][/autoit] [autoit]

    Func _addTB()
    $write1 = GUICtrlRead($hedtBox)
    If $write1 <> "" Then ;nur wenn im Edit etwas eingetragen
    $write2 = InputBox("Baustein verwalten unter", "Bitte Kurzbegriff eingeben")
    If $write2 <> "" Then ;nur wenn ein Kurzbegrigg eingegeben
    _writeTB($write2) ;Routine zum schreiben aufrufen
    GUICtrlSetData($hcboTB, $write2, $write2) ;in ComboBox eintragen und gleichzeitig selektieren
    EndIf
    EndIf
    show_Selection() ;Routine die die Selektion zeigt aufrufen
    EndFunc ;==>_addTB

    [/autoit] [autoit][/autoit] [autoit]

    Func _writeTB($sId_TB) ;Routine zum Screiben in INI
    ;hier werdeb die Zeichen @CR (Wagebrücklauf) @LF Zeilenumbruche und @CRLF getauscht
    $write1 = GUICtrlRead($hedtBox)
    $write1 = StringReplace($write1, @CRLF, "_%CRLF%_")
    $write1 = StringReplace($write1, @CR, "_%CR%_")
    $write1 = StringReplace($write1, @LF, "_%LF%_")
    If $write1 <> "" Then IniWrite($sIni, "Bausteine", $sId_TB, $write1) ;wenn nicht leer in INI schreien
    EndFunc ;==>_writeTB

    [/autoit] [autoit][/autoit] [autoit]

    Func show_Selection() ;Selekzion anzeigen
    If GUICtrlRead($hcboTB) = $sElect Then ;es ist kein Textbaustein asgewählt
    GUICtrlSetState($hbtnClear, $GUI_DISABLE) ;Leeren-Button disablen
    GUICtrlSetData($hedtBox, "") ;also EDIT leeren
    Else
    GUICtrlSetState($hbtnClear, $GUI_ENABLE) ;Leeren-Button enablen
    $sId_TB = GUICtrlRead($hcboTB) ;Kurzbezeichnng holen
    ;ConsoleWrite("ausgewählt: " & $sId_TB & @CRLF) ;Kontrolausgabe in Console
    $write1 = IniRead($sIni, "Bausteine", $sId_TB, "") ;Baustein aus INI lesen
    ;hier werdeb die Zeichen für @CR (Wagebrücklauf) @LF Zeilenumbruche und @CRLF zurück getauscht
    $write1 = StringReplace($write1, "_%CRLF%_", @CRLF) ;
    $write1 = StringReplace($write1, "_%CR%_", @CR)
    $write1 = StringReplace($write1, "_%LF%_", @LF)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($hedtBox, $write1) ;Baustein in Edit-Box anzeigen
    EndIf
    EndFunc ;==>show_Selection

    [/autoit]

    siehe Zeile 39

    mfg autoBert

  • Hallo autoBert,

    danke für Deine Antwort.
    Aber ich benutze das UDF und habe es mit #include <GuiEdit.au3> eingebunden.
    Das Textfeld wird mit $Textfeld = _GUICtrlEdit_Create($Fenster,"",0,0,200,220,$ES_RIGHT+$WS_VSCROLL+$ES_MULTILINE) erzeugt.
    Und der Befehl GUICtrlSetFont ($Textfeld , 14, 400 ,1) funktioniert dann nicht.

    Michael

  • Weil ich verschiedene Funktionen aus der UDFnutzen möchte.
    z.B. die Art und Weise wie ich Text einfügen und verändern kann und vor allem, weil das Textfenster automatisch runter scrollt, wenn ich am Ende Text einfüge, usw...

    Michael

  • Ich hab mal in die UDF geschaut und eine Möglichkeit per _SendMessage gefunden. Ich hab damit mal ein kleines Beispiel gebastelt. ;)

    Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>
    #include <FontConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstants.au3>
    #include <GUIEdit.au3>
    #include <WinAPI.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $hFont_SegoeUI = _WinAPI_CreateFont(14, 0, 0, 0, 400, False, False, False, $DEFAULT_CHARSET, $OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $DEFAULT_QUALITY, 0, 'Segoe UI')
    $hFont_SegoeScript = _WinAPI_CreateFont(20, 0, 0, 0, 400, False, False, False, $DEFAULT_CHARSET, $OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $DEFAULT_QUALITY, 0, 'Segoe Script')

    [/autoit] [autoit][/autoit] [autoit]

    $hWnd = GUICreate("Font Example by name22", 300, 335)
    $cEdit_Text = _GUICtrlEdit_Create($hWnd, "", 5, 5, 290, 290)
    _SendMessage($cEdit_Text, 0x0030, $hFont_SegoeUI, True)
    $cButton_Font = GUICtrlCreateButton("Change Font", 5, 305, 290, 25)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    $iFont = 1

    [/autoit] [autoit][/autoit] [autoit]

    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    _WinAPI_DeleteObject($hFont_SegoeUI)
    _WinAPI_DeleteObject($hFont_SegoeScript)
    _GUICtrlEdit_Destroy($cEdit_Text)
    Exit
    Case $cButton_Font
    Switch $iFont
    Case 0
    _SendMessage($cEdit_Text, 0x0030, $hFont_SegoeUI, True)
    Case 1
    _SendMessage($cEdit_Text, 0x0030, $hFont_SegoeScript, True)
    EndSwitch
    $iFont = BitXOR($iFont, 1)
    EndSwitch
    WEnd

    [/autoit]
  • Bei aller Liebe, die Funktion _GUICtrlEdit_Create() ist macht für mich in AU3-GUIs absolut keinen Sinn. Du kannst dafür immer die Funktion GUICtrlCreateEdit() nutzen, ohne irgendwelche Einschränkungen befürchten zu müssen. In fast allen Funktionen von GuiEdit.au3 findet sich die Zeile

    [autoit]

    If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)

    [/autoit]


    so dass sie auch mit der von GUICtrlCreateEdit() zurückgegebenen ControlID klaglos funktionieren (wenn nicht der Degubmodus eingeschaltet ist, denn dafür kommt das Statement zu spät). Und die übrigen paar Funktionen lassen sich aufrufen, indem man sich per

    [autoit]

    $idEdit = GUICtrlCreateEdit("Edit", 10, 10, 150, 150)
    $hEdit = GUICtrlGetHandle(-1)

    [/autoit]


    das HWND des Edits holt. Für Dein Edit kannst Du dann den vollen Funktionsumfang sowohl der eingebauten als auch der Funktionen aus GuiEdit.au3 nutzen. Ist das nicht toll? :rock: