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