Seite 1 von 1

Schatten für Gadgets

Verfasst: 07.01.2007 20:40
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

Verfasst: 07.01.2007 21:05
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

Verfasst: 07.01.2007 21:31
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:

Verfasst: 07.01.2007 21:46
von ts-soft
hups, übersehen :oops:
Naja, dann müßte man noch den Stil auswerten. Tut dann mal nicht nötig :wink:

Verfasst: 09.01.2007 22:36
von Andre
Sehr schön :allright:

Habs schon im neuen CodeArchiv gespeichert.