Seite 1 von 1

IncludeBinary mit ToolBar

Verfasst: 07.03.2018 12:50
von ProgOldie
Hallo,
das folgende Testprogramm funktioniert.

Code: Alles auswählen

EnableExplicit

Enumeration
  #ToolBar
  #newRow
  #delRow
  #editRow
EndEnumeration

DataSection
  Icon_new:
  IncludeBinary("newRow.bmp")
  Icon_del:
  IncludeBinary("deleteRow.bmp")
  Icon_edit:
  IncludeBinary("Edit.bmp")
EndDataSection

Define Ev.i

Procedure.i TestWin()
  Protected WinNr.i
  
  DataSection
  Icon_new:
  IncludeBinary("newRow.bmp")
  Icon_del:
  IncludeBinary("deleteRow.bmp")
  Icon_edit:
  IncludeBinary("Edit.bmp")
EndDataSection
 
  WinNr=OpenWindow(#PB_Any,50,50,100,80,"Test-Window",#PB_Window_SystemMenu)
 
  If CreateToolBar(#ToolBar, WindowID(WinNr))
    ToolBarImageButton(#newRow, CatchImage(0,?Icon_new),#PB_ToolBar_Toggle)
    ToolBarImageButton(#delRow, CatchImage(1,?Icon_del),#PB_ToolBar_Toggle)
    ToolBarImageButton(#editRow, CatchImage(2,?Icon_edit),#PB_ToolBar_Toggle)   
  EndIf
EndProcedure
  
  TestWin()
  
  Repeat
    Ev=WaitWindowEvent()
  Until Ev=#PB_Event_CloseWindow
Trotzdem dazu zwei Fragen.
1.) Ich habe aus Gründen der Übersichtlichkeit die Datasection da definiert, wo sie gebraucht wird, innerhalb einer Prozedur. Gibt's damit grundsätzliche Probleme?
2.) Bei CatchImage() habe ich Nummern 0,1,2 angegeben. Es geht aber auch mit der gleichen Nummer wie z.B. 0. Muss ich denn unbedingt verschiedene Nummern nehmen, wenn ich - wie in der Toolbar - auf das Bild an sich gar nicht mehr zugreifen muss?

Re: IncludeBinary mit ToolBar

Verfasst: 07.03.2018 12:59
von RSBasic
ProgOldie hat geschrieben:1.) Ich habe aus Gründen der Übersichtlichkeit die Datasection da definiert, wo sie gebraucht wird, innerhalb einer Prozedur. Gibt's damit grundsätzliche Probleme?
Ich glaube, es ist egal, da der Compiler die DataSection-Bereiche separat ermittelt und binär in die richtigen Position einfügt.
Da in der PB-Hilfe nichts steht, dass es nicht erlaubt ist und da der Compiler nicht meckert, sollte das korrekt und erlaubt sein.
ProgOldie hat geschrieben:2.) Bei CatchImage() habe ich Nummern 0,1,2 angegeben. Es geht aber auch mit der gleichen Nummer wie z.B. 0. Muss ich denn unbedingt verschiedene Nummern nehmen, wenn ich - wie in der Toolbar - auf das Bild an sich gar nicht mehr zugreifen muss?
Verwende doch einfach #PB-Any, dann ist es dir egal, welche IDs.
Wenn du die gleiche Nummer verwendest, wird das vorherige geladene Bild überschrieben, aber da du die Bild-ID an die ToolBar übergibst, ist egal, ob du die gleiche Nummer verwendest, weil Windows das übergebene Bild separat im Speicher adressiert. Nur weiß ich nicht, ob Linux und MacOS genauso tun. Das kann vielleicht ganz anders sein.

Re: IncludeBinary mit ToolBar

Verfasst: 07.03.2018 13:05
von ProgOldie
Danke, bei 2) ist der Hinweis auf Linux und Co. bedenkenswert. Ich werde es mit #PB_Any machen.


Korrektur: Mit #PB_Any in z.B. CatchImage(#PB_Any,?Icon_del) funktioniert es nicht, die Buttons bleiben unsichtbar.

Re: IncludeBinary mit ToolBar

Verfasst: 07.03.2018 13:57
von Bisonte
Mit #PB_Any meinte RS Basic auch was anders ;)

Wenn du mit #PB_Any etwas erstellst (Bild, Gadget etc.) dann bekommst du die PB ID zurück.

Dann musst du es so machen :

Code: Alles auswählen

Image = CatchImage(#PB_Any, ?Icon_new)
ToolBarImageButton(#newRow, ImageID(Image), #PB_ToolBar_Toggle)
Oder halt in Direkter weise :

Code: Alles auswählen

ToolBarImageButton(#newRow, ImageID(CatchImage(#PB_Any, ?Icon_new)), #PB_ToolBar_Toggle)
Wobei man die erste Möglichkeit immer vorziehen sollte, da dann FreeImage(Image) nachgeschoben werden kann...

Re: IncludeBinary mit ToolBar

Verfasst: 07.03.2018 19:09
von DarkSoul
Ich habe aus Gründen der Übersichtlichkeit die Datasection da definiert, wo sie gebraucht wird, innerhalb einer Prozedur. Gibt's damit grundsätzliche Probleme?
Der Bereich zwischen DataSection und EndDatasection wird nicht ausgeführt.

Ich würde das nicht machen. Spätestens, wenn du eines der Icons ein weiteres Mal an einer anderen Stelle benötigst, ist es sch***. :)

Ich mache die DataSection immer an das Ende derselben Sourcecode-Datei und da ist dann komplett alles drin. Siehst ja trotzdem an den ?xyz-Pointern, wo die Daten herkommen und wenn du nur einen großen DataSection-Block hast, brauchste auch nicht lange suchen. :wink:

Re: IncludeBinary mit ToolBar

Verfasst: 07.03.2018 19:15
von mk-soft
Ich glaube du kannst auch CatchImage(0, ...) nehmen. Beim anlegen des ToolBarImageButton wird wieder eine Kopie von Image erstellt

Code: Alles auswählen

If OpenWindow(0, 0, 0, 150, 25, "ToolBar", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    If CreateToolBar(0, WindowID(0))
      CreateImage(0,16,16)
      StartDrawing(ImageOutput(0))
        Box(0,0,16,16,RGB(255,255,255))
        Box(4,4,8,8,RGB(255,0,0))
      StopDrawing()
      ToolBarImageButton(0,ImageID(0))
      CreateImage(0,16,16)
      StartDrawing(ImageOutput(0))
        Box(0,0,16,16,RGB(255,0,0))
        Box(4,4,8,8,RGB(255,255,255))
      StopDrawing()
      ToolBarImageButton(1,ImageID(0))
      FreeImage(0)
    EndIf
    Repeat
    Until WaitWindowEvent() = #PB_Event_CloseWindow 
  EndIf