[ ERLEDIGT ] wie Linienbreite festlegen

Anfängerfragen zum Programmieren mit PureBasic.
Gimbly
Beiträge: 169
Registriert: 28.12.2005 14:26
Wohnort: NRW

[ ERLEDIGT ] wie Linienbreite festlegen

Beitrag von Gimbly »

Hallo Gemeinde,

bin zwar kein PB-Anfänger, aber in Punkto 2DDrawing schon.

Habe ich das richtig verstanden, dass Linien (Line/LineXY) immer 1 Pixel breit sind und es keinen Weg in PB gibt, breitere (dickere) Linien zu zeichnen?

Irgendwo fand ich diese Proc (Win-API), wo ich die Breite (PenSize) setzen kann:

Code: Alles auswählen

Procedure BigLineXY(X1,Y1,X2,Y2,Color.l,PenSize.l,*hDC)
   Protected  *hPen
   *hPen = CreatePen_(#PS_SOLID, PenSize, Color)
   If *hPen
      If SelectObject_(*hDC, *hPen)
         MoveToEx_(*hDC, X1, Y1, 0)
         LineTo_(*hDC, X2, Y2)
      EndIf
      DeleteObject_(*hPen)
   EndIf      
EndProcedure
Klappt auch soweit. Jetzt habe ich allerdings noch zwei Probleme:
1. Wie kriege ich 50% Transparenz in die Linie?
2. Wie kann ich das für Linux umsetzen, da mein Proggi auch darunter laufen muss.
Zuletzt geändert von Gimbly am 15.12.2015 10:02, insgesamt 1-mal geändert.
Gruß
Markus
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: wie Linienbreite festlegen

Beitrag von NicTheQuick »

Hast du dir schon die neue 'VectorDrawing'-Bibliothek angeschaut? Die kann genau sowas.
Gimbly
Beiträge: 169
Registriert: 28.12.2005 14:26
Wohnort: NRW

Re: wie Linienbreite festlegen

Beitrag von Gimbly »

Hallo NicTheQuick,

meinst du die, die in PB 5.40 neu enthalten ist?

Nutze noch 5.31, aber das währe dann ein Grund upzudaten!
Gruß
Markus
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: wie Linienbreite festlegen

Beitrag von udg »

hi, ich bin zwar auch kein Profi aber mit Linien helfe ich mir immer so:

für Flat Buttons benutze ich die Lib: PureColor

Download: free and fast from zippyshare

Screenshot:
Bild

und code (benötigt PureColor)

Code: Alles auswählen

;
; needs PURECOLOR
; free and fast from zippyshare : http://www13.zippyshare.com/v/aEWTlfqs/file.html
;-Prepare and Declare Items, Objects
Enumeration
;{
  ;Objects Button 2pix
    #Btn_2pix
    #Btn_2pix_Frame_Left
    #Btn_2pix_Frame_Right
    #Btn_2pix_Frame_Top
    #Btn_2pix_Frame_Bottom
  ;Objects Button 4pix
    #Btn_4pix
    #Btn_4pix_Frame_Left
    #Btn_4pix_Frame_Right
    #Btn_4pix_Frame_Top
    #Btn_4pix_Frame_Bottom
  ;Objects Button Exit_1px
    #Btn_Exit_1px
    #Btn_Exit_1px_Frame_Left
    #Btn_Exit_1px_Frame_Right
    #Btn_Exit_1px_Frame_Top
    #Btn_Exit_1px_Frame_Bottom
  ;FRAME AROUND Window
    #Window_Frame_Left
    #Window_Frame_Right
    #Window_Frame_Top
    #Window_Frame_Bottom
EndEnumeration
;}  
  
;-MAIN WINDOW
OpenWindow(0, 732, 301, 540, 610, "", #PB_Window_ScreenCentered | #PB_Window_BorderLess)
SetWindowColor(0,RGB(4, 0, 9))
        
      ;=================================================================================================================
      ;=================================================================================================================
      ;-CREATE BUTTONS
      ;
        ;-SHOW 2px Frame around BTN 2pix
           ;Left
            TextGadget(#Btn_2pix_Frame_Left, 15, 559, 2, 32, "")                 ;Frame size
            SetGadgetColor(#Btn_2pix_Frame_Left, #PB_Gadget_BackColor, $454543)  ;Frame Color
           ;Right
            TextGadget(#Btn_2pix_Frame_Right, 117, 559, 2, 32, "")               ;Frame size
            SetGadgetColor(#Btn_2pix_Frame_Right, #PB_Gadget_BackColor, $454543) ;Frame Color
           ;Top
            TextGadget(#Btn_2pix_Frame_Top, 16, 558, 102, 2, "")                 ;Frame size
            SetGadgetColor(#Btn_2pix_Frame_Top, #PB_Gadget_BackColor, $454543)   ;Frame Color
           ;Top
            TextGadget(#Btn_2pix_Frame_Bottom, 16, 590, 102, 2, "")              ;Frame size
            SetGadgetColor(#Btn_2pix_Frame_Bottom, #PB_Gadget_BackColor, $454543);Frame Color
            
          ;BTN 2pix
            Btn_2pix = ButtonGadget(#Btn_2pix, 17, 560, 100, 30, "2pix", #BS_FLAT)
            ;Font and Back color: BTN 2pix 
              PureCOLOR_SetButtonColor(#Btn_2pix, RGB(102, 104, 106), RGB(0, 0, 0), RGB(102, 104, 106), RGB(28, 28, 28))
      ;=================================================================================================================        
      ;
        ;-SHOW 4px Frame around BTN 4pix
           ;Left
            TextGadget(#Btn_4pix_Frame_Left, 216, 559, 4, 35, "")                ;Frame size
            SetGadgetColor(#Btn_4pix_Frame_Left, #PB_Gadget_BackColor, $454543)  ;Frame Color
           ;Right
            TextGadget(#Btn_4pix_Frame_Right, 320, 559, 4, 35, "")               ;Frame size
            SetGadgetColor(#Btn_4pix_Frame_Right, #PB_Gadget_BackColor, $454543) ;Frame Color
           ;Top
            TextGadget(#Btn_4pix_Frame_Top, 216, 556, 108, 4, "")                ;Frame size
            SetGadgetColor(#Btn_4pix_Frame_Top, #PB_Gadget_BackColor, $454543)   ;Frame Color
           ;Top
            TextGadget(#Btn_4pix_Frame_Bottom, 219, 590, 102, 4, "")             ;Frame size
            SetGadgetColor(#Btn_4pix_Frame_Bottom, #PB_Gadget_BackColor, $454543);Frame Color
              
          ;BTN 4pix
            Btn_4pix = ButtonGadget(#Btn_4pix, 220, 560, 100, 30, "4pix", #BS_FLAT)
            ;Font and Back color: BTN 4pix 
              PureCOLOR_SetButtonColor(#Btn_4pix, RGB(102, 104, 106), RGB(0, 0, 0), RGB(102, 104, 106), RGB(28, 28, 28))
      ;=================================================================================================================
      ;        
        ;-SHOW 1px Frame around BTN Exit_1px
           ;Left
            TextGadget(#Btn_Exit_1px_Frame_Left, 419, 559, 1, 32, "")                ;Frame size
            SetGadgetColor(#Btn_Exit_1px_Frame_Left, #PB_Gadget_BackColor, $454543)  ;Frame Color  
           ;Right
            TextGadget(#Btn_Exit_1px_Frame_Right, 520, 559, 1, 32, "")               ;Frame size
            SetGadgetColor(#Btn_Exit_1px_Frame_Right, #PB_Gadget_BackColor, $454543) ;Frame Color
           ;Top
            TextGadget(#Btn_Exit_1px_Frame_Top, 419, 559, 102, 1, "")                ;Frame size
            SetGadgetColor(#Btn_Exit_1px_Frame_Top, #PB_Gadget_BackColor, $454543)   ;Frame Color
           ;Top
            TextGadget(#Btn_Exit_1px_Frame_Bottom, 419, 590, 102, 1, "")             ;Frame size
            SetGadgetColor(#Btn_Exit_1px_Frame_Bottom, #PB_Gadget_BackColor, $454543);Frame Color

          ;BTN Exit_1px
            ButtonGadget(#Btn_Exit_1px, 420, 560, 100, 30, "Exit 1px", #BS_FLAT)
            ;Font and Back color: BTN Exit_1px 
              PureCOLOR_SetButtonColor(#Btn_Exit_1px, RGB(102, 104, 106), RGB(0, 0, 0), RGB(102, 104, 106), RGB(28, 28, 28))
      ;=================================================================================================================
      ;=================================================================================================================
      ;
        ; GIVE THE Window A 2PX Frame
           ;Left 2px
            TextGadget(#Window_Frame_Left, 0, 0, 2, 608, "")                              ;Frame size
            SetGadgetColor(#Window_Frame_Left, #PB_Gadget_BackColor, RGB(102, 102, 102))  ;Frame Color
           ;Right 2px
            TextGadget(#Window_Frame_Right, 538, 0, 2, 608, "")                           ;Frame size
            SetGadgetColor(#Window_Frame_Right, #PB_Gadget_BackColor, RGB(102, 102, 102)) ;Frame Color
           ;Top 20 px
            TextGadget(#Window_Frame_Top, 2, 0, 536, 20, "")                            ;Frame size
            SetGadgetColor(#Window_Frame_Top, #PB_Gadget_BackColor, RGB(102, 102, 102)) ;Frame Color
           ;Bottom 2px
            TextGadget(#Window_Frame_Bottom, 0, 608, 540, 2, "")                          ;Frame size
            SetGadgetColor(#Window_Frame_Bottom, #PB_Gadget_BackColor, RGB(102, 102, 102));Frame Color
      ;=================================================================================================================

Repeat
  Event = WaitWindowEvent()
    If Event = #PB_Event_Gadget
      Select EventGadget()  
        Case #Btn_Exit_1px
        End
      EndSelect
    EndIf
    
;-MOVE WINDOW WITH MOUSE 
  SendMessage_(WindowID(0), #WM_NCLBUTTONDOWN, #HTCAPTION, 0)
  

  Until Event = #PB_Event_CloseWindow
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: wie Linienbreite festlegen

Beitrag von Bisonte »

Code: Alles auswählen

...benutze ich die Lib: PureColor
Keine gute Idee....

Nur Windows 32Bit und keine Updates... Kann bei jeder neuen PB Version aus sein, mit der Nutzung !

Da diese Userlibrary massiv die WINAPI benutzt, kann ich zur Suche nach relevanten Funktionen die WINAPI Library von RSBasic
empfehlen !
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
C h r i s :)
Beiträge: 56
Registriert: 12.11.2015 17:41

Re: wie Linienbreite festlegen

Beitrag von C h r i s :) »

Ist purecolor open source? dann könnte man die api befehle in winapi lib übernehmen
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: wie Linienbreite festlegen

Beitrag von Bisonte »

C h r i s :) hat geschrieben:Ist purecolor open source? dann könnte man die api befehle in winapi lib übernehmen
Gnozal hat zu keiner seiner Userlibraries jemals den Source veröffentlicht. Leider.
Geschrieben wurden sie meines Wissens mit PB 3.9x und max. Windows XP. Um nur mal Eckdaten der Erstellung zu haben ;)
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: wie Linienbreite festlegen

Beitrag von udg »

ICh benutze purecolor derzeit unter Windows 7 64bit mit Purebasic 5.3 . Noch läuft alles super.
Aber das es eine API von rsbasic gibt,die das selbe tut wusste ich nicht. Wo kann man diese bekommen?

Grüße
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: wie Linienbreite festlegen

Beitrag von RSBasic »

PureColor ist eine umfangreiche Bibliothek zum Umfärben von Gadgets. Meine WinAPI Library bietet einige, aber nicht alle Codes zum Umfärben von Gadgets.
Wenn du was brauchst, um die Vorder-/Hintergrundfarbe eines bestimmten Gadgets zu ändern und es existiert noch kein Code in der WinAPI Library, dann sag einfach Bescheid.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: wie Linienbreite festlegen

Beitrag von udg »

RSBasic hat geschrieben:PureColor ist eine umfangreiche Bibliothek zum Umfärben von Gadgets. Meine WinAPI Library bietet einige, aber nicht alle Codes zum Umfärben von Gadgets.
Wenn du was brauchst, um die Vorder-/Hintergrundfarbe eines bestimmten Gadgets zu ändern und es existiert noch kein Code in der WinAPI Library, dann sag einfach Bescheid.
Herzlichen Dank. :allright:

Ich sehe gerade, dass ich dies als Installer auf meinem PC habe :) Was ich für Buttons nicht finden konnte ist die Option, die Gnozal anietet in seiner Lib für Buttons:

ButtonGadget:
erstellt einen Flat Button mit verschiedenen Farben gleich in einer Zeile.
PureCOLOR_SetButtonColor(#Btn_OpenBrowserGadget, RGB(189, 189, 189) <-- Textfarbe Button normal, $262322<--Button Farbe normal, RGB(244, 244, 244)<-- Textfarbe wenn aktiv (Klickevent), RGB(6, 6, 6)<-- Button Farbe wenn aktiv (Klickevent))

Was noch nice ist und fehlt: eine Hover Farbe bei MouseEnter (stelle ich mir so vor):

SetButtonColor_(0, RGB(189, 189, 189) <-- Textfarbe Button normal, $262322<--Button Farbe normal, RGB(244, 244, 244)<-- Textfarbe bei Hover (MouseEnter), RGB(6, 6, 6)<-- Button Farbe bei Hover (MouseEnter)RGB(244, 244, 244)<-- Textfarbe wenn aktiv (Klickevent), RGB(6, 6, 6)<-- Button Farbe wenn aktiv (Klickevent));

Unterstützung Alphatransparenz für die Farbwerte wäre top.
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Antworten