Ich wollte mir ein Mal-Gadget basteln.
Welches ich in der Größe angebe und auch Vorder und Hintergrundfarbe.
Ich wollte ein ImageGadget und ein Image benutzen.
Beide bekommen die gleiche ID.
Wenn man mit der Maus über dem Gadget ist und eine Taste drückt, soll die Farbe benutzt werden, die man als Vordergrundfarbe eingestellt hat.
Als Rückgabe meines Gadgets soll man das Bild bekommen können.
Aber auch die einzelnen Punkte, die man schon gemalt hat.
Am besten in einer Liste.
Klar kann ich die Sache auch anders regeln. Aber ich wollte es gleich so machen, dass ich mehrere dieser Gadgets machen kann.
Und es soll auch nicht unbedingt von der Maus abhängen.
Man könnte dann zum Beispiel durch verschiedene Benutzer auf einem oder auf mehreren Gadgets zeichnen.
Schau dir mal was zum Thema Videoanalyse an:
http://www.purebasic.fr/german/viewtopi ... deoanalyse
Ich wollte es so machen, dass man an dieses Gadget auch als State ein Image liefern kann und dann mit GetGadgetData eine Liste der erkannten Objekte erhält.
Und als Gadget sollte es sein, damit der normale Nutzer vielleicht verstehen muss, was eine Liste ist, aber der Rest wie ein ImageButton Gadget nach außenhin wirkt.
Genauso wenn man einen Farbrequester hätte, der 16 vordefinierte Farben hat.
Hab hier schon mal was im Forum dazu gesehen.
Ich würds halt toll finden, wenn es eine einfache vorgehensweise gibt, wie man Gadgets machen kann, die alles mögliche Zurückgeben können.
Da fällt mir ein:
- Eine Liste kann ich ja auch mit Items machen.
Wenn ich GetGadgetItem...
benutzen könnte auf mein Gadget, obwohl es aussieht wie ein ImageGadget ... das wäre cool.
Dann bräuchte ich andere verrenkungen nicht machen.
Als ItemColor bekommt man dann die Farbe des Punktes wieder.
http://www.purebasic.fr/german/viewtopi ... icongadget
Das Problem ist, ich möchte keine zwei GadgetIDs verwenden.
Denn dann wären es ja mehrere Gadgets.
Man soll das resultierende Gadet jedoch wie gewohnt benutzen können und es soll nicht vorkommen, dass der Anwender Fehler ohne Ende hat, nur weil er die zweite GadgetID, die ich benutzen würde schon belegt hat und sich wundert, das nix zu sehen ist oder mein Gadget nicht auf seine eigene unsichtbare Liste zugreifen kann ...

Dank dir im Voraus
Ein bisschen CODE:
Code: Alles auswählen
EnableExplicit
Enumeration
#MainWin
#Eingabe
#Eingabe2
EndEnumeration
Define Event.l
Define EventType.l
Define GadgetNr.l
Define MausA.POINT
Define MausE.POINT
NewList MausPunkte.POINT()
;Global NewList GadgetFarben()
Procedure Erstelle(Gadget.l,x.l,y.l,xl.l,yl.l,f.l=#White, f2.l=#Blue)
CreateImage(Gadget,xl,yl)
StartDrawing(ImageOutput(Gadget))
Box(0,0,xl,yl,f)
StopDrawing()
ImageGadget(Gadget,x,y,xl,yl,ImageID(Gadget),#PB_Image_Border)
EndProcedure
Procedure Prufen()
EndProcedure
OpenPreferences("FLMAUSiX.ini")
Define WinPosX_MainWin.l=ReadPreferenceLong("WINDOW_XPOS_MAIN",50);
Define WinPosY_MainWin.l=ReadPreferenceLong("WINDOW_YPOS_MAIN",50);
ClosePreferences()
OpenWindow(#MainWin,WinPosX_MainWin,WinPosY_MainWin, 750,550,":: FL :: MAUSiX")
CreateGadgetList(WindowID(#MainWin))
Erstelle(#Eingabe,10,10,300,300,#White)
Erstelle(#Eingabe2,320,10,300,300,#Yellow,#Black)
Repeat
Event= WaitWindowEvent()
If Event=#PB_Event_Gadget
GadgetNr=EventGadget()
Debug GadgetNr
EndIf
Until Event=#PB_Event_CloseWindow
CreatePreferences("FLMAUSiX.ini")
WritePreferenceLong("WINDOW_XPOS_MAIN",WindowX(#MainWin))
WritePreferenceLong("WINDOW_YPOS_MAIN",WindowY(#MainWin))
ClosePreferences()
CloseWindow(#MainWin)
Sowas in der Richtung, nur mit ein paar mehr Optionen.
Vielleicht gleich ein kleines Zeichenprogramm, was man einfach einbinden kann später in seine Programme.
Code: Alles auswählen
;XIncludeFile "MyPaintBoxGadget.pb"
; original source by El_Choni
OpenWindow(0, #PB_Ignore, 0, 320, 256, "MyPaintBoxGadget test", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_SizeGadget|#PB_Window_MaximizeGadget)
SetWindowLong_(WindowID(0), #GWL_STYLE, GetWindowLong_(WindowID(0), #GWL_STYLE)|#WS_CLIPCHILDREN)
CreateGadgetList(WindowID(0))
EC_MyPaintBoxGadget(0, 0, 0, 320, 256, 4, $FF00, $FF0000)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_SizeWindow
ResizeGadget(0, #PB_Ignore, #PB_Ignore, WindowWidth(0), WindowHeight(0))
EndSelect
ForEver
Hab mir auch mal die IncludeDatei angesehen.
Sehr mystisch

Auch viele * * * und \\\
Einen eigenen Gadget zu erstellen ist doch etwas komplexer.
