Seite 1 von 2

Strichstärke LineXY

Verfasst: 12.05.2005 12:19
von uthi
Hallo,

kann man die Breite einer Linie vergrößern? Gibt es dazu einen Parameter oder separaten Befehl? Ansonsten wird immer nur mit 1 Pixel Strichstärke gezeichnet.

Danke!

Verfasst: 12.05.2005 13:02
von diGGa
ganz spontan fällt mir ein: ne andere linie drunner malen

Verfasst: 12.05.2005 14:25
von zigapeda
gibts da nicht irgend sowas wie dicke?
Also wie wenn man Text mit Transparentem hintergrund drucken will nutzt man ja drawingmode().

Verfasst: 12.05.2005 14:59
von MVXA
Ich glaube, dass Falko mal einen Code gpostet hat, mit dem man die Strichstärke einstellen kann. Ich würde hier mal auf die Suche verweisen. Werde aber später auch nochmal gucken. Mir fehlt nur die Zeit, weil ich gleich noch Getränke (alkohol frei natürlich ;) ) kaufen gehen muss :|

Verfasst: 12.05.2005 15:43
von Ynnus
Das wird in Windows mit dem Pen (Stift) festgesetzt.
Mittels der WinAPI kannst du diesen aktuellen Pen ändern und dadurch die Stärke festlegen:

Code: Alles auswählen

hwnd.l = OpenWindow(0, 20, 20, 500, 500, #pb_window_systemmenu, "NIX")

pen.l = CreatePen_(#PS_SOLID , 5, RGB(0, 0, 0))  ;Pen erstellen

hdc = StartDrawing(WindowOutput())  ;Drawing beginnen, Decive Context speichern!
SelectObject_(hdc, pen)  ; Für diesen Device Context den neuen Pen laden
LineXY(20, 20, 100, 100)  ; Linie malen, mit aktuellem Pen
StopDrawing()

Repeat : Until WaitWindowEvent() = #PB_event_closewindow
Ist eigentlich ganz easy, ein Befehl um den neuen Pen zu erstellen und einen um diesen im aktuellen Drawing-Bereich zu benutzen. Nicht vergessen, nachher wieder auf letzten Pen umstellen. ;)
Du könntest dir so auch eine Funktion schreiben mit der du die Stärke des Stifts ändern kannst. WIchtig eben nur, du brauchst dazu immer ein Handle zu einem Device Context, (hier hdc.l).

Die Pen-Funktion:

Code: Alles auswählen

HPEN CreatePen(

    int fnPenStyle,	// pen style 
    int nWidth,	// pen width  
    COLORREF crColor 	// pen color 
   );
Alles Weitere findest du in der Win32api Hilfe.
Bei Fragen kannst du die aber auch hier stellen, bin noch da. ;)

//EDIT: Man kann auch noch den Stil der Linie ändern. Gepunktet, gestrichelt, und solche Sachen. VIelleicht im Moment weniger interessant für dich, wollte es nur mal gesagt haben.

//Edit2: Kleiner Fehler im Code, PS_SOLID muss natürlich #PS_SOLID heißen. (Dank an MLK)


mfg.

Sunny

Verfasst: 13.05.2005 12:42
von Falko
Steht was in der " Feature Requests and Wishlists" im englischen Forum.
Einander hat dazu eine schöne Procedure geschrieben.
Bis jetzt hat Fred noch nichts gemacht.

http://forums.purebasic.com/english/vie ... ight=falko
einander hat geschrieben:Falko:

Here is a proc I'm using to do deflines in PB:

Code: Alles auswählen

Procedure Lin(x,y,x1,y1,Width,Color)
   hDC=GETDC_(WindowID())
   pen=CreatePen_(#Ps_Solid,Width,color) 
   hPenOld=SelectObject_(hDC,pen)
   MoveToEx_(hDC,x,y,0):LineTo_(hDC,x1,y1)
   DeleteObject_(pen)
   DeleteObject_(hPenOld)
EndProcedure

;_____________________________________________
_X=GetSystemMetrics_(#SM_CXSCREEN)-8 : _Y=GetSystemMetrics_(#SM_CYSCREEN)-68
OpenWindow(0,0,0,_X,_Y,#WS_OVERLAPPEDWINDOW | #WS_MAXIMIZE,"")

lin(50,200,300,400,15,#red)
MessageRequester("","DONE",0)


Quote:
The command of Line() or LineXY() in Purebasic is good. But where can i do pixel or styles for this line?


You can also change the style with #Ps_dash, #Ps_dot, #Ps_dashdotdot, but only when the pen width equals 1.
Greetings from Spain
Einander
(Another GFA Invader)

Verfasst: 13.05.2005 13:20
von Danilo
Falko hat geschrieben:Einander hat dazu eine schöne Procedure geschrieben.
Ich dachte ja das ist bei der X2D Library von freedimension dabei,
aber habe gerade nochmal nachgeschaut und ist nicht drin.

Vielleicht macht es freedimension ja noch für die Version 1.0 -
X2D_GetPen() ist ja schon drin, nur kein X2D_SetPen() und
X2D_CreatePen(). Richtig enttäuschend.

Die Lib von der ich rede ist übrigens auf purearea.net:
http://www.purearea.net/pb/download/userlibs/X2D.zip

Verfasst: 13.05.2005 14:19
von freedimension
Danilo hat geschrieben:
Falko hat geschrieben:Einander hat dazu eine schöne Procedure geschrieben.
Ich dachte ja das ist bei der X2D Library von freedimension dabei,
aber habe gerade nochmal nachgeschaut und ist nicht drin.

Vielleicht macht es freedimension ja noch für die Version 1.0 -
X2D_GetPen() ist ja schon drin, nur kein X2D_SetPen() und
X2D_CreatePen(). Richtig enttäuschend.
Als ich damals nach (Verbesserungs-)Vorschlägen gefragt hatte wollte keiner antworten ;)

Verfasst: 13.05.2005 14:25
von benny
freedimension hat geschrieben:Als ich damals nach (Verbesserungs-)Vorschlägen
gefragt hatte wollte keiner antworten ;)
Also sind "wir" jetzt wieder an allem schuld ... :lol:

Verfasst: 13.05.2005 14:55
von THEEX
Als ich damals nach (Verbesserungs-)Vorschlägen gefragt hatte wollte keiner antworten
Das ist ja ein allgemeines Problem hier, wenn man es nichr gerade brauch, interessierts eh nicht... siehe Bugs