Leider habe ich wieder mal ein paar Fragen und zwar diesmal um das RichEdit Control.
Als Beispiel hab ich unten mal einen Code angefügt
Bitte schaut doch mal ob ihr da noch Fehler bzw. Verbesserungen findet.
Dies ist wieder nur ein Auszug, der Rest ist aber für meine Fragen nicht wichtig.
Frage 1
Zuerst eine Frage ob da nicht ein ‚Fehler‘ selbst im RichEdit Control ist.
Wenn ihr das Beispielprogramm startet und dann mit der Bild-Runter Taste ganz nach unten scrollt ist im Anzeigefenster so ca. die Hälfte vom Text sichtbar (Zeile 82 -100). Die andere Hälfte ist leer. Scroll ich nun mit der Maus (Mausrad oder Slider am rechten Rand) langsam nach oben, springt plötzlich der Inhalt an den unteren Rand des RichEdit Fenster. Sieht irgendwie unschön aus, oder?
Sollte die Bild-runter Taste eigentlich nur soweit springen das die letzte Textzeile am unteren Rand steht? (Geht auch mit Slider Page Down falsch)
Frage 2
Ich habe eine Funktion mit der ich den Text in die Zwischenablage kopiere. Falls ein Text selektiert ist nur diesen kopieren und falls kein Text selektiert ist den kompletten Text. Geht ja auch soweit, jedoch „blinkt“ der Text beim Kopieren kurz weil beim Aufrufen der Funktion ClipboardButton der Text nicht mehr selektiert ist. Beim kompletten Text muß ich zudem den Text ja erst selektieren und wieder deselektieren. Sieht man auch irgendwie als kurzes „Blinken“. Sieht auch irgendwie unschön aus.
Frage 3
Das Editor-Fenster soll in der Größe veränderbar sein. Habe ich mit der Funkt WM_SIZE gelöst (gefunden). Funktioniert ja soweit gut, selbst die Position der drei Buttons wird mit angepasst.
Was aber schöner wäre, wenn man das Fenster nur bis zu einer bestimmten Größe verkleinern könnte. So kann man es ja komplett zusammenschieben. Auch irgendwie unschön.
Ich hoffe das sind nicht zu viele Fragen auf einmal.
Alles ja nicht wirklich gravierend, aber eventuell gibt’s auch hier bessere Lösungen.
Danke schon mal und noch schöne Weihnachten.
#include <MsgBoxConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiRichEdit.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1) ; Change to OnEvent mode
Local $hEditorGui = GUICreate("Mini Editor", 500, 600, -1, -1, BitOR($WS_SIZEBOX, $WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU))
GUISetOnEvent($GUI_EVENT_CLOSE, "CloseButton")
Local $IDClipboardButton = GUICtrlCreateButton("In Zwischenablage kopieren", 10, 560, 160)
GUICtrlSetOnEvent(-1, "ClipboardButton")
Local $IDSaveButton = GUICtrlCreateButton("Speichern", 200, 560, 80)
GUICtrlSetOnEvent(-1, "SaveButton")
Local $IDCloseButton = GUICtrlCreateButton("Abbrechen", 320, 560, 80)
GUICtrlSetOnEvent(-1, "CloseButton")
Local $hRichEdit = _GUICtrlRichEdit_Create($hEditorGui, "", 10, 10, 480, 540, BitOR($ES_MULTILINE, $ES_WANTRETURN, $WS_VSCROLL, $WS_HSCROLL))
; Fenster mit Testzeilen füllen
For $x = 0 To 100
_GUICtrlRichEdit_AppendText($hRichEdit, "Zeile " & $x & ": Dies ist ein Beispieltext." & @CRLF)
Next
; Cursorpos an den Textanfang
_GUICtrlRichEdit_SetSel($hRichEdit, 0, 0)
GUISetState(@SW_SHOW, $hEditorGui)
; Funktion um das Fenster bei Grössenänderung anzupassen
GUIRegisterMsg($WM_SIZE, "WM_SIZE") ; Register the function
While 1
Sleep(100)
WEnd
;------------------------------------------------------------------------------------------------------
; ab hier Funktionen
;------------------------------------------------------------------------------------------------------
; Fenstergrösse ändern (für Editor Fenster)
Func WM_SIZE($hWnd, $iMsg, $wParam, $lParam)
Local $iWidth = _WinAPI_LoWord($lParam)
Local $iHeight = _WinAPI_HiWord($lParam)
If $iWidth < 400 Then
_WinAPI_MoveWindow($hRichEdit, 10, 10, $iWidth - 20, $iHeight - 120)
If $iWidth < 170 Then
GUICtrlSetData($IDClipboardButton, "In Zwisch...")
GUICtrlSetPos($IDClipboardButton, 10, $iHeight - 100, 80)
Else
GUICtrlSetData($IDClipboardButton, "In Zwischenablage kopieren")
GUICtrlSetPos($IDClipboardButton, 10, $iHeight - 100, 160)
EndIf
GUICtrlSetPos($IDSaveButton, 10, $iHeight - 70)
GUICtrlSetPos($IDCloseButton, 10, $iHeight - 40)
Else
_WinAPI_MoveWindow($hRichEdit, 10, 10, $iWidth - 20, $iHeight - 60)
GUICtrlSetPos($IDClipboardButton, 10, $iHeight - 40)
GUICtrlSetPos($IDSaveButton, 200, $iHeight - 40)
GUICtrlSetPos($IDCloseButton, 320, $iHeight - 40)
EndIf
Return 0
;Return $GUI_RUNDEFMSG
EndFunc ;==>WM_SIZE
; kompletten oder nur selektierten Text in Zwischenablage
Func ClipboardButton()
; akt. Cursorpos merken
Local $aPos = _GUICtrlRichEdit_GetSel($hRichEdit)
; Pos des Anzeigefensters merken
$aScrollpos = _GUICtrlRichEdit_GetScrollPos($hRichEdit)
If _GUICtrlRichEdit_IsTextSelected($hRichEdit) Then
;Text wurde selektiert und nur dieser wird kopiert
_GUICtrlRichEdit_SetSel($hRichEdit, $aPos[0], $aPos[1])
_GUICtrlRichEdit_Copy($hRichEdit)
Else
; kompletter Text soll kopiert werden
_GUICtrlRichEdit_SetSel($hRichEdit, 0, -1)
_GUICtrlRichEdit_Copy($hRichEdit)
; alte Cursorpos wieder herstellen
_GUICtrlRichEdit_SetSel($hRichEdit, $aPos[0], $aPos[1])
EndIf
; Fensterausschnitt wieder herstellen
_GUICtrlRichEdit_SetScrollPos($hRichEdit, $aScrollpos[0], $aScrollpos[1])
EndFunc ;==>ClipboardButton
Func SaveButton()
MsgBox($MB_OK, "INFO", "Speichern wurde gedrückt", 3, $hEditorGui)
EndFunc ;==>SaveButton
Func CloseButton()
Exit
EndFunc ;==>CloseButton
Alles anzeigen
Beitrag bearbeitet: Textformatierung nochmal geändert