Vertikale Trenner in horizontalem Menü

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Daffy0815
Beiträge: 390
Registriert: 15.06.2005 00:44
Wohnort: 65719 Hofheim
Kontaktdaten:

Vertikale Trenner in horizontalem Menü

Beitrag von Daffy0815 »

Hallo,

weis jemand wie man in folgendem Beispielcode Trennstriche zwischen den Menüpunkten einfügen kann damit es so aussieht wie auf dem Beispielfoto?

Code: Alles auswählen

If OpenWindow(#WindowNum, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  If CreateMenu(#MenuNum, WindowID(#WindowNum))
    MenuItem(1, "Erster Eintrag")
    MenuItem(2, "Zweiter Eintrag")
    MenuItem(3, "Dritter Eintrag")
  EndIf
 
  Repeat
    EventID = WaitWindowEvent()
    If EventID = #PB_Event_Menu
        If GetActiveWindow() = #WindowNum
          Select EventMenu()
            Case 1
              Debug "Erster Eintrag"
            Case 2
              Debug "Zweiter Eintrag"
            Case 3
            Debug "Dritter Eintrag"
        EndSelect
      EndIf
    EndIf  
    If EventID = #PB_Event_CloseWindow
      End
    EndIf
  ForEver
EndIf
Bild

Gruß

Daffy
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Vertikale Trenner in horizontalem Menü

Beitrag von RSBasic »

Danke, dass du einen extra Thread erstellt hast. Wenn du das jedes Mal zukünftig machen wirst, wäre das super.

So wie es in deinem Screenshot abgebildet ist, nimm am besten gleich eine leicht modifizierte ToolBar:

Code: Alles auswählen

EnableExplicit

Define EventID
Define TBID

Procedure ToolBarText(hwnd,ButtonID,Text.s)
  Protected tbi.TBBUTTONINFO
  
  tbi.TBBUTTONINFO
  tbi\cbSize = SizeOf(TBBUTTONINFO)
  tbi\dwMask = #TBIF_TEXT | #TBIF_STYLE
  tbi\fsStyle = #BTNS_BUTTON | #BTNS_AUTOSIZE
  tbi\pszText = @Text
  SendMessage_(hwnd,#TB_SETBUTTONINFO,ButtonID,tbi)
  
EndProcedure

If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  If CreateToolBar(0,WindowID(0))
    SetWindowLongPtr_(ToolBarID(0), #GWL_STYLE, GetWindowLongPtr_(ToolBarID(0), #GWL_STYLE) | #TBSTYLE_LIST)
    ToolBarImageButton(1,0)
    ToolBarSeparator()
    ToolBarImageButton(2,0)
    ToolBarSeparator()
    ToolBarImageButton(3,0)
    
    ToolBarText(ToolBarID(0), 1, "Erster Eintrag")
    ToolBarText(ToolBarID(0), 2, "Zweiter Eintrag")
    ToolBarText(ToolBarID(0), 3, "Dritter Eintrag")
    
    TBID = SendMessage_(ToolBarID(0), #TB_GETIMAGELIST, 0, 0)
    ImageList_SetIconSize_(TBID, 0, 16)
    SendMessage_(ToolBarID(0), #TB_SETIMAGELIST, 0, TBID)
    SendMessage_(ToolBarID(0), #TB_AUTOSIZE, 0, 0)
    
  EndIf
  
  Repeat
    EventID = WaitWindowEvent()
    If EventID = #PB_Event_Menu
      Select EventMenu()
        Case 1
          Debug "Erster Eintrag"
        Case 2
          Debug "Zweiter Eintrag"
        Case 3
          Debug "Dritter Eintrag"
      EndSelect
    EndIf 
    If EventID = #PB_Event_CloseWindow
      End
    EndIf
  ForEver
EndIf
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Daffy0815
Beiträge: 390
Registriert: 15.06.2005 00:44
Wohnort: 65719 Hofheim
Kontaktdaten:

Re: Vertikale Trenner in horizontalem Menü

Beitrag von Daffy0815 »

@RSBasic

Danke!

Allergings kann ich mich langsam des Gefühls nicht erwehren, dass die Erstellung von Programmen in PureBasic ganz ohne die Verwendung Windows-API's bzw. die Erstellung entsprechender Prozeduren zu deren Aufruf fast unmöglich ist.

Gruß

Daffy
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
Benutzeravatar
Kiffi
Beiträge: 10725
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Vertikale Trenner in horizontalem Menü

Beitrag von Kiffi »

Daffy0815 hat geschrieben:Allergings kann ich mich langsam des Gefühls nicht erwehren, dass die Erstellung von Programmen in PureBasic ganz ohne die Verwendung Windows-API's bzw. die Erstellung entsprechender Prozeduren zu deren Aufruf fast unmöglich ist.
Wer Sonderwünsche hat, die über Standardfunktionalitäten hinausgehen, muss halt in die Trickkiste greifen. Das ist übrigens in allen Programmiersprachen so und keine Eigenart von PureBasic.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Daffy0815
Beiträge: 390
Registriert: 15.06.2005 00:44
Wohnort: 65719 Hofheim
Kontaktdaten:

Re: Vertikale Trenner in horizontalem Menü

Beitrag von Daffy0815 »

@Kiffi

Das mag sein, dann habe ich wohl nur "Sonderwünsche".
Ich habe lediglich festgestellt, dass so ziemlich alles was ich bis jetzt versucht habe immer in einer Prozedur mit "...._" endete.

Gruß

Daffy
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
Benutzeravatar
Bisonte
Beiträge: 2476
Registriert: 01.04.2007 20:18

Re: Vertikale Trenner in horizontalem Menü

Beitrag von Bisonte »

Um die API Geschichte zu umgehen, kannst du auch alles in einem CanvasGadget abwickeln,
was dann ein "klitzekleinesbisschen" aufwändiger wäre ;)

Allerdings sieht das Fenster im Screenshot eher wie ein PanelGadget aus... von der Funktion her, als ein Menu...
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
Daffy0815
Beiträge: 390
Registriert: 15.06.2005 00:44
Wohnort: 65719 Hofheim
Kontaktdaten:

Re: Vertikale Trenner in horizontalem Menü

Beitrag von Daffy0815 »

@RSBasic

Das Beispiel funktioniert ja schon recht gut hat aber leider einen Haken!

Nachdem ich nun tagelang mit Menüs experimentiert habe und mir alle möglichen Proceduren "zusammengenagelt" habe um zu erreichen das diese Menüs und die dazugehörigen Fenster sich entsprechend den in der Systemsteuerung unter "Anzeige" gemachten Einstellungen automatisch richtig skalieren ist das hier natürlich nicht mehr der Fall.

Hier ist ja der größenbestimmende Punkt nicht mehr "Menü" sondern "Symbole".
Wenn man hier jetzt die Größe ändert ist die ganze schöne Leiste "erster, zweiter, dritter Eintrag" vermurkst.

Gruß

Daffy

PS. muss jetzt erst mal weg...
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Vertikale Trenner in horizontalem Menü

Beitrag von RSBasic »

Bisonte hat geschrieben:Allerdings sieht das Fenster im Screenshot eher wie ein PanelGadget aus... von der Funktion her, als ein Menu...
Das finde ich nicht, weil PanelGadget (SysTabControl32) keine Möglichkeit anbietet, vertikale Trennlinien zwischen Tabs anzuzeigen. Das geht nur bei Menu und ToolBar. Oder man erstellt es mit CanvasGadget komplett selber, aber da muss man aber auch alles andere programmieren, was deutlich aufwändiger ist, weil man das Rad komplett neu erfinden muss, wie du es bereits sagtest.
Daffy0815 hat geschrieben:Allergings kann ich mich langsam des Gefühls nicht erwehren, dass die Erstellung von Programmen in PureBasic ganz ohne die Verwendung Windows-API's bzw. die Erstellung entsprechender Prozeduren zu deren Aufruf fast unmöglich ist.
PureBasic ist eine plattformunabhängige Programmiersprache und wurde entwickelt, um z.B. die vom Betriebssystem bereitgestellten Controls zu verwenden und wichtig hierbei ist, dass die angebotene Funktionalität i.d.R. auf allen Systemen (Windows (WinAPI/Win32), Linux (GTK), MacOS (ich glaube Cocoa)) gleich ist.
Wenn man nun eine zusätzliche Eigenschaft wie z.B. vertikale Trennlinie nativ anbieten möchte, dann muss dafür gesorgt werden, dass es auch auf Linux und MacOS ebenfalls gibt, so dass die Programmausgabe überall gleich aussieht und funktioniert, egal wo man seinen Code kompilieren möchte.
Jedes Betriebssystem besitzt eigene Programmierschnittstellen, wie z.B. WinAPI bei Windows. Damit kann man alles mögliche machen. Und da es so umfangreich und komplex ist, kann der Hauptentwickler von PB natürlich nicht alles umsetzen und dafür sorgen, dass es auch mit GTK funktioniert. Das würde viele Jahre dauern, dass alles für alle Betriebssysteme anzubieten. Deshalb muss man, wenn man Sonderwünsche bezüglich der Umgestaltung und Anpassung der Controls hat, auch öfters auf WinAPI zugreifen, weil PureBasic niemals die vollständige Funktionspalette von WinAPI anbieten kann. Wenn die angebotene Standard-Funktionalität für den Benutzer ausreicht, dann ist es gut, dann funktionieren die Anwendungen problemlos auch auf Linux und MacOS, aber wenn man Sonderwünsche hat, dann muss man eben WinAPI nutzen. Da ich z.B. meine Programme eh nur für Windows entwickle, hab ich kein Problem, WinAPI zu nutzen.
Ich bin sogar froh, dass PB die WinAPI-Möglichkeit anbietet. Wäre es nicht möglich, wär ich aber ganz schnell weg.
Daffy0815 hat geschrieben:Wenn man hier jetzt die Größe ändert ist die ganze schöne Leiste "erster, zweiter, dritter Eintrag" vermurkst.
Bei solchen Sachen immer ein Screenshot mitliefern, weil ein Außenstehender nicht hellsehen kann.^^
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
andi256
Beiträge: 100
Registriert: 06.11.2004 11:23
Computerausstattung: PB 5.30 (x64) Win7
Wohnort: Österreich

Re: Vertikale Trenner in horizontalem Menü

Beitrag von andi256 »

@Daffy0815
uff
... wenn man da die letzten Tage durchs Forum blättert ... bewundere ich deine Hartnäckigkeit wie du ein funktionierendes "Menü System" mit Gewalt kaputt kriegen willst...

(Also ich hab zick Programme in unserer Firma mit unterschiedlichsten Auflösungen / Einstellungen / Schriftgössen / XP / Win7 / skin / klassischer .. etc .... am laufen und immer mit den Standard-(PB)–Menu … Das Menu passt sich wunderbar an !)

Und meine persönliche Meinung:
jedes Programm das mir seine eigene Gui aufzwingt und sei es nur eine geänderte Farbe ... mag ich nicht :-)

*DUCK * und wieder weg
Andi256
Benutzeravatar
Bisonte
Beiträge: 2476
Registriert: 01.04.2007 20:18

Re: Vertikale Trenner in horizontalem Menü

Beitrag von Bisonte »

RSBasic hat geschrieben:
Bisonte hat geschrieben:Allerdings sieht das Fenster im Screenshot eher wie ein PanelGadget aus... von der Funktion her, als ein Menu...
Das finde ich nicht, weil PanelGadget (SysTabControl32) keine Möglichkeit anbietet, vertikale Trennlinien zwischen Tabs anzuzeigen. Das geht nur bei Menu und ToolBar. Oder man erstellt es mit CanvasGadget komplett selber, aber da muss man aber auch alles andere programmieren, was deutlich aufwändiger ist, weil man das Rad komplett neu erfinden muss, wie du es bereits sagtest.
pssst...
Bisonte hat geschrieben:Allerdings sieht das Fenster im Screenshot eher wie ein PanelGadget aus... von der Funktion her, als ein Menu...
weil ich seh da kein "Menu" aufklappen (oder so ähnlich) ... also eher wie ein PanelGadget mit eigener Tableiste. Weil eine Menuezeile geht eigentlich immer über
die komplette Fensterbreite und dort sind ja noch 2 Buttons im weg... daher kommt meine Vermutung ;)
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Antworten