Nicht gefüllte Box

Anfängerfragen zum Programmieren mit PureBasic.
PureMax
Beiträge: 16
Registriert: 21.02.2008 19:32
Kontaktdaten:

Nicht gefüllte Box

Beitrag von PureMax »

und wieder einmal eine vllt dumme frage aber wie kann man ne ungefüllte box erstellen?!

mfgMAX
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Beitrag von Vermilion »

Du benutzt einfach einen anderen Zeichenmodus, nämlich den, wo nur die Außenlinien gezeichnet werden.

Code: Alles auswählen

StartDrawing(Output)
  DrawingMode(#PB_2DDrawing_Outlined)
  Box(10, 10, 20, 20, $FFFFFF)
StopDrawing()
Mehr dazu in der Hilfe. :)
Bild

Immer die neueste PureBasic Version. Auf allem Betriebssystemen. Ich bin ein OS-Nomad!
PureMax
Beiträge: 16
Registriert: 21.02.2008 19:32
Kontaktdaten:

Beitrag von PureMax »

danke :allright:

mfg MAX
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Beitrag von c4s »

Ich hab dann noch eine zusätzliche Frage dazu:
Gibt es eine (einfache) Möglichkeit die Dicke der Linien bei eben der Box
oder einer Linie selbst einzustellen?

...Würde mir sehr helfen dass endlich mal rauszubekommen!
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> Gibt es eine (einfache) Möglichkeit
nope

> Gibt es eine Möglichkeit
yup

über WinAPI... hab ich schon mal gesehen...

Wolf hatte in der Lounge mal Code dazu gepostet...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

Glaub mir, das habe ich auch schon sehr oft vermisst.

Du kannst bei dicken Rahmen einen gefüllten Außenkreis zeichnen und einen gefüllten Innenkreis. Bei Boxen genauso.
Linien musste wohl als Rahmen zeichnen und dann Füllen oder die Linien in einer Schleife zeichnen. Dafür kannst dir aber eigene Prozeduren schaffen.

Gab da mal ein paar Grafik-Bibliotheken.

http://www.purearea.net/pb/german/index.htm
User-Libs und da E2D, X2D ... da war so etwas drin, soweit ich mich erinnern kann.
Gibt aber noch andere. Einfach mal durchschauen.

:allright:
Kinder an die Macht http://scratch.mit.edu/
PureMax
Beiträge: 16
Registriert: 21.02.2008 19:32
Kontaktdaten:

Beitrag von PureMax »

also mir gings darum um gefüllte boxen mit andersfarbigen ramen
(menü buttons)

mfg MAX
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

dafür braucht man doch keine extra-funktionen...

du zeichnest erst ne gefüllte box, und dann ne nicht gefüllte in ner anderen farbe drüber.

sowas zum bleistift:

Code: Alles auswählen

EnableExplicit

InitSprite()
InitMouse()
InitKeyboard()
OpenScreen(800,600,32,"Buttons")

Global MPX.l, MPY.l, MLC.l

Procedure DrawButton( BX.l, BY.l, BW.l, BH.l, TOX.l, TOY.l, TXT.s )
  Static ColFrame1.l  ; oberer Frame
  Static ColFrame2.l  ; unterer Frame
  Static ColButton.l  ; Hintergrund

  If MPX > BX And MPX < BX+BW And MPY > BY And MPY < BY+BH
    If MLC
      ; Farben für Button gedrückt
      ColFrame1 = $404000
      ColFrame2 = $808000
      ColButton = $606000
    Else
      ; Farben für Mouseover Button
      ColFrame1 = $FFFF00
      ColFrame2 = $808000
      ColButton = $C0C000
    EndIf
  Else
    ; Farben für Button normal
    ColFrame1 = $C0C000
    ColFrame2 = $606000
    ColButton = $909000
  EndIf

  DrawingMode(#PB_2DDrawing_Transparent)  ; gefüllte Box, transparenter Texthintergrund
  Box( BX, BY, BW, BH, ColButton )
  DrawText( BX+TOX, BY+TOY, TXT, ColFrame1 )
  DrawingMode(#PB_2DDrawing_Outlined)     ; Box-Rahmen
  Box( BX, BY, BW+1, BH+1, ColFrame2 )
  Box( BX-1, BY-1, BW+1, BH+1, ColFrame1 )

EndProcedure

Procedure DrawMouse( MX.l, MY.l )
  Protected n.l
  FrontColor( $80FFFF )
  For n=0 To 3
    Line( mx+n, my+n, 32, 16 )
    Line( mx+n, my+n, 16, 32 )
  Next
EndProcedure

Repeat
  ExamineMouse()
  ExamineKeyboard()

  MPX = MouseX()
  MPY = MouseY()
  MLC = MouseButton(#PB_MouseButton_Left)

  ClearScreen( $402010 )

  StartDrawing(ScreenOutput())
    DrawButton( 300, 100, 200, 40, 74, 12, "Button 1" )
    DrawButton( 300, 200, 200, 40, 74, 12, "Button 2" )
    DrawButton( 300, 300, 200, 40, 74, 12, "Button 3" )
    DrawButton( 300, 400, 200, 40, 74, 12, "Button 4" )
    DrawMouse( MPX, MPY )
  StopDrawing()

  FlipBuffers()

Until KeyboardPushed(#PB_Key_Escape)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Tombi
Beiträge: 369
Registriert: 05.03.2008 22:05

Beitrag von Tombi »

Wegen dem "dicken des Rahmens" - wäre da jetzt die normale Linien-Funktion besser oder doch lieber die Box Funktion (nur Rahmen)?

Wichtig ist mir:

* Speicherverbrauch
* Ladezeit
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

was meinst du mit Ladezeit.... geladen wird da nix.

gehts dir um performance?

dann nimm von vorne herein sprites.
außerdem kann man die viel schicker gestalten, als mit Draw zurechtgestoppeltes....

und selbst wenn...
man kann zu beginn des programms auch mit Draw-Funktionen sprites erzeugen.
da kann man dann etwas aufwendigere sachen machen, hat aber nachher in
der hauptschleife fertige sprites und muss nicht dauernd wieder drawen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten