Aktuelle Zeit: 18.06.2019 22:53

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: PanelGadget flackern beim wechseln
BeitragVerfasst: 06.06.2019 15:54 
Offline
Benutzeravatar

Registriert: 07.12.2017 17:30
Wohnort: Frankrich
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

Code:
;*******************************************
;*   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



Dank im vorraus

Olaf

_________________
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: PanelGadget flackern beim wechseln
BeitragVerfasst: 06.06.2019 15:57 
Offline
Admin
Benutzeravatar

Registriert: 05.10.2006 18:55
Wohnort: Deutschland::Berlin()
Bei mir flackert nichts. Da muss ein anderer dir helfen.
Vielleicht hilft ein SmartWindowRefresh()?

Bezüglich deiner Benutzeroberfläche: Möchtest du PB IDE nachbauen? :D

_________________
BildBildBildBildBildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: PanelGadget flackern beim wechseln
BeitragVerfasst: 06.06.2019 16:27 
Offline
Benutzeravatar

Registriert: 07.12.2017 17:30
Wohnort: Frankrich
Nicht die pb-ide
(vllt BlitzPlus)
ich vergass
ist mit PB_5.31und ascii compiliert
(5.31,weil ich ascii für BB-User-Lib's brauche und's wechseln vergass)
Ne der Code ist ein test für die einzelnen Möglichkeiten,und da ich die ide immer vor Augen habe,das Scintilla
besser verstehen wollte und mir nix besseres eingefallen ist,
sieht's halt so aus(Idee aber nicht schlecht(Arbeit,Arbei.......))

Flackern:
Nicht immer,aber wenn,dann ist es folgendes:
Nur das Panel wird kurtz weiss,bevor das neue Tab gezeichnet wird
kann es an der Version liegen?

Olaf

Edit:
Hab's auch noch mal mit 5.70 probiert,ohne erfolg
SmartWindowRefresh() ohne Wirkung

_________________
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: PanelGadget flackern beim wechseln
BeitragVerfasst: 06.06.2019 17:47 
Offline
Benutzeravatar

Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9
@Olafmagne: Wieso nimmst Du dann nicht gleich das ScintillaGadget()?

Grüße ... Peter

_________________
"A user interface is like a joke. If you have to explain it, it’s not that good." (Martin Leblanc)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: PanelGadget flackern beim wechseln
BeitragVerfasst: 06.06.2019 19:20 
Offline
Benutzeravatar

Registriert: 07.12.2017 17:30
Wohnort: Frankrich
Kiffi hat geschrieben:
@Olafmagne: Wieso nimmst Du dann nicht gleich das ScintillaGadget()?

Grüße ... Peter


Ganz einfach!

zum einen ist der code nur eine test-plattform für api-functiones
und sonstige constructe

zum anderen selber probieren macht mehr spass


Das Problem des flackerns ist noch da,
irgenjemand 'ne idee?

olaf

_________________
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: PanelGadget flackern beim wechseln
BeitragVerfasst: 06.06.2019 22:19 
Offline
Benutzeravatar

Registriert: 27.02.2006 22:30
Wohnort: Neumünster
SetActiveGadget(qced(a)\ed1)

_________________
Purebasic 5.60 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: PanelGadget flackern beim wechseln
BeitragVerfasst: 07.06.2019 13:12 
Offline
Benutzeravatar

Registriert: 07.12.2017 17:30
Wohnort: Frankrich
hjbremer hat geschrieben:
SetActiveGadget(qced(a)\ed1)


Hilft leider auch nicht

mal ist es ok,mal gibt's einen kurzen 'Blitz'
ich denke,es liegt daran,dass das zeichnen zu lange dauert,
arbeite schon daran

olaf

Edit
ich hab mal nach jedem zu zeichnenden Gadget für den Tab ein delay() eingesetzt
um das zeichnen besser zu sehen.
dabei folgende Beobachtung:

das Panelgadget wird gelöcht,und erst wieder gezeichnet,wenn alle anderen gadgets fertig sind
und das dauert etwas.
werde mal sehen, ob ich das etwas schneller hinbekomme

_________________
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus


Zuletzt geändert von Olafmagne am 07.06.2019 14:19, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: PanelGadget flackern beim wechseln
BeitragVerfasst: 07.06.2019 14:11 
Offline
Benutzeravatar

Registriert: 27.02.2006 22:30
Wohnort: Neumünster
schnelleren Rechner :mrgreen:
oder Background einheitlich beim Window und Gadgets

_________________
Purebasic 5.60 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: PanelGadget flackern beim wechseln
BeitragVerfasst: 07.06.2019 14:27 
Offline
Benutzeravatar

Registriert: 07.12.2017 17:30
Wohnort: Frankrich
hjbremer hat geschrieben:
schnelleren Rechner :mrgreen:
oder Background einheitlich beim Window und Gadgets

/:->
Mmmhh
ach so :o

Back to DOS :mrgreen:

_________________
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: PanelGadget flackern beim wechseln
BeitragVerfasst: 08.06.2019 11:59 
Offline
Benutzeravatar

Registriert: 07.12.2017 17:30
Wohnort: Frankrich
so,
habe die letzte Nacht mit der windos api-doc verbracht
wenn ich das nun richtig interpretiere,dann wird,
nach einem <addgadgetitem > die entsprechende struc gefüllt,
und das Panel\Tab-Control gelöcht.
anschliessend werden die struc's der einzelnenGadget's,die ins Panel sollen gefüllt,
und erst jetzt ein <invalid_rect> message gesendet.
wenn ich richtig liege,muss das etwas damit zu tun haben,
das ich die einzusetzenden Gadget's verändert habe (Subclassing Controls),
da unveränderte Gadget's dieses Verhalten nicht haben.

Kann das Jemand bastätigen?

Olaf

_________________
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye