Seite 1 von 4

CanvasGadget

Verfasst: 01.08.2013 12:20
von Pure_Beginner
Hallo zusammen,

bin am herumexperimentieren mit CanvasGadGet.

nachstehender Code läuft aber nicht.
Tappe völlig im dunkeln.
Hat jemand einen Tipp ?

Code: Alles auswählen

EnableExplicit
#FENSTER_HAUPT = 1
#Gadget = 2
#FLAGS = #PB_Window_SystemMenu | #PB_Window_ScreenCentered
 OpenWindow(#FENSTER_HAUPT, 0, 0, 400, 400, "Fenster Zeichnung", #FLAGS)
  
CanvasGadget(#Gadget, 10, 10, 200, 240,#PB_Canvas_Border)
CanvasOutput(#Gadget)

 
StartDrawing(CanvasOutput(#Gadget))
Box(15, 15, 75, 75, RGB(255, 0, 0))
Circle(140, 125, 45, RGB(35, 158, 70))
;die nächsten 2D Zeichenbefehle zeichnen ein Dreieck
LineXY(62, 140, 112, 220, RGB(0, 0, 255))
LineXY(112, 220, 12, 220, RGB(0, 0, 255))
LineXY(12, 220, 62, 140, RGB(0, 0, 255))
FillArea(62, 180, RGB(0, 0, 255), RGB(0, 0, 255))
StopDrawing()

Repeat
Ereignis.i = WaitWindowEvent()
Until Ereignis = #PB_Event_CloseWindow

End
Danke im voraus
Christian

Re: CanvasGadget

Verfasst: 01.08.2013 12:33
von STARGÅTE
das CanvasOutput(#Gadget) im Code ist unnötig, das gehört nur ins StartDrawing:

Code: Alles auswählen

EnableExplicit
#FENSTER_HAUPT = 1
#Gadget = 2
#FLAGS = #PB_Window_SystemMenu | #PB_Window_ScreenCentered
 OpenWindow(#FENSTER_HAUPT, 0, 0, 400, 400, "Fenster Zeichnung", #FLAGS)
  
CanvasGadget(#Gadget, 10, 10, 200, 240,#PB_Canvas_Border)

 
StartDrawing(CanvasOutput(#Gadget))
Box(15, 15, 75, 75, RGB(255, 0, 0))
Circle(140, 125, 45, RGB(35, 158, 70))
;die nächsten 2D Zeichenbefehle zeichnen ein Dreieck
LineXY(62, 140, 112, 220, RGB(0, 0, 255))
LineXY(112, 220, 12, 220, RGB(0, 0, 255))
LineXY(12, 220, 62, 140, RGB(0, 0, 255))
FillArea(62, 180, RGB(0, 0, 255), RGB(0, 0, 255))
StopDrawing()

Define Ereignis

Repeat
Ereignis.i = WaitWindowEvent()
Until Ereignis = #PB_Event_CloseWindow

End

Re: CanvasGadget

Verfasst: 01.08.2013 12:42
von Pure_Beginner
@STARGÅTE

Besten Dank für die Info und die schnelle Antwort.

Grüße
Christian

Re: CanvasGadget

Verfasst: 03.08.2013 20:25
von derschutzhund
Hätte da auch eine kleine Frage!
Ich möchte in einem CanvasGadget Fotos frei anordnen also per drag and drop verschieben.
Unter das jeweilige Foto möchte ich einen Text anordnen der automatisch mit verschoben wird, wenn man das Foto verschiebt.
Am Ende möchte ich die Anordnung irgendwie sichern damit sie das nächste Mal beim laden des CanvasGadgets wieder genau so angezeigt wird.
Schließlich möchte ich noch einzelne Fotos + Text löschen können.
Das ganze soll ein kleines Sitzplanprogramm werden.
So etwas habe ich zwar schon mal programmiert allerdings ohne grafische Anzeige und drag and drop bei der Erstellung.

Hat da jemand eine Idee?

Re: CanvasGadget

Verfasst: 03.08.2013 22:10
von STARGÅTE
Ideen:
  • Ein Objekt (Foto, Text und Position) kannst du in einer Struktur speichern.
  • Alle Objekte kannst du in einer Liste speichern, welche du dann komplett im Canvas anzeigst.
  • Verschieben kannst du ein Objekt, indem du Abfagst, ob die Maus beim drücken über dem Objekt war, und dann die Koordinaten änderst.
  • Speichern kannst du alle Objekte, indem du alle Elemente der Liste durchläufst und deren Daten in eine Datei schreibst.
  • Löschen kannst du zB mit einem Popup-Menü abfragen, welches bei Rechtsklick auf einem Objekt geöffnet wird.

Re: CanvasGadget

Verfasst: 03.08.2013 22:35
von derschutzhund
STARGÅTE hat geschrieben:Ideen:
  • Ein Objekt (Foto, Text und Position) kannst du in einer Struktur speichern.
  • Alle Objekte kannst du in einer Liste speichern, welche du dann komplett im Canvas anzeigst.
  • Verschieben kannst du ein Objekt, indem du Abfagst, ob die Maus beim drücken über dem Objekt war, und dann die Koordinaten änderst.
  • Speichern kannst du alle Objekte, indem du alle Elemente der Liste durchläufst und deren Daten in eine Datei schreibst.
  • Löschen kannst du zB mit einem Popup-Menü abfragen, welches bei Rechtsklick auf einem Objekt geöffnet wird.
Eine Struktur könnte ich vemutlich definieren.
.., welche du dann komplett im Canvas anzeigst.
Das kann ich schon mal nicht!
Verschieben kannst du ein Objekt, indem du Abfagst, ob die Maus beim drücken über dem Objekt war, und dann die Koordinaten änderst.
Da wüsste ich auch nicht wie ich das anstellen sollte.

Nach dem verschieben müsste ich ja dann die neue Position in die Liste zurückschreiben.???

Re: CanvasGadget

Verfasst: 03.08.2013 22:42
von STARGÅTE
Hier findest du ein Beispiel, wie man mit Linker Maus Rechecke zeichnet und mit der Rechten Maustaste diese verschibene kann:
http://www.purebasic.fr/german/viewtopi ... 63#p298163

Re: CanvasGadget

Verfasst: 04.08.2013 00:14
von derschutzhund
STARGÅTE hat geschrieben:Hier findest du ein Beispiel, wie man mit Linker Maus Rechecke zeichnet und mit der Rechten Maustaste diese verschibene kann:
http://www.purebasic.fr/german/viewtopi ... 63#p298163
Ok, so grundsätzlich kann ich es nachvollziehen aber ich bekomme kein Bild eingebaut!
Also z.B. test.bmp
Habe es mit LoadImage(#Image, GetCurrentDirectory() + "Max Mustermann.bmp")
und dann DrawImage(#Image,50,50,100,100) probiert.

Re: CanvasGadget

Verfasst: 04.08.2013 00:16
von STARGÅTE
DrawImage() verlangt als ersten Parameter die ImageID, dass heißt, du musst dort:
DrawImage(ImageID(#Image),50,50,100,100) nutzen

Re: CanvasGadget

Verfasst: 04.08.2013 00:23
von Danilo
Hier ein Code um Bilder im CanvasGadget mit der Mouse zu verschieben.
Neue Bilder einfach mit AddImage() hinzufügen. Getestet auf Win & Mac.