Seite 1 von 1

zeichen auf fenster

Verfasst: 30.11.2010 02:40
von delikanli_19_82
hallo leute,

ich bin neuling bei purebasic und versuche mich darin einzuarbeiten.

ursprünglich hatte ich vor interfaces (also sowas wie klassen) zu erstellen, mit denen ich Objekte bauen und auf einem fenster zeichnen konnte.

nun habe ich mich dazu entschlossen erstmal mit proceduren und variablen das ganze zu machen, aber hier will es auch nicht.

ich möchte keine Zeichnungen direkt im Fenster durchführen, sondern ich möchte innerhalb des Fensters eine Procedure aufrufen, das für mich das Objekt zeichnet. Ich möchte diese Procedure samt seinen ganzen kram später in eine library compilieren und diesen bei allen zukünftigen projekten in jedem fenster meiner wahl einsetzen können.

Code: Alles auswählen

guiMode.b = 0
guiPosX.l = 10
guiPosY.l = 10
guiResW.l = 150
guiResH.l = 30
guiColorBorderL.l = RGB(250,250,250)
guiColorBorderD.l = RGB(100,100,100)
guiColorBkg.l     = RGB(230,230,230)
guiColorCap.l     = RGB(120,120,120)

Procedure guiButton()
  If CreateImage(0, 200, 200) And StartDrawing(ImageOutput(0))
    
    Box(guiPosX,guiPosY, guiResW, guiResH, guiColorBkg )
    Line( guiPosX, guiPosY, guiResW, 1, guiColorBorderL )
    Line( guiPosX, guiPosY, 1, guiResH, guiColorBorderL )
    Line( guiPosX, guiPosY + guiResH, guiResW, 1, guiColorBorderD )
    Line( guiPosX + guiResW, guiPosY, 1, guiResH, guiColorBorderD )
    DrawText( guiPosX + 5, guiPosY + 7, "Hallo Welt", guiColorCap, guiColorBkg )
    
  StopDrawing()    
  ImageGadget(0, 0, 0, 200, 200, ImageID(0))
  EndIf
EndProcedure

If OpenWindow(0, 0, 0, 200, 200, "2DDrawing Beispiel", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    
    guiButton()
  
    Repeat
      Event = WaitWindowEvent()
    Until Event = #PB_Event_CloseWindow
EndIf
rufe ich die Zeichenfunktionen innerhalb des IF-Blocks des Fensters auf, so klappt alles. Verlagere ich den kram in die obige prozedur, so erscheint einfach nur ein leeres schwarzes fenster.

was mache ich falsch?

mfg
kurt

Re: zeichen auf fenster

Verfasst: 30.11.2010 04:22
von Nighthawk
hi delikanli_19_82,
Du mußt die Variablen am Anfang des Programms als Global deklarieren.

Code: Alles auswählen

Global guiMode.b = 0
Global guiPosX.l = 10
Global guiPosY.l = 10
Global guiResW.l = 150
Global guiResH.l = 30
Global guiColorBorderL.l = RGB(250,250,250)
Global guiColorBorderD.l = RGB(100,100,100)
Global guiColorBkg.l     = RGB(230,230,230)
Global guiColorCap.l     = RGB(120,120,120)

Procedure guiButton()
  If CreateImage(0, 200, 200) And StartDrawing(ImageOutput(0))
   
    Box(guiPosX,guiPosY, guiResW, guiResH, guiColorBkg )
    Line( guiPosX, guiPosY, guiResW, 1, guiColorBorderL )
    Line( guiPosX, guiPosY, 1, guiResH, guiColorBorderL )
    Line( guiPosX, guiPosY + guiResH, guiResW, 1, guiColorBorderD )
    Line( guiPosX + guiResW, guiPosY, 1, guiResH, guiColorBorderD )
    DrawText( guiPosX + 5, guiPosY + 7, "Hallo Welt", guiColorCap, guiColorBkg )
   
  StopDrawing()   
  ImageGadget(0, 0, 0, 200, 200, ImageID(0))
  EndIf
EndProcedure

If OpenWindow(0, 0, 0, 200, 200, "2DDrawing Beispiel", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
   
    guiButton()
    
    Repeat
      Event = WaitWindowEvent()
    Until Event = #PB_Event_CloseWindow
EndIf
Eine bessere Lösung wäre die Variablen als Parameter der Procedure zu übergeben :

Code: Alles auswählen

Procedure guiButton(guiMode.b,guiPosX.l,guiPosY.l,guiResW.l,guiResH.l,guiColorBorderL.l,guiColorBorderD.l,guiColorBkg.l,guiColorCap.l)
  If CreateImage(0, 200, 200) And StartDrawing(ImageOutput(0))
   
    Box(guiPosX,guiPosY, guiResW, guiResH, guiColorBkg )
    Line( guiPosX, guiPosY, guiResW, 1, guiColorBorderL )
    Line( guiPosX, guiPosY, 1, guiResH, guiColorBorderL )
    Line( guiPosX, guiPosY + guiResH, guiResW, 1, guiColorBorderD )
    Line( guiPosX + guiResW, guiPosY, 1, guiResH, guiColorBorderD )
    DrawText( guiPosX + 5, guiPosY + 7, "Hallo Welt", guiColorCap, guiColorBkg )
   
  StopDrawing()   
  ImageGadget(0, 0, 0, 200, 200, ImageID(0))
  EndIf
EndProcedure

If OpenWindow(0, 0, 0, 200, 200, "2DDrawing Beispiel", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
   
    guiButton(0,10,10,150,30,RGB(250,250,250),RGB(100,100,100),RGB(230,230,230),RGB(120,120,120))
    
    Repeat
      Event = WaitWindowEvent()
    Until Event = #PB_Event_CloseWindow
EndIf
Gruß
Nighthawk

Re: zeichen auf fenster

Verfasst: 30.11.2010 14:39
von delikanli_19_82
Vielen Dank Nighthawk,

dein Beispiel ist echt super.

Da hätte ich noch zwei Fragen:

1) Kann ich gezielt Events auf dem Fenster auf eine bestimmte Koordinate, wie die worauf ich zeichne auslösen,
so dass es unter Win,Lin und Mac läuft? und wenn ja, wie?

2) Wie kann ich eine SharedLib basteln und einsetzen in PureBasic?

Vielen Dank in voraus,

Kurt