Seite 1 von 2

Neues Icon [?] in der Titlebar erstellen und abfragen?

Verfasst: 17.11.2005 09:32
von Dr.Pixel
Hallo,
wie erstelle ich ein neues Icon in der Titelleiste.
Oft sieht man das berühmte [?].
Damit möchte ich gerne bei der Auswahl des [?]-Icons
die Maus in ein Fragezeichen wandeln und eine Hilfe
aktivieren, wenn ein bestimmtes Gadget in meinem
Fenster ausgewählt wird.

Hat da vielleicht jemand eine Idee?

Danke,
Dr. Pixel

Verfasst: 17.11.2005 10:37
von mipooh
Du meinst sicher sowas : ToolBarImageButton()

Ist ein ganz normaler PureBasic Befehl.

Re: Neues Icon [?] in der Titlebar erstellen und abfragen?

Verfasst: 17.11.2005 10:51
von Kiffi
> wie erstelle ich ein neues Icon in der Titelleiste.

das kannst Du u.a. mit dem Befehl ShowHelpButton() aus der SkinWin-Lib
von Danilo bewerkstelligen.

Die SkinWin-Lib ist im PBOSL-Paket integriert: http://pbosl.purearea.net/

Grüße ... Kiffi

Verfasst: 17.11.2005 12:14
von Dr.Pixel
OK ich meine die Titelleiste!

@ Kiffi: Danke für den Link!
Leider finde ich keine Anleitung (auch über SUCHE nicht!) für die
PBOSL zum einbinden in den eigenen Sourcecode.
Ich habe mir die Zipdatei PBOSL_WIN heruntergeladen.
Wie binde ich jetzt die Lib ein?

Vielleicht so?:

Code: Alles auswählen

; AppRunning Twice ???

  If OpenLibrary(0, "D:\Purebasic\PBOSL\PBOSL_WIN\PBOSL\PureBasic\PureLibraries\UserLibraries\PBOSL_AppRunning") ;Name der kompilierten Lib
  EndIf

OpenConsole()


MyApp.s="This is my Application"
Result=CallFunction(0, "AppRunning(MyApp.s)")
If Result=0
 PrintN("This is the first time starting this application")
Else
 PrintN("There is another task running with same Applicationname!")
EndIf
Dummy.s=Input() 
Result=CallFunction(0, "AppRunning(MyApp.s)")
PrintN("---------------------------------------------------------------")
PrintN("Result of AppRunning("+Chr(34)+MyApp+Chr(34)+") is "+Str(Result))
Dummy.s=Input() 
CloseConsole() 

CloseLibrary(0)
Nur wenn ich diesen code kompiliere und die exe zweimal gleichzeitig starte,
bekomme ich trotzdem die Meldung: "This is the first time starting this application"
Binde ich die Lib falsch ein?

Bitte um Hilfe.

Danke,
Dr. Pixel

Verfasst: 17.11.2005 12:48
von nco2k
@Dr.Pixel
- schliesse den pb editor bzw. jaPBe sofern geöffnet

- den inhalt von PBOSL_WIN\PBOSL\PureBasic\PureLibraries\UserLibraries kopierst du nach C:\Programme\PureBasic\PureLibraries\UserLibraries

- den inhalt von PBOSL_WIN\PBOSL\PureBasic\Residents kopierst du nach C:\Programme\PureBasic\Residents

- den inhalt von PBOSL_WIN\PBOSL\PureBasic\Help kopierst du nach C:\Programme\PureBasic\Help

- usw. falls mehr zeug vorhanden ist

wie du siehst habe ich hier C:\Programme\PureBasic geschrieben, solltest du pb woanders installiert haben, musst du den pfad natürlich durch deinen ersetzen.

jetzt kannst du die befehle wie ganz normale pb befehle aufrufen:

Code: Alles auswählen

If OpenWindow(0, 0, 0, 480, 320, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "")
  ShowHelpButton(WindowID(), #True)
  
  Repeat
    WinEvent.l = WaitWindowEvent()
  Until WinEvent = #PB_Event_CloseWindow
  
EndIf

End
edit: copy paste fehler gefixt

c ya,
nco2k

Verfasst: 17.11.2005 12:50
von Kiffi
> Ich habe mir die Zipdatei PBOSL_WIN heruntergeladen.

gut. Dieses Zip beinhaltet die Libraries. Was Du nun für Dein besseres
Verständnis benötigst, ist das Example-Zip. Dort sind für jede im
PBOSL-Paket enthaltene Lib Beispieldateien vorhanden.

Hier der Direktlink: http://pbosl.purearea.net/pbosl_examples.zip

Grüße ... Kiffi

Verfasst: 17.11.2005 15:25
von Dr.Pixel
Dank an nco2k und Kiffi :allright:
Jetzt kann ich auch die PBOSL nutzen <) <) <)
Nur leider schaffe ich es nicht mit #WM_HELP den Hilfebutton abzufragen :cry:

