Schatten für Gadgets

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Andreas
ToolbarKönig
Beiträge: 142
Registriert: 08.09.2004 08:33

Schatten für Gadgets

Beitrag von Andreas »

Vielleicht kann's ja jemand gebrauchen .

Code: Alles auswählen

;####################################
; Gadgets mit Schatten versehen
; Author : Andreas Januar 2007
;####################################


Enumeration 
;Windows
  #Main
;ButtonGadgets
  #Button1
;EditorGadgets  
  #Editor1
;CalendarGadgets  
  #Calender1
;TextGedgets
  #Text1  
;TextBorder
  #Text2
;Dategadgets
  #Date1  
EndEnumeration

Procedure ShadowProc(wnd,lparam)
;TextGadgets ausnehmen
If (GetDlgCtrlID_(wnd) < #Text1) Or (GetDlgCtrlID_(wnd) >= #Text2) 
Protected x.l,y.l,w.l,h.l
Brush = GetStockObject_(#DKGRAY_BRUSH)
Pen   = GetStockObject_(#NULL_PEN)
OldBrush = SelectObject_(lParam,Brush)
OldPen   = SelectObject_(lParam,Pen)
x = GadgetX(GetDlgCtrlID_(wnd))+6
y = GadgetY(GetDlgCtrlID_(wnd))+6
w = GadgetX(GetDlgCtrlID_(wnd))+6+GadgetWidth(GetDlgCtrlID_(wnd))
h = GadgetY(GetDlgCtrlID_(wnd))+6+GadgetHeight(GetDlgCtrlID_(wnd))
OldBrush = SelectObject_(lParam,Brush)
Rectangle_(lParam,x,y,w,h)
SelectObject_(lParam,OldBrush)
SelectObject_(lParam,OldPen)
DeleteObject_(Brush)
DeleteObject_(Pen)
EndIf
ProcedureReturn #True
EndProcedure

Procedure WCB(wnd,msg,wparam,lparam)
Shared FullDrag.l
  Result = #PB_ProcessPureBasicEvents
  Select msg
    Case #WM_NCHITTEST
    Case #WM_PAINT
        BeginPaint_(wnd,ps.PAINTSTRUCT)
           EnumChildWindows_(wnd,@ShadowProc(),ps\hdc)
        EndPaint_(wnd,ps.PAINTSTRUCT)
  EndSelect
  ProcedureReturn Result
EndProcedure


If OpenWindow(#Main, 100, 200, 400, 420, "Mein Fenster",#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget)
If CreateGadgetList(WindowID(0))
    ButtonGadget(#Button1, 10,10,80,24,"Ende")
    EditorGadget(#Editor1, 10,50,300,100) 
    CalendarGadget(#Calender1, 10, 170,200,180)
    TextGadget(#Text1,10,370,350,30,"Sieht nicht gut aus mit Schatten, darum werden TextGadgets ohne Rand nicht behandelt")
    TextGadget(#Text2,260,190,100,16,FormatDate("%dd.%mm.%yyyy %hh:%ii", Date()),#SS_CENTER|#WS_BORDER)
    DateGadget(#Date1, 100, 10, 180, 25, "Datum: %dd/%mm/%yyyy Zeit: %hh:%ii")
EndIf
SetWindowCallback(@WCB())
InvalidateRect_(WindowID(0),0,0)
SetForegroundWindow_(WindowID(#Main))
Repeat
  EventID = WaitWindowEvent()
  Select EventID
    Case #PB_Event_Gadget
    Select EventGadget()
      Case 1
        SendMessage_(WindowID(0),#WM_CLOSE,0,0)
    EndSelect
      Case #PB_Event_CloseWindow
        Quit = 1
  EndSelect
Until Quit = 1
EndIf
End
Gruss Andreas
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Sehr schön :allright:
Die ShadowProc würde ich wie folgt abändern:

Code: Alles auswählen

  ;TextGadgets ausnehmen
  If GadgetType(GetDlgCtrlID_(wnd)) <> #PB_GadgetType_Text
Ist flexibler :wink:

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Andreas
ToolbarKönig
Beiträge: 142
Registriert: 08.09.2004 08:33

Beitrag von Andreas »

ts-soft hat geschrieben:

Code: Alles auswählen

  ;TextGadgets ausnehmen
  If GadgetType(GetDlgCtrlID_(wnd)) <> #PB_GadgetType_Text
Ist flexibler :wink:

Gruß
Thomas
Danke !
Nicht unbedingt ! Ein Textgedaget im Code hat ja einen Schatten, und der wäre dann weg. :wink:
Gruss Andreas
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

hups, übersehen :oops:
Naja, dann müßte man noch den Stil auswerten. Tut dann mal nicht nötig :wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag von Andre »

Sehr schön :allright:

Habs schon im neuen CodeArchiv gespeichert.
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Antworten