Seite 1 von 1

Gadgets und Toolbar

Verfasst: 26.11.2004 00:08
von Sven
Hallo! Ich habe ein paar allgemeine Fragen zu Gadgets und Co, auf die Ihr bestimmt eine Antwort wisst. :D

1. Kann ich in einem StringGadget durch Formatierung (Flags...) Text zentriert oder rechtsbündig anordnen, so wie in einem TextGadget. Ohne den Text mit Leerzeichen aufzufüllen, richtig rechtsbündig, unabhängig von Größe, Font und Textlänge.

2. Wie kann ich ein ImageButton als toggle setzen? Gibt es da auch ein Flag wie beim normalen Button, oder muss ich das per Software abfangen?

3. Wie bekomme ich in der Toolbar den Hintergrund von eingebundenen Bildern in ToolbarImageButtons auf "farblos", um unabhängig vom Windows-Farbschema zu sein?
- Eine Farbe als durchsichtig definieren. Geht das, muß das Bild dazu ein bestimmtes Format (ico) haben?
- Die Farbe im Windows-Schema auslesen und die Hintergrundfarbe gleich setzen. Komme ich an die entsprechende Farbinfo ran?

Danke,

Sven

Verfasst: 26.11.2004 00:55
von Ynnus
Zu 1. Mit der WinAPI lässt sich das machen. Per Sendmessage_() kann man eine Nachricht an das Gadget senden, mit dem Inhalt, dass der Text zentriert sein soll. Den genauen Code dafür hab ich gerade nicht parat, aber such mal nach center oder so. Es ist zwar meist nicht direkt für Gadgets gedacht, lässt sich aber darauf anwenden. Vielleicht hat auch das Codearchiv was. Schau mal bei purearea.net vorbei. ;)
2. Wie kann ich ein ImageButton als toggle setzen? Gibt es da auch ein Flag wie beim normalen Button, oder muss ich das per Software abfangen?
Ebenfalls könnte man das mit der WINAPI machen. Dazu hab ich auch die Syntax:

Code: Alles auswählen

SendMessage_(GadgetID(#gadgetID), #BM_SETSTATE, #True, 0)
Mittels dieses Befehls wird der Button auf gedrückt gesetzt. Jedesmal wenn du also auf dein ImageButton klickst, muss jetzt abgefragt werden, ob der Button gedrückt ist oder nicht, und dann muss eben gedrückt werden oder eben "losgelassen" werden. So kannst du dir einen eigenen Toggle-Button aus jedem solchen Gadget bauen. Etwa auch mit Toolbars und so.
Übrigends kannst du entweder eine eigene Variable einführen welche den Status des Buttons speichert, ob er also derzeit gedrückt ist oder nicht, oder den Status per SendMessage wieder abfragen. Diesmal anstelle von #BM_SETSTATE musst du #BM_SETSTATE nehmen und das #TRUE auf 0 stellen. Bekommst du dann als Rückgabewert des Sendmessage den Wert der Konstante #BST_PUSHED so bedeutet das, dass der Button gedrückt war. Andernfalls eben nicht.
Da musst du jetzt ein wenig rumbasteln dass es so passt wie es soll.

Re: Gadgets und Toolbar

Verfasst: 26.11.2004 09:11
von Danilo
Sven hat geschrieben:1. Kann ich in einem StringGadget durch Formatierung
(Flags...) Text zentriert oder rechtsbündig anordnen,
so wie in einem TextGadget.
Flags:

Code: Alles auswählen

OpenWindow(0,0,0,300,300,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"String")
  CreateGadgetList(WindowID())
  StringGadget(1,10,10,100,20,"left (default)")    ; #ES_LEFT -> default
  StringGadget(2,10,35,100,20,"center",#ES_CENTER) ; zentriert
  StringGadget(3,10,60,100,20,"right", #ES_RIGHT)  ; rechtsbuendig

Repeat:Until WaitWindowEvent()=#PB_Event_CloseWindow
Sven hat geschrieben:3. Wie bekomme ich in der Toolbar den Hintergrund von
eingebundenen Bildern in ToolbarImageButtons auf
"farblos", um unabhängig vom Windows-Farbschema zu sein?

- Eine Farbe als durchsichtig definieren. Geht das, muß das Bild dazu ein bestimmtes Format (ico) haben?
Die PB-Referenz sagt man soll für Transparenz Icons
nehmen.

Ansonsten mit ToolbarPro (PureTools) und einer Maske
für die Transparenz.
Sven hat geschrieben:- Die Farbe im Windows-Schema auslesen und die Hintergrundfarbe gleich setzen. Komme ich an die entsprechende Farbinfo ran?
GetSysColor_(#COLOR_BTNFACE) oder evtl. LoadTransparentImage.pb / CatchTransparentImage.pb

Verfasst: 26.11.2004 12:57
von wichtel
@Sunny:
Das funktioniert, aber wenn ich auf andere Gadgets im Fenster klicke, springt der ButtonImageGadget immer zurück.

Ich habe eine andere Methode gefunden, die für mich funktioniert.

Code: Alles auswählen

      ButtonImageGadget(#ontop,10,10,20,20,UseImage(#unpin))
      SetWindowLong_(GadgetID(#ontop), #GWL_STYLE, GetWindowLong_(GadgetID(#ontop), #GWL_STYLE)|$1003) 
Dieser SetWindowLong Aufruf macht aus meinem ButtonImageGadget ein ToggleButtonImageGadget.
Allerdings verliert der Button das Bild beim Togglen.
Da ich das Bild aber sowieso ändern will stört das nicht.
In der EventLoop siehr das dann so aus:

Code: Alles auswählen

Procedure myEvents()
  Repeat
    EventID = WaitWindowEvent()
    EventType = EventType()
    Select EventID
      Case #PB_EventGadget
        GadgetID = EventGadgetID()
        Select GadgetID
          Case #ontop
            If ontop
              SetGadgetState(#ontop,UseImage(#unpin))
            Else
              SetGadgetState(#ontop,UseImage(#pin))
            EndIf
            ontop!1


Wie immer meine Frage an die Freaks: Ok so? Oder geht das besser.

Gruß
Michael