PanelGadget flackern beim wechseln
Verfasst: 06.06.2019 15:54
Hallo an alle
Ich habe mich seit einigen Tagen etwas intensiver mit der Api beschäftigt,
dank rsbasic's Api-Library,
und hab,natürlich, erst mal alles(fast) ausprobiert.
Ind bin auf 'dumme' Gedanken gekommen.
Dabei ist mir allerdings ein verhalten aufgefallen,von dem ich nicht rausbekomme,woher es kommt.
Anbei ein kleiner Test-Code,mit verschiedenen Dingen.
Das Problem:
das rechte PanelGadget arbeitet wie erwartet
das linke flackert aber beim hinzufügen oder wechseln
ich weiss einfach nicht,was ich da machen könnte
Ein kleiner Tip wäre nett
Dank im vorraus
Olaf
Ich habe mich seit einigen Tagen etwas intensiver mit der Api beschäftigt,
dank rsbasic's Api-Library,
und hab,natürlich, erst mal alles(fast) ausprobiert.
Ind bin auf 'dumme' Gedanken gekommen.
Dabei ist mir allerdings ein verhalten aufgefallen,von dem ich nicht rausbekomme,woher es kommt.
Anbei ein kleiner Test-Code,mit verschiedenen Dingen.
Das Problem:
das rechte PanelGadget arbeitet wie erwartet
das linke flackert aber beim hinzufügen oder wechseln
ich weiss einfach nicht,was ich da machen könnte
Ein kleiner Tip wäre nett
Code: Alles auswählen
;*******************************************
;* Quick'n'Dirty- Code
;*
;* Dank an und Anregung von
;* rsbasic's "WinAPI Library"
;*
;* und MicroSofts Api- Doc
;*
;* und allen,die Code zur verfügung gestellt haben
;*
;*********************************************
EnableExplicit
Global ed,ed1,ed2,ed3,win,stts,sth,mssg,main,tool,men,fnt,fntol
Global vary,func,cons,var,deb
Global OldProc,ixs
Global defaultBrush = CreateSolidBrush_(GetSysColor_(#COLOR_3DFACE))
Define i,j,k,ev,pnlnr
Declare.s Format(Zahl)
Declare LineCallBack()
Declare CodeGadget(nr,x,y,xx,yy,fl)
Structure MyGadget
gdgtnr.i
ed1.i
ed2.i
ed3.i
x.i
y.i
xx.i
yy.i
fl.i
anz.i
tag.s
iks.i
EndStructure
Global a=-1
Global Dim qced.MyGadget(15)
;**************************************************
Procedure myPGcallback(hwnd, msg, wParam, lParam)
Protected Result = CallWindowProc_(OldProc, hwnd, msg, wParam, lParam)
Protected Gadget
Protected Color
Protected tabText$
Protected *PGdis.DRAWITEMSTRUCT
Select msg
Case #WM_DRAWITEM
*PGdis.DRAWITEMSTRUCT = lParam
If *PGdis\CtlType = #ODT_TAB
Gadget = GetProp_(*PGdis\hwnditem, "PB_ID")
If *PGdis\itemID = GetGadgetState(Gadget)
Color = #Red
tabText$ = GetGadgetItemText(Gadget, *PGdis\itemID)
FillRect_(*PGdis\hdc, *PGdis\rcItem, defaultBrush)
SetTextColor_(*PGdis\hdc, Color)
SetBkMode_(*PGdis\hdc, #TRANSPARENT)
DrawText_(*PGdis\hdc, tabText$, Len(tabText$), *PGdis\rcItem, #DT_LEFT | #DT_SINGLELINE | #DT_VCENTER | #DT_NOCLIP)
Else
tabText$ = GetGadgetItemText(Gadget, *PGdis\itemID)
FillRect_(*PGdis\hdc, *PGdis\rcItem, defaultBrush)
SetTextColor_(*PGdis\hdc, #Black)
SetBkMode_(*PGdis\hdc, #TRANSPARENT)
DrawText_(*PGdis\hdc, tabText$, Len(tabText$), *PGdis\rcItem, #DT_LEFT | #DT_SINGLELINE | #DT_VCENTER | #DT_NOCLIP)
EndIf
EndIf
EndSelect
ProcedureReturn Result
EndProcedure
Procedure CodeGadget(nr,ax,ay,axx,ayy,afl)
Protected gdgtnr
Protected ret$
a+1
With qced(a)
\x=ax
\y=ay
\xx=axx
\yy=ayy
\fl=afl
\tag=" New"
\anz=a
EndWith
OpenGadgetList(main)
AddGadgetItem(main,qced(a)\anz,qced(a)\tag)
gdgtnr=ContainerGadget(nr,ax,ay,axx,ayy,afl)
SetGadgetColor(gdgtnr,#PB_Gadget_BackColor,$B7BCBC)
ed1=EditorGadget(#PB_Any, 36,0, GadgetWidth(gdgtnr)-42, GadgetHeight(gdgtnr)-32)
ed2=TextGadget(#PB_Any, 0,0, 30, GadgetHeight(gdgtnr),Format(1))
ed3=TextGadget(#PB_Any, GadgetWidth(ed2),0, 6, GadgetHeight(gdgtnr),"")
With qced(a)
\gdgtnr=gdgtnr
\ed1=ed1
\ed2=ed2
\ed3=ed3
EndWith
SetWindowTheme_(GadgetID(ed1), @"", @"")
SetWindowLongPtr_(GadgetID(ed1), #GWL_EXSTYLE, 0)
SetWindowPos_(GadgetID(ed1), 0, 0, 0, 0, 0, #SWP_NOMOVE | #SWP_NOSIZE | #SWP_FRAMECHANGED)
SetGadgetColor(ed1,#PB_Gadget_BackColor,$B7BCBC)
SetGadgetColor(ed2,#PB_Gadget_BackColor,$7D8585)
SetGadgetColor(ed3,#PB_Gadget_BackColor,$7D8585)
CloseGadgetList()
CloseGadgetList()
LineCallBack()
BindGadgetEvent(ed1,@LineCallBack())
SetActiveGadget(qced(a)\ed1)
ProcedureReturn qced(a)\anz
EndProcedure
Procedure.s Format(zahl)
Protected ret$
If zahl<10
ret$=" "+Str(zahl)
ElseIf zahl<100
ret$=" "+Str(zahl)
ElseIf zahl>=100
ret$=Str(zahl)
EndIf
ProcedureReturn ret$
EndProcedure
Procedure LineCallBack()
Protected POINT.POINT
Protected char
Protected lineindex
Protected colindex
Protected col
Protected row
Protected lnnr
Protected fl
Protected lntxt$
Protected i
GetCaretPos_(@POINT)
char = SendMessage_(GadgetID(ed1), #EM_CHARFROMPOS, 0, @POINT)
lineindex = SendMessage_(GadgetID(ed1), #EM_LINEFROMCHAR, char, 0)
colindex = SendMessage_(GadgetID(ed1), #EM_LINEINDEX, lineindex, 0)
col = char-colindex
row = lineindex + 1
StatusBarText(stts,0 ,"Zeile:" + Str(row) + " Spalte:" + Str(col))
lnnr=SendMessage_(GadgetID(ed1),#EM_GETLINECOUNT,0,0)
fl=SendMessage_(GadgetID(ed1),#EM_GETFIRSTVISIBLELINE,0,0)+1
For i=fl To lnnr-1
lntxt$=lntxt$+Format(i)+Chr(13)+Chr(10)
Next i
lntxt$=lntxt$+Format(i)
SetGadgetText(ed2,lntxt$)
EndProcedure
;**************************************************
fnt=LoadFont(#PB_Any,"consolas",12)
fntol=LoadFont(#PB_Any,"consolas",8)
SetGadgetFont(#PB_Default,FontID(fnt))
SetThemeAppProperties_(0)
win=OpenWindow (#PB_Any,0,0,800,600,"Q-Code-Gadget",#PB_Window_Invisible|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget|#PB_Window_Maximize)
SetWindowLongPtr_(WindowID(win),#GWL_EXSTYLE,GetWindowLongPtr_(WindowID(win),#GWL_EXSTYLE) | #WS_EX_LAYERED)
SetLayeredWindowAttributes_(WindowID(win), 0, 0, #LWA_ALPHA)
HideWindow(win,#False)
men=CreateMenu(1,WindowID(win))
MenuTitle("File")
MenuItem(1,"New")
stts=CreateStatusBar(#PB_Any,WindowID(win))
AddStatusBarField(120)
AddStatusBarField(100)
sth=StatusBarHeight(stts)
main=PanelGadget(#PB_Any,3,20,WindowWidth(win)-215,WindowHeight(win)-sth-93)
CodeGadget(#PB_Any,0,0,GadgetWidth(main),GadgetHeight(main),#PB_Container_Double)
CloseGadgetList()
mssg=TextGadget(#PB_Any,3,GadgetHeight(main)+20,WindowWidth(win)-215,53,"Text$")
SetGadgetColor(mssg,#PB_Gadget_BackColor,$7D8585)
tool=PanelGadget(#PB_Any, GadgetWidth(main)+3,20, WindowWidth(win)-GadgetWidth(main)-5 ,WindowHeight(win)-sth-40)
AddGadgetItem(tool,0,"Values")
vary=PanelGadget(#PB_Any,0,0,GadgetWidth(tool),GadgetHeight(tool))
AddGadgetItem(vary,0,"Variable")
var=TextGadget(#PB_Any,0,0,GadgetWidth(vary),GadgetHeight(vary),"Variables")
SetGadgetColor(var,#PB_Gadget_BackColor,$ABABAB)
SetGadgetColor(var,#PB_Gadget_FrontColor,$160200)
AddGadgetItem(vary,-1,"Function")
func=TextGadget(#PB_Any,0,0,GadgetWidth(vary),GadgetHeight(vary),"Functions()")
SetGadgetColor(func,#PB_Gadget_FrontColor,$E71505)
SetGadgetColor(func,#PB_Gadget_BackColor,$ABABAB)
AddGadgetItem(vary,-1,"Constant")
cons=TextGadget(#PB_Any,0,0,GadgetWidth(vary),GadgetHeight(vary),"#Constants")
SetGadgetColor(cons,#PB_Gadget_BackColor,$ABABAB)
SetGadgetColor(cons,#PB_Gadget_FrontColor,$8E0596)
CloseGadgetList()
AddGadgetItem(tool,1,"Debug")
deb=TextGadget(#PB_Any,0,0,GadgetWidth(vary),GadgetHeight(vary),"Debug "+Chr(34)+"Vary=8\"+Chr(34))
SetGadgetColor(deb,#PB_Gadget_BackColor,$ABABAB)
SetGadgetColor(deb,#PB_Gadget_FrontColor,$0C01EB)
CloseGadgetList()
SetGadgetFont(vary,FontID(fntol))
SetWindowLong_(GadgetID(main), #GWL_STYLE, GetWindowLong_(GadgetID(main), #GWL_STYLE) | #TCS_OWNERDRAWFIXED)
OldProc = SetWindowLong_(GetParent_(GadgetID(main)), #GWL_WNDPROC, @myPGcallback())
For i=0 To 255
SetWindowLongPtr_(WindowID(win),#GWL_EXSTYLE,GetWindowLongPtr_(WindowID(win),#GWL_EXSTYLE) | #WS_EX_LAYERED)
SetLayeredWindowAttributes_(WindowID(win), 0, i, #LWA_ALPHA)
Delay(3)
Next i
Repeat
ev=WaitWindowEvent()
Select ev
Case #PB_Event_CloseWindow
a=255
For i=a To 0 Step -1
SetWindowLongPtr_(WindowID(win),#GWL_EXSTYLE,GetWindowLongPtr_(WindowID(win),#GWL_EXSTYLE) | #WS_EX_LAYERED)
SetLayeredWindowAttributes_(WindowID(win), 0, i, #LWA_ALPHA)
Delay(5)
Next i
End
Case #PB_Event_Menu
Select EventMenu()
Case 1
CodeGadget(#PB_Any,0,0,GadgetWidth(main),GadgetHeight(main),#PB_Container_Double)
EndSelect
EndSelect
pnlnr=GetGadgetState(main)
SetActiveGadget(qced(pnlnr)\ed1)
StatusBarText(stts,1 ,"TabNr.: "+Str(pnlnr+1))
ForEver
Olaf