Das Redraw des EditorGadgets unterdrücken, während man
den Text mit dem Programm bearbeitet. Das spart Zeit und sieht besser aus.
Code: Alles auswählen
; Author: Michael 'neotoma' Taupitz
EnableExplicit
;Declares
Declare.s GetTestText()
Declare.l FlickerWork(Gadget)
Declare.l Editor_DisableRedraw(Gadget, bVal.i=#True)
Define Event.i
If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
EditorGadget(1,10,10,480,210,0)
SetGadgetText(1,GetTestText())
ButtonGadget(100 , 10,225,100,20,"Flicker")
ButtonGadget(150 , 390,225,100,20,"Non Flicker")
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget
Select EventGadget()
Case 100 ; Flicker
SendMessage_(GadgetID(1), #EM_SETSEL, -1, 0)
FlickerWork(1)
Case 150 ; NonFlicker
SendMessage_(GadgetID(1), #EM_SETSEL, -1, 0)
Editor_DisableRedraw(1) ;Disable Redraw
FlickerWork(1)
Editor_DisableRedraw(1,#False) ;Enable Redraw
;This to mak a Redrwa after Finishing - to see the Changes.
RedrawWindow_(GadgetID(1),0,0,#RDW_UPDATENOW|#RDW_ERASE|#RDW_INVALIDATE)
EndSelect
EndIf
Until Event = #PB_Event_CloseWindow
EndIf
;==============================================================================
; Procedure Name ....: Editor_DisableRedraw
; Description .......: When performing several actions, or actions on text that
; is not currently in the visible window, or when changing
; selections repeatedly - an EditorGadget may flicker.
; Disabling the Gadget with WM_SetReDraw before taking
; actions, then turning enabling it after the actions have
; been taken can significantly improve performance..
;
; Syntax ............: Editor_DisableRedraw(Gadget, bVal.i=#True)
; Parameter(s) ......: Gadget - A PB-GadgetId
; bVal - #True (default) to Disable Redraw
; - #False to Enable / reenable Redraw
; Return value(s) ...: Nothing
;
; Author(s) .........: Michael 'neotoma' Taupitz
; Creation Date .....: 18.06.2010
; Version ...........: 0.0.0.1
; Last Update .......:
; Remarks ...........:
;==============================================================================
Procedure.l Editor_DisableRedraw(Gadget, bVal.i=#True)
SendMessage_(GadgetID(Gadget),#WM_SETREDRAW,1!bVal ,0)
EndProcedure
;Testprocedure to make some Operations on the EditorGadget
Procedure.l FlickerWork(Gadget)
Protected i.i,m.i,n.i,iResult.i
For i = 1 To 1000
m = Random(240)
n = m + Random(240-m)
iResult = SendMessage_(GadgetID(Gadget), #EM_SETSEL, m, n+1)
Next i
iResult = SendMessage_(GadgetID(Gadget), #EM_SETSEL, 0,2)
EndProcedure
;Create a Test-Text
Procedure.s GetTestText()
Protected i
Protected TestText.s = "{\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fnil\fcharset0 Tahoma;}{\f1\fnil\fcharset0 MS Shell Dlg;}{\f2\fnil\fcharset2 Symbol;}}"
TestText + "{\colortbl ;\red255\green170\blue85;\red0\green85\blue255;}"
TestText + "\viewkind4\uc1\pard\qj\f0\fs32 "
For i = 0 To 120
TestText + Str(i) + "{\tab}$" + RSet(Hex(i), 4, "0") + "{\tab}" + Str(Random(1000)) + "\par"+#CRLF$
Next
TestText + "}"
ProcedureReturn TestText
EndProcedure
Alle Rechtschreibfehler unterliegen der GPL und dürfen frei kopiert und modifiziert werden.