neue Zeile und Festbestandteil in einem Edit

  • Morgen,

    Problem1:
    In einem Edit möchte ich, wenn man Enter drückt, dass er auf eine neue Zeile springt.

    [autoit]


    ;[...]
    While 1

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

    $Msg = GUIGetMsg()
    Select
    Case $Msg = $GUI_EVENT_CLOSE
    Exit
    EndSelect
    If _IsPressed("0D", Default) = 1 Then
    GUICtrlSetData($Edit, "You pressed Enter key")
    EndIf
    WEnd

    [/autoit]


    So geht es jedenfalls nicht. Dies über ein Style zu lösen fällt eigentlich aus, da ich später dann noch will, dass wenn man etwas eingegeben hat dies per Druck auf die Entertaste verarbeitet wird. (kann man ja dann mit in die _ispressed schleife mit rein nehmen und abfragen). Nur wie gesagt so wie ich es da gemacht habe geht es nicht. Also bitte sagt mir mal, was daran falsch ist.


    Problem 2:
    Wie kann ich in einem Edit einen nicht löschbaren Eintrag erzeugen? Sprich, ich will, dass in jeder Zeile immer vorne etwas steht, was man nicht editieren kann. Allerdings soll alles, was nach diesem Teil kommt, ganz normal editierbar sein.


    Vielen Dank schonmal für die Hilfe

    Wauev

    Flensburg ist wie Payback - wenn man 18 Punkte hat bekommt man ein Fahrrad.

  • Nehm doch bei Problem 1 ein

    [autoit]

    HotKeySet("{ENTER}", $Deine_Funktion)

    [/autoit]

    Projekte: Keine größeren (und fertigen)
    Gegen Internetzensur:
    https://epetitionen.bundestag.de/index.php?acti…s;petition=3860
    (Zeichnungsfrist abgelaufen)
    __________________________________________________________________________________________________________________________________
    Dieser Beitrag wurde bereits 264 mal editiert, zuletzt von »Fast2« (30. Februar 2009, 12:99)

  • Hi,

    Thx für deine Antwort. Das ist natürlich ne Möglichkei und die werde ich wohl jetzt auch nutzen. Ist nur trotzdem seltsam, wieso es nicht anders ging, weil ich finde in der _ispressed-abfrage einfach nicht den Punkt, der falsch ist...


    Waluev

    Flensburg ist wie Payback - wenn man 18 Punkte hat bekommt man ein Fahrrad.

  • Problem1:
    In einem Edit möchte ich, wenn man Enter drückt, dass er auf eine neue Zeile springt

    Ich hoffe mal, dass ich dich richtig verstanden habe. Also du willst, dass er jedes "You pressed Enter key" in eine neue Zeile schreibt, oder ?
    Falls ja, mach dahinter einfach mal ein @CRLF, das steht für einen Zeilenumbruch. Das ist einzubauen wie eine Variable:
    "You pressed Enter key" & @CRLF

    Zitat

    Problem 2:
    Wie kann ich in einem Edit einen nicht löschbaren Eintrag erzeugen? Sprich, ich will, dass in jeder Zeile immer vorne etwas steht, was man nicht editieren kann. Allerdings soll alles, was nach diesem Teil kommt, ganz normal editierbar sein.

    Soweit ich weiß, ist das nicht möglich. Da ich aber selbst erst einige Monate intensiv mit AutoIt zu tun hab, weiß ich es leider nich zu 100%...
    Du könntest wenn dann 2 Edit-Felder nebeneinander setzen, sodass das zweite (editierbare) das andere soweit überlappt, dass kein Rand zu sehen ist. Im ersten könntest du dann zB durchnummerieren und das ganze auf ReadOnly setzen (deaktivieren)

  • Zu 1. nein, er zeigt ja garnichts an, weder auf der bestehenden zeile, noch auf einer neuen (wenn ich das Macro nehmen würde).
    Zu 2.Wäre eine Möglichkeit, aber doch sehr umständlich.... :(


    Waluev

    Flensburg ist wie Payback - wenn man 18 Punkte hat bekommt man ein Fahrrad.

  • hi

    hab mal ne art console geschrieben mit der man das machen konnte.. ich such mal...

    edit: hmm.. schade :( ich habs nicht mehr und im forum hab ich nur den guiteil gepostet und nicht das ganze script...


    mfg

    derda

    Einmal editiert, zuletzt von derda (1. Dezember 2007 um 11:34)

  • Bei mir drehts sich auch um eine Konsole :)

    Also wenn du noch rausbekommen könntest, wie du das gemacht hast mit dem uneditierbaren teil, wäre echt super...


    Thx schonmal
    Waluev

    Flensburg ist wie Payback - wenn man 18 Punkte hat bekommt man ein Fahrrad.

  • hi


    iwie so ^^

    Spoiler anzeigen
    [autoit]

    #include <misc.au3>
    #include <GUIConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 609, 292, 193, 125)
    $Input1 = GUICtrlCreateInput("Input1", 624, 304, 9, 21,$gui_focus)
    $Edit1 = GUICtrlCreateEdit("", 8, 8, 569, 265,$es_readonly)
    GUICtrlSetData(-1, "Edit1")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    _write("123:")
    _write(@CRLF&_get())
    _write(@CRLF&"123 tadaa")
    While 1
    WEnd

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

    Func _write($text)
    GUICtrlSetData($Edit1,GUICtrlRead($Edit1)&$text)
    EndFunc

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

    Func _get()
    $len = StringLen(GUICtrlRead($Edit1))
    While Not _IsPressed("0d")
    Select
    Case _IsPressed("41");a
    While _IsPressed("41")
    Sleep(1)
    WEnd
    GUICtrlSetData($Edit1,GUICtrlRead($Edit1)&"a")

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

    GUICtrlSetData($Edit1,GUICtrlRead($Edit1)&"A")
    Case _IsPressed("08")
    $len1 = StringLen(GUICtrlRead($Edit1))
    If $len < $len1 Then GUICtrlSetData($Edit1,StringTrimRight(GUICtrlRead($Edit1),1))
    EndSelect
    WEnd
    Return StringRight(GUICtrlRead($Edit1),$len)
    EndFunc

    [/autoit]

    bernd670: Spoiler-Tags eingefügt!

    Einmal editiert, zuletzt von bernd670 (2. Dezember 2007 um 22:25)

  • Hab derdas Funktion mal probiert, versteh aber nicht so ganz was die bezwcken soll.


    Ich will einfach nur, dass wenn ich Enter drücke er auf eine neue Zeile springt und da nen Bestandteil davor hat, der uneditierbar ist.

    Waluev

    Flensburg ist wie Payback - wenn man 18 Punkte hat bekommt man ein Fahrrad.

  • Ich weiß zwar keine Lösung aber mal ne Klarstellung für mich: Du möchtest sowas wie in der Eingabeaufforderung, richtig?

    Projekte: Keine größeren (und fertigen)
    Gegen Internetzensur:
    https://epetitionen.bundestag.de/index.php?acti…s;petition=3860
    (Zeichnungsfrist abgelaufen)
    __________________________________________________________________________________________________________________________________
    Dieser Beitrag wurde bereits 264 mal editiert, zuletzt von »Fast2« (30. Februar 2009, 12:99)

    • Offizieller Beitrag

    Das geht in etwa so:
    - wenn Enter gedrückt Zeilenumbruch einfügen und Festtext in die neue Zeile schreiben
    - in einer Schleife ständig die Länge der aktuellen Zeile überwachen
    - wird durch Rückwärtslöschen oder Markieren und anschließendem Löschen die Mindestlänge für den Festtext unterschritten, aktiviere Undo
    Ist aber ziemlich aufwändig.

    • Offizieller Beitrag

    Ich hab dir hier mal eine Variante erstellt, die vielleicht noch nicht 100% aber recht gut läuft.
    Du benötigst dazu die "DLLCallBack.au3" aus der au3_callback_v6.5

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <GUIEdit.au3>
    #include '...\au3_callback_v6.5\DllCallBack.au3' ; dein Pfad zur DLLCallBack
    Opt("GUIOnEventMode", 1)
    Global Const $WH_KEYBOARD_LL = 13
    Global $hHook, $pStub_KeyProc
    Global $pStub_KeyProc = _DllCallBack ("_KeyProc","int;ptr;ptr")
    Global $hmod = DllCall("kernel32.dll","hwnd","GetModuleHandle","ptr",0)
    Global $hHook = DllCall("user32.dll","hwnd","SetWindowsHookEx","int", _
    $WH_KEYBOARD_LL,"ptr",$pStub_KeyProc,"hwnd",$hmod[0],"dword",0)
    Global $buffer = ""

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

    Dim $Fest = '<Festtext>'
    Dim $minLen = StringLen($Fest)

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

    $Form1 = GUICreate("Form1", 633, 310, 193, 115)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
    $Edit1 = GUICtrlCreateEdit("", 24, 16, 585, 265, BitOR($WS_VSCROLL, $WS_HSCROLL, $ES_AUTOVSCROLL, $ES_AUTOHSCROLL))
    GUICtrlSetData(-1, $Fest)
    GUISetState(@SW_SHOW)
    _GUICtrlEdit_SetSel($Edit1, -1, -1) ; Cursor hinter Festtext

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

    While 1
    Sleep(10)
    WEnd

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

    Func Form1Close()
    Exit
    EndFunc

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

    Func EvaluateKey($keycode)
    Select
    Case $keycode = 13 ; Enter
    If _checkCurrentRow() Then _
    _GUICtrlEdit_AppendText($Edit1, @CRLF & $Fest)
    Case $keycode = 8 Or $keycode = 46 ; Backspace oder Delete
    _checkCurrentRow()
    EndSelect
    EndFunc

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

    Func _checkCurrentRow()
    $indx = _GUICtrlEdit_LineFromChar($Edit1)
    $currLen = _GUICtrlEdit_LineLength($Edit1, $indx)
    $pos1stInLine = _GUICtrlEdit_LineIndex($Edit1, $indx)
    $pos = _GUICtrlEdit_GetSel($Edit1)
    $lenInLine = $pos[0]-$pos1stInLine
    If $currLen <= $minLen Or $lenInLine <= $minLen Then
    _GUICtrlEdit_Undo($Edit1)
    Return False
    EndIf
    Return True
    EndFunc

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

    Func _KeyProc($nCode, $wParam, $lParam)
    Local $ret,$KEYHOOKSTRUCT
    If $nCode < 0 Then
    $ret = DllCall("user32.dll","long","CallNextHookEx","hwnd",$hHook[0], _
    "int",$nCode,"ptr",$wParam,"ptr",$lParam)
    Return $ret[0]
    EndIf
    If $wparam = 256 Then
    $KEYHOOKSTRUCT = DllStructCreate("dword;dword;dword;dword;ptr",$lParam)
    EvaluateKey(DllStructGetData($KEYHOOKSTRUCT,1))
    EndIf
    $ret = DllCall("user32.dll","long","CallNextHookEx","hwnd",$hHook[0], _
    "int",$nCode,"ptr",$wParam,"ptr",$lParam)
    Return $ret[0]
    EndFunc

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

    Func OnAutoItExit()
    DllCall("user32.dll","int","UnhookWindowsHookEx","hwnd",$hHook[0])
    EndFunc

    [/autoit]


    Ich hatte anfangs mit _IsPressed() probiert, aber damit läßt sich das Problem nicht lösen, schon allein weil du mit dieser Funktion nicht die 'Delete'-Taste abfangen kannst.

    Edit: Hab noch eine Verbesserung eingefügt, ich glaube nun sind wir bei 100% :rolleyes:

  • Also recht herzlichen dank, aber wenn ich sehe was das fürn rießen Aufwand ist, grad mal m ne neue Zeile mit Festbestandteil zu bekommen, dann grauts mir irgendwo schon vorm Hauptteil....


    Trotzdem rießen THX für den Aufwand


    Waluev

    Flensburg ist wie Payback - wenn man 18 Punkte hat bekommt man ein Fahrrad.