Ich schreib zurzeit für ein größeres Projekt neue Steuerelemente, welche möglichst "integriert", flüssig, schell, flexibel und funktional sein sollen. (HyperTree, DockBar, SwiftPanel, Ribbon, GradientBar)
Damit das ganze noch eleganter wirkt möchte ich Fading und weiche Bewegungs Animationen ermöglichen (optional). Meine Frage ist jetzt welcher Weg am optimalsten wäre.
1. Thread
Ein Thread für jede Klasse. Also 8 Gadgets des selben Typs werden durch ein Thread mit geringer Priorität gesteuert, der zudem pausiert wird solange keine Animation mehr stattfindet.
2. Callback
Ein Callback dem Fenster anhängen, wobei ich nicht weiß ob es zum Stop kommt wenn WaitWindowEvent verwendet wird.
Schnelleres Rendern auf Canvas?
Eine andere Frage wäre noch, ob noch schnelleres Rendern möglich ist. Canvas ist ja schon sehr gut, nur auf größeren Flächen etwas langsam meiner Meinung. Wäre es schneller mit BitBlt_() ein fertig gerenderten Frame direkt in den Buffer zu pushen? (damit kein weißes Flackern entstehen kann)
GDI+ schneller?
Ich würde eigentlich gerne GDI+ verwenden da es mehr Möglichkeiten und Anti-Aliasing bietet. Aber nachdem ich mich über die Performance informiert hab soll es sehr langsam sein? (mit HighSpeed)
Wäre sehr dankbar für Tipps und Vorschläge. Werde diese neuen Gadgets auch hier mit euch teilen wer sie verwenden kann, wie bereits DockBar und GradientGadget. Gerade bei DockBar möchte ich eine Flüssige Klapp-Bewegung der Elemente.
Steuerelement Animation
Re: Steuerelement Animation
Du kannst einen Timer für die Gadgets nehmen und ihnen Befehle zuordnen, die im Timer
abgearbeitet werden. Kleines Beispiel zum auf- und zuklappen (Befehle OpenCanvas und CloseCanvas):
abgearbeitet werden. Kleines Beispiel zum auf- und zuklappen (Befehle OpenCanvas und CloseCanvas):
Code: Alles auswählen
Enumeration
#OpenCanvas = 1
#CloseCanvas
EndEnumeration
Procedure RepaintCanvas(canvas)
If StartDrawing(CanvasOutput(canvas))
width = GadgetWidth(canvas)
height = GadgetHeight(canvas)
Box(0,0,width,height,RGB($FF,$FF,$FF))
DrawingMode(#PB_2DDrawing_Outlined)
Box(0,0,width,height,RGB($00,$00,$00))
DrawingMode(#PB_2DDrawing_Transparent)
For y = 0 To height-20 Step 20
DrawText(10,y,Str(i),0)
i+1
Next
StopDrawing()
EndIf
EndProcedure
Procedure Timer(hWnd,msg,idEvent,dwTime)
state = GetGadgetData(0)
height = GadgetHeight(0)
If state = #OpenCanvas
If height < 400
ResizeGadget(0,#PB_Ignore,#PB_Ignore,#PB_Ignore,height+20)
RepaintCanvas(0)
Else
SetGadgetData(0,0)
EndIf
ElseIf state = #CloseCanvas
If height > 20
ResizeGadget(0,#PB_Ignore,#PB_Ignore,#PB_Ignore,height-20)
RepaintCanvas(0)
Else
SetGadgetData(0,0)
EndIf
Else
KillTimer_(hWnd,idEvent)
EndIf
EndProcedure
Procedure OpenCanvas(canvas)
SetGadgetData(canvas,#OpenCanvas)
SetTimer_(GadgetID(canvas),1,10,@Timer())
EndProcedure
Procedure CloseCanvas(canvas)
SetGadgetData(canvas,#CloseCanvas)
SetTimer_(GadgetID(canvas),1,10,@Timer())
EndProcedure
If OpenWindow(0, 0, 0, 800, 600, "CanvasGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CanvasGadget(0, 120, 10, 670, 20)
ButtonGadget(1, 10, 10, 100, 20, "Open")
RepaintCanvas(0)
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget And EventGadget() = 1
If GetGadgetText(1)="Open"
SetGadgetText(1,"Close")
OpenCanvas(0)
Else
SetGadgetText(1,"Open")
CloseCanvas(0)
EndIf
EndIf
Until Event = #PB_Event_CloseWindow
EndIfcya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck