Weiß jemand wie man die Farbe des Rahmens eines EditorGadget ändert ?
Ich habe zwar gesucht aber nix gefunden
EditorGadget Border Color ändern ?
- hjbremer
- Beiträge: 822
- Registriert: 27.02.2006 22:30
- Computerausstattung: von gestern
- Wohnort: Neumünster
EditorGadget Border Color ändern ?
Purebasic 5.70 x86 5.72 X 64 - Windows 10
Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Re: EditorGadget Border Color ändern ?
Erfolgreich getestet in Windows 10 Enterprise 22H2 x64 mit PB 6.00 x86 + x64 mit Asm- und C-Backend:
Code: Alles auswählen
EnableExplicit
Procedure DrawGadgetBorder(GadgetID.I, BorderColor.I)
Protected BackImage.I
BackImage = CreateImage(#PB_Any, GadgetWidth(GadgetID) + 4,
GadgetHeight(GadgetID) + 4)
StartDrawing(ImageOutput(BackImage))
Box(0, 0, ImageWidth(BackImage), ImageHeight(BackImage), BorderColor)
StopDrawing()
ImageGadget(#PB_Any, GadgetX(GadgetID) - 2, GadgetY(GadgetID) - 2,
GadgetWidth(GadgetID) + 4, GadgetHeight(GadgetID) + 4,
ImageID(BackImage))
FreeImage(BackImage)
SetWindowLongPtr_(GadgetID(GadgetID), #GWL_STYLE,
GetWindowLongPtr_(GadgetID(GadgetID), #GWL_STYLE) | #WS_CLIPSIBLINGS)
EndProcedure
OpenWindow(0, 270, 100, 170, 145, "Gadgets mit Rahmen")
CheckBoxGadget(0, 10, 20, 95, 18, "OptionGadget", #WS_CLIPSIBLINGS)
DrawGadgetBorder(0, #Blue)
EditorGadget(1, 10, 60, 150, 70, #WS_CLIPSIBLINGS)
DrawGadgetBorder(1, #Red)
SetGadgetText(1, "EditorGadget")
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
- hjbremer
- Beiträge: 822
- Registriert: 27.02.2006 22:30
- Computerausstattung: von gestern
- Wohnort: Neumünster
Re: EditorGadget Border Color ändern ?
Danke für den Code ! Interressante Lösung
man könnte es so machen, aber man hat 2 Gadgets. das verschieben wird dann etwas aufwändiger.
Und wozu warum #WS_CLIPSIBLINGS ? Zudem es doppelt ist. Einmal als direktes flag und dann nochmal via Sendmessage
man könnte es so machen, aber man hat 2 Gadgets. das verschieben wird dann etwas aufwändiger.
Und wozu warum #WS_CLIPSIBLINGS ? Zudem es doppelt ist. Einmal als direktes flag und dann nochmal via Sendmessage
Purebasic 5.70 x86 5.72 X 64 - Windows 10
Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Re: EditorGadget Border Color ändern ?
Probier mal...
Code: Alles auswählen
Global oldProc, brush1, brush2
Procedure WndCallback(hWnd, Msg, wParam, lParam)
Select Msg
Case #WM_NCPAINT
GetWindowRect_(hWnd, cRect.RECT)
OffsetRect_(cRect, -cRect\left, -cRect\top)
hdc = GetDCEx_(hWnd, 0, #DCX_WINDOW|$10000)
FrameRect_(hdc, cRect, brush1)
InflateRect_(cRect, -1, -1)
FrameRect_(hdc, cRect, brush2)
ReleaseDC_(hWnd, hdc)
ProcedureReturn 0
Case #WM_NCDESTROY
SetWindowLongPtr_(hWnd, #GWL_WNDPROC, @oldProc)
ProcedureReturn DefWindowProc_(hWnd, Msg, wParam, lParam)
EndSelect
ProcedureReturn CallWindowProc_(oldProc, hWnd, Msg, wParam, lParam)
EndProcedure
OpenWindow(0, 0, 0, 320, 200, "", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
EditorGadget(0, 10, 10, 300, 180)
brush1 = CreateSolidBrush_(#Blue)
brush2 = CreateSolidBrush_(#Cyan)
oldProc = SetWindowLongPtr_(GadgetID(0), #GWL_WNDPROC, @WndCallback())
While WaitWindowEvent() <> #PB_Event_CloseWindow : Wend
DeleteObject_(brush1)
DeleteObject_(brush1)
- hjbremer
- Beiträge: 822
- Registriert: 27.02.2006 22:30
- Computerausstattung: von gestern
- Wohnort: Neumünster
Re: EditorGadget Border Color ändern ?
Danke der Mühe
aber funktioniert bei mir nicht unter Win 10 PB 5.72
aber funktioniert bei mir nicht unter Win 10 PB 5.72
Purebasic 5.70 x86 5.72 X 64 - Windows 10
Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Re: EditorGadget Border Color ändern ?
Sorry, hab nicht auf Win10 getestet... Auf Win7 funktioniert es auch ohne SetWindowPos_(#SWP_FRAMECHANGED)
Code: Alles auswählen
Global oldProc, brush1, brush2
Procedure WndCallback(hWnd, Msg, wParam, lParam)
Select Msg
Case #WM_NCPAINT
GetWindowRect_(hWnd, cRect.RECT)
OffsetRect_(cRect, -cRect\left, -cRect\top)
hdc = GetDCEx_(hWnd, 0, #DCX_WINDOW|$10000)
FrameRect_(hdc, cRect, brush1)
InflateRect_(cRect, -1, -1)
FrameRect_(hdc, cRect, brush2)
ReleaseDC_(hWnd, hdc)
ProcedureReturn 0
Case #WM_NCDESTROY
SetWindowLongPtr_(hWnd, #GWL_WNDPROC, @oldProc)
ProcedureReturn DefWindowProc_(hWnd, Msg, wParam, lParam)
EndSelect
ProcedureReturn CallWindowProc_(oldProc, hWnd, Msg, wParam, lParam)
EndProcedure
OpenWindow(0, 0, 0, 320, 200, "", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
EditorGadget(0, 10, 10, 300, 180)
brush1 = CreateSolidBrush_(#Blue)
brush2 = CreateSolidBrush_(#Cyan)
oldProc = SetWindowLongPtr_(GadgetID(0), #GWL_WNDPROC, @WndCallback())
SetWindowPos_(GadgetID(0), 0, 0, 0, 0, 0, #SWP_NOSIZE|#SWP_NOMOVE|#SWP_NOZORDER|#SWP_NOACTIVATE|#SWP_FRAMECHANGED)
While WaitWindowEvent() <> #PB_Event_CloseWindow : Wend
DeleteObject_(brush1)
DeleteObject_(brush1)