Seite 1 von 2

Nicht gefüllte Box

Verfasst: 06.03.2008 21:59
von PureMax
und wieder einmal eine vllt dumme frage aber wie kann man ne ungefüllte box erstellen?!

mfgMAX

Verfasst: 06.03.2008 22:01
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. :)

Verfasst: 06.03.2008 22:08
von PureMax
danke :allright:

mfg MAX

Verfasst: 07.03.2008 01:20
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!

Verfasst: 07.03.2008 01:42
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...

Verfasst: 07.03.2008 01:46
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:

Verfasst: 07.03.2008 08:15
von PureMax
also mir gings darum um gefüllte boxen mit andersfarbigen ramen
(menü buttons)

mfg MAX

Verfasst: 07.03.2008 09:04
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)

Verfasst: 07.03.2008 09:31
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

Verfasst: 07.03.2008 11:23
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.