CanvasGadget

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Pure_Beginner
Beiträge: 247
Registriert: 29.09.2011 21:49
Computerausstattung: i7 9XX 4000 MHZ / 12 GB RAM / Win 8.1 64Bit / Win 7 64Bit
Wohnort: Brühl

CanvasGadget

Beitrag 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
PureBasic 5.30 Beta 3 (X64/X86) | Win 8 (64) Pro / Win 7 (64) Pro | Es ist der Hobbyist[/col
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: CanvasGadget

Beitrag 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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Pure_Beginner
Beiträge: 247
Registriert: 29.09.2011 21:49
Computerausstattung: i7 9XX 4000 MHZ / 12 GB RAM / Win 8.1 64Bit / Win 7 64Bit
Wohnort: Brühl

Re: CanvasGadget

Beitrag von Pure_Beginner »

@STARGÅTE

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

Grüße
Christian
PureBasic 5.30 Beta 3 (X64/X86) | Win 8 (64) Pro / Win 7 (64) Pro | Es ist der Hobbyist[/col
derschutzhund
Beiträge: 328
Registriert: 06.06.2013 20:37
Computerausstattung: Satellite A210-19Z, Samsung Netbook N130, VPAD10

Re: CanvasGadget

Beitrag 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?
Satellite A210-19Z, Samsung N130, VPAD10, WinXP, Win7, PuppyLinux, PB 5.24, 5.31. 5.70
Elektronik, Mikrocontroller, CNC-Technik, 3D-Druck
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: CanvasGadget

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
derschutzhund
Beiträge: 328
Registriert: 06.06.2013 20:37
Computerausstattung: Satellite A210-19Z, Samsung Netbook N130, VPAD10

Re: CanvasGadget

Beitrag 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.???
Satellite A210-19Z, Samsung N130, VPAD10, WinXP, Win7, PuppyLinux, PB 5.24, 5.31. 5.70
Elektronik, Mikrocontroller, CNC-Technik, 3D-Druck
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: CanvasGadget

Beitrag 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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
derschutzhund
Beiträge: 328
Registriert: 06.06.2013 20:37
Computerausstattung: Satellite A210-19Z, Samsung Netbook N130, VPAD10

Re: CanvasGadget

Beitrag 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.
Satellite A210-19Z, Samsung N130, VPAD10, WinXP, Win7, PuppyLinux, PB 5.24, 5.31. 5.70
Elektronik, Mikrocontroller, CNC-Technik, 3D-Druck
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: CanvasGadget

Beitrag von STARGÅTE »

DrawImage() verlangt als ersten Parameter die ImageID, dass heißt, du musst dort:
DrawImage(ImageID(#Image),50,50,100,100) nutzen
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: CanvasGadget

Beitrag 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.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Antworten