zeichen auf fenster

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
delikanli_19_82
Beiträge: 173
Registriert: 30.11.2010 02:34

zeichen auf fenster

Beitrag 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
Nighthawk
Beiträge: 13
Registriert: 13.05.2006 14:51
Wohnort: Saarland

Re: zeichen auf fenster

Beitrag 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
PB4.51 x86 / Win7 64bit
Aktuelle Projekte : Irrlichtwrapper für PB und .NET
delikanli_19_82
Beiträge: 173
Registriert: 30.11.2010 02:34

Re: zeichen auf fenster

Beitrag 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
Antworten