Strichstärke LineXY
Strichstärke LineXY
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!
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!
Gruß
uthi
uthi
Das wird in Windows mit dem Pen (Stift) festgesetzt.
Mittels der WinAPI kannst du diesen aktuellen Pen ändern und dadurch die Stärke festlegen:
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:
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
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

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
);
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
- Falko
- Admin
- Beiträge: 3535
- Registriert: 29.08.2004 11:27
- Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit) - Kontaktdaten:
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 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)
Ich dachte ja das ist bei der X2D Library von freedimension dabei,Falko hat geschrieben:Einander hat dazu eine schöne Procedure geschrieben.
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
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
- freedimension
- Admin
- Beiträge: 1987
- Registriert: 08.09.2004 13:19
- Wohnort: Ludwigsburg
- Kontaktdaten:
Als ich damals nach (Verbesserungs-)Vorschlägen gefragt hatte wollte keiner antwortenDanilo hat geschrieben:Ich dachte ja das ist bei der X2D Library von freedimension dabei,Falko hat geschrieben:Einander hat dazu eine schöne Procedure geschrieben.
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.
