Farbe der Panel Lasche verändern ???

Für allgemeine Fragen zur Programmierung mit PureBasic.
Velz
Beiträge: 182
Registriert: 18.10.2004 22:20

Farbe der Panel Lasche verändern ???

Beitrag von Velz »

Ich habe ein Panel Gadget mit mehreren Laschen. Unter jeder Lasche kann ich Daten bearbeiten. Dazu springe ich in einen Bearbeitungsmodus und dabei wird das Bearbeiten der anderen Laschen gesperrt.

Jetzt würde ich gerne die Lasche kennzeichnen welche im Bearbeitungsmodus ist. Kennt jemand dazu eine Möglichkeit ???
Win10/64|Ubuntu-Server|Mint WS // Programmiere Datenbankanwendungen und Tools mit PB-5.x und MySQL-5.x unter Win und Linux
Benutzeravatar
roherter
Beiträge: 1407
Registriert: 10.04.2005 18:58
Kontaktdaten:

Beitrag von roherter »

Aus dem Englischen Forum
übrigens Lasche ist witzig

Code: Alles auswählen

;===========================================
; Code        : Colorize PanelGadget Tabs
; Author      : Sparkie
; Date        : 08/17/06
; PB Version  : PB 4.00
; OS Support  : Windows only
;===========================================

Global oldCallback

;... Create our background brush for use with tabs
Global greenBrush = CreateSolidBrush_(#Green)

;...Our subclassed PanelGadget events
Procedure myPGcallback(hwnd, msg, wParam, lParam)
  result = CallWindowProc_(oldCallback, hwnd, msg, wParam, lParam)
  Select msg
    Case #WM_DRAWITEM
      *PGdis.DRAWITEMSTRUCT = lParam
      If *PGdis\CtlType = #ODT_TAB
        Select *PGdis\itemID
          ;...Tabs that will appear with red text on a green background
          Case 0, 2
            tabText$ = GetGadgetItemText(0, *PGdis\itemID, 0)
            FillRect_(*PGdis\hdc, *PGdis\rcItem, greenBrush)
            SetTextColor_(*PGdis\hdc, #Red)
            SetBkMode_(*PGdis\hdc, #TRANSPARENT)
            DrawText_(*PGdis\hdc, tabText$, Len(tabText$), *PGdis\rcItem, #DT_CENTER | #DT_SINGLELINE | #DT_VCENTER | #DT_NOCLIP)
          Default
            ;...Tabs that will appear with blue text on system default color
            tabText$ = GetGadgetItemText(0, *PGdis\itemID, 0)
            SetTextColor_(*PGdis\hdc, #Blue)
            SetBkMode_(*PGdis\hdc, #TRANSPARENT)
            DrawText_(*PGdis\hdc, tabText$, Len(tabText$), *PGdis\rcItem, #DT_CENTER | #DT_SINGLELINE | #DT_VCENTER | #DT_NOCLIP)
        EndSelect
      EndIf
  EndSelect
  ProcedureReturn result
EndProcedure

If OpenWindow(0, 0, 0, 322, 220,"",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
  PanelGadget(0, 8, 8, 306, 203)
  AddGadgetItem (0, -1, "Panel 1")
  ButtonGadget(1, 10, 30, 50, 20, "Hello")
  AddGadgetItem (0, -1,"Panel 2")
  ButtonGadget(2, 10, 30, 50, 20, "World")
  AddGadgetItem (0, -1,"Panel 3")
  ButtonGadget(3, 10, 30, 80, 20, "PureBasic")
  CloseGadgetList()
  
  ; Ownderdraw and subcalss PanelGadget to colorize tabs
  SetWindowLong_(GadgetID(0), #GWL_STYLE, GetWindowLong_(GadgetID(0), #GWL_STYLE) | #TCS_OWNERDRAWFIXED)
  oldCallback = SetWindowLong_(GetParent_(GadgetID(0)), #GWL_WNDPROC, @myPGcallback())
  
  Repeat
    Event = WaitWindowEvent()
  Until Event = #PB_Event_CloseWindow
  DeleteObject_(greenBrush)
EndIf
End 
:lol:
Purebasic 5.0 32bit und 64 bit

I'm back from hell
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Beitrag von Thomas »

Ist das auch schöner möglich?
Bei mir ist das etwas "Eckig".
v6.00
Velz
Beiträge: 182
Registriert: 18.10.2004 22:20

Beitrag von Velz »

hei super...

kantig hin oder her... es funktioniert....

hm... und Lasche finde ich schöner als den Reiter...
Win10/64|Ubuntu-Server|Mint WS // Programmiere Datenbankanwendungen und Tools mit PB-5.x und MySQL-5.x unter Win und Linux
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Beitrag von c4s »

Ist es möglich hier irgendwie den Hintergrund von der Lasche herauszufinden?
(Also der Bereich unter der Lasche..)

mfg c4s
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Velz
Beiträge: 182
Registriert: 18.10.2004 22:20

Beitrag von Velz »

Das einfärben der "Lasche" bzw der Schrift funktionieren sehr gut.

Wenn ich aber versuche die Schriftfarbe während des Programmablaufes mit der gleichen Prozedur erneut zu verändern erhalte ich eine Fehlermeldung. Hat jemand eine Idee ???
Win10/64|Ubuntu-Server|Mint WS // Programmiere Datenbankanwendungen und Tools mit PB-5.x und MySQL-5.x unter Win und Linux
Benutzeravatar
Kiffi
Beiträge: 10725
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Velz hat geschrieben:erhalte ich eine Fehlermeldung.
... die da lautet?

Grüße ... Kiffi
a²+b²=mc²
Velz
Beiträge: 182
Registriert: 18.10.2004 22:20

Beitrag von Velz »

Ich habe einige Versuche hinter mir und kann es leider nicht mehr alles nachvollziehen.... von stack overflow bis erhängt ist alles dabei.

Es dürfte daran liegen, dass man die Prozedur wohl nicht ohne weiteres ein zweites mal auf dem gleichen weg aufrufen kann.... Der wichtigste Grund dürfte sein, dass ich mich mit APIs überhaupt nicht auskenne..

Der erste Fehler ist leicht nachzuvollziehen...

einfach die Zeilen

SetWindowLong_(GadgetID(0), #GWL_STYLE, GetWindowLong_(GadgetID(0), #GWL_STYLE) | #TCS_OWNERDRAWFIXED)
oldCallback = SetWindowLong_(GetParent_(GadgetID(0)), #GWL_WNDPROC, @myPGcallback())

ohne veränderung ein zweites mal aufrufen....
Win10/64|Ubuntu-Server|Mint WS // Programmiere Datenbankanwendungen und Tools mit PB-5.x und MySQL-5.x unter Win und Linux
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Das brauchst auch nicht. Die Function (Callback) wird so oder so
bei jedem neuzeichnen von dem "Laschen"-Control aufgerufen.

Wie genau hast denn versucht in der Funktion etwas zu aendern?
Velz
Beiträge: 182
Registriert: 18.10.2004 22:20

Beitrag von Velz »

Welch edler Held....

Ein kleiner Schlag auf die Großhirnrinde und schon bin ich einen Schritt weiter.... dafür schon mal danke....

aktuell mache ich das so... dass ich über eine Globale Variable die Farbe beim nächsten event vorgebe und den event mit

SetGadgetState(0,0)
SetGadgetState(0,1)

herbeiführe.... zumindest tut das ...

wie würde der Provi das ohne Globale machen ??
Win10/64|Ubuntu-Server|Mint WS // Programmiere Datenbankanwendungen und Tools mit PB-5.x und MySQL-5.x unter Win und Linux
Antworten