Auszug aus der Hilfe:
When the user clicks the help button in the titlebar, the cursor changes
to a question mark with a pointer and when a gadget/childwindow gets
clicked, the window callback receives a #WM_HELP message.




Was mach ich hier falsch:

Code: Alles auswählen

Enumeration
  #Button_1
  #Button_2
EndEnumeration

start:

If OpenWindow(0, 0, 0, 480, 320, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "")
   ShowHelpButton(WindowID(), #True)
  
  If CreateGadgetList(WindowID())
      ButtonGadget(#Button_1, 30, 40, 210, 20, "Domänenkonto entsperren", #PB_Button_Default)
      ButtonGadget(#Button_2, 30, 65, 210, 20, "Domänenkonto INCA entsperren")
  EndIf
  
    Repeat 
     EventID = WaitWindowEvent() 
     Select EventID 
       Case #PB_Event_Gadget 
         Select EventGadgetID()
           Case #WM_HELP : Goto help
           Case 0 : Goto button1
           Case 1 : Goto button2
         EndSelect 
     EndSelect 
   Until EventID = #PB_Event_CloseWindow
  
EndIf
End


help:
  MessageRequester("Help","Hilfe aktiviert",0)
Goto start

button1:
  MessageRequester("Button 1","Button gedrückt",0)
Goto start

button2:
  MessageRequester("Button 2","Button gedrückt",0)
Goto start
Danke,
Dr. Pixel

Verfasst: 17.11.2005 15:54
von Kiffi
> Was mach ich hier falsch:

als erstes: Lass bitte den Goto-Quatsch weg! Der ist unnötig und in
Deinem Beispiel auch noch falsch (Du springst mit 'goto start' an
eine völlig ungeeignete Stelle Deines Codes).

Für die Abfrage von #WM_Help benötigst Du einen Callback.

Nachfolgend mal ein Beispiel, wie das zu realisieren ist:

Code: Alles auswählen

Enumeration
  #Button_1
  #Button_2
EndEnumeration

Procedure.l WindowCallback(hWnd, Msg, wParam, lParam)
  
  Result = #PB_ProcessPureBasicEvents 
  
  Select Msg   
    
    Case #WM_HELP
      
      GetCursorPos_(MousePos.POINT) 
      
      Select WindowFromPoint_(MousePos\x,MousePos\y) 
        Case GadgetID(#Button_1)
          MessageRequester("Button 1","Hilfe für Button1")
        Case GadgetID(#Button_2)
          MessageRequester("Button 2","Hilfe für Button2")
      EndSelect
          
  EndSelect
  
  ProcedureReturn Result
  
EndProcedure

If OpenWindow(0, 0, 0, 480, 320, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "")
  
  ShowHelpButton(WindowID(), #True)
  
  If CreateGadgetList(WindowID())
    ButtonGadget(#Button_1, 30, 40, 210, 20, "Domänenkonto entsperren", #PB_Button_Default)
    ButtonGadget(#Button_2, 30, 65, 210, 20, "Domänenkonto INCA entsperren")
  EndIf
  
  SetWindowCallback(@WindowCallback())
  
  Repeat
    EventID = WaitWindowEvent()
    Select EventID
      Case #PB_Event_Gadget
        Select EventGadgetID()
          Case #Button_1
            MessageRequester("Button 1","Button gedrückt",0)
          Case #Button_2
            MessageRequester("Button 2","Button gedrückt",0)
        EndSelect
    EndSelect
  Until EventID = #PB_Event_CloseWindow
  
EndIf

End
Grüße ... Kiffi

Verfasst: 17.11.2005 15:59
von nco2k
ausserdem sollte #WM_HELP den wert 53 haben (laut ApiViewer) und nicht 83.

aber dann dürfte kiffis beispiel eigentlich nicht gehen, komisch.

c ya,
nco2k

Verfasst: 17.11.2005 16:19
von Dr.Pixel
Grossen Dank an Kiffi :allright:
Klappt ja wunderbar.
Die Geschichte mit dem goto nehme ich zur Kenntnis!

Kann mir jemand einen Link oder eine Erklärung zukommen lassen, in dem das Thema Callback erklärt wird?

Ausserdem verstehe ich nicht, warum das Programm in die Procedure WindowCallback springt beim drücken des [?], obwohl sich das Programm in der Repeatschleife befindet?

@nco2k: <<ausserdem sollte #WM_HELP den wert 53 haben (laut ApiViewer) und nicht 83.>> ???
Hmm, kannst Du das genauer erklären?

mfg
Dr. Pixel