Toolbar Größe?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

125 hat geschrieben:ja wie gesagt im letzten Parameter müssen irgendwie 2 Werte rein ich weis nur nicht wie. damit kannste dann höhe + länge anpassen.
@ Api-Pros Bitte helft uns.
2 Word-Werte sollen als long übergeben werden. Das kannste z.B. so machen:

Code: Alles auswählen

Procedure MakeLong(low.w, high.w)
  ProcedureReturn low + (high << 16)
EndProcedure
lParam = MakeLong(dx.w, dy.w)
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
125
Beiträge: 1322
Registriert: 19.09.2004 16:52
Wohnort: Neu Wulmstorf (Hamburg)
Kontaktdaten:

Beitrag von 125 »

THX :D :allright:
Bild
BildDas ist Tux. Kopiere Tux in deine Signatur und hilf ihm so auf seinem Weg zur Weltherrschaft.
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Und hier noch das komplette Beispiel zu MakeLong und den anderen beiden
Funktionen als Procedure, falls die mal gebraucht
werden (Tip von Danilo aus dem PureBoard-Archiv)

http://forums.purebasic.com/german/arch ... t=makelong


MfG Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Code: Alles auswählen

Structure TBSize
  x.l
  y.l
EndStructure

Procedure MAKELONG(low, high) 
  ProcedureReturn low | (high<<16) 
EndProcedure 

Procedure.l XHiWord(a.l)
ProcedureReturn Int(a / $10000) 
EndProcedure 

Procedure.l XLoWord(a.l)
ProcedureReturn Int(a - (Int(a/$10000)*$10000)) 
EndProcedure

#WindowWidth  = 640
#WindowHeight = 480
#WindowFlags  = #PB_Window_SizeGadget | #PB_Window_MaximizeGadget | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered | #PB_Window_SystemMenu

hWnd = OpenWindow(0, 0, 0, #WindowWidth, #WindowHeight, #WindowFlags, "")

hToolbar = CreateToolBar(0, hWnd)
ToolBarStandardButton(0, #PB_ToolBarIcon_New)
size.TBSize
size\x = 128
size\y = 128

SendMessage_(hToolbar, #TB_SETBUTTONSIZE, 0, MAKELONG(size\x, size\y))
ResizeWindow(WindowWidth()+1, WindowHeight()+1) : ResizeWindow(WindowWidth()-1, WindowHeight()-1)

Repeat
  Event = WindowEvent()
  Delay(10)
Until Event = #PB_Event_CloseWindow
End
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Wozu ist: XHiWord und XLoWord da, wird doch garnicht verwendet :D
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

ts-soft hat geschrieben:Wozu ist: XHiWord und XLoWord da, wird doch garnicht verwendet :D
;) danke, aber ich liefer am liebsten immer alle prozeduren mit, wenn sie klein sind und zur gruppe gehören.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

hast ja Recht:

Code: Alles auswählen

Procedure.w HiWord(Param.l)
  ProcedureReturn (Param.l >> 16) & $FFFF
EndProcedure
Procedure.w LoWord(Param.l)
  ProcedureReturn Param.l & $FFFF
EndProcedure
Procedure.b HiByte(Param.w)
  ProcedureReturn (Param.w >> 8) & $FF
EndProcedure
Hoffentlich ist das alles richtig, o_O
Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Recay
Beiträge: 5
Registriert: 23.04.2007 21:49

Beitrag von Recay »

Ich habe hierzu nochmal eine Frage:

Meine Bilder werden immer noch nur auf der Standardgröße angezeigt, nur sind sie jetzt zentriert in einem großen Button.. was mache ich da?

ps: #TB_SETBITMAPSIZE klappt irgendwie auch nicht so richtig..
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Beitrag von Shardik »

Hier ist ein in PB 4 funktionierendes Beispiel mit Icons im Format 32 x 32 Pixeln (ein interessantes Beispiel für PB 3 mit aus dem WingDings-Zeichensatz erstellten Schaltflächen hat Sparky im englischen Forum veröffentlicht: http://www.purebasic.fr/english/viewtop ... 06&start=3)

Code: Alles auswählen

#TB_SETIMAGELIST = #WM_USER + 48 
#TB_GETIMAGELIST = #WM_USER + 49 

Procedure MakeLong(LowWord.W, HighWord.W) 
  ProcedureReturn (HighWord * $10000) | (LowWord & $FFFF) 
EndProcedure 

If OpenWindow(0, 0, 0, 250, 100, "Große Toolbar-Schaltflächen", #PB_Window_SystemMenu |#PB_Window_SizeGadget | #PB_Window_ScreenCentered) 
  hTB = CreateToolBar(0, WindowID(0)) 
  hOldIList = SendMessage_(hTB, #TB_GETIMAGELIST, 0, 0); 
  hNewIList = ImageList_Duplicate_(hOldIList) 
  ImageList_Destroy_(hOldIList) 
  ImageList_SetIconSize_(hNewIList, 32, 32) 
  SendMessage_(hTB, #TB_SETIMAGELIST, 0, hNewIList) 
  SendMessage_(hTB, #TB_SETBITMAPSIZE, 0, MakeLong(32,32)) 
  SendMessage_(hTB, #TB_SETBUTTONSIZE, 0, MakeLong(36,36)) 
  SendMessage_(hTB, #TB_AUTOSIZE, 0, 0) 
  ToolBarImageButton(0, 1) 
  ToolBarImageButton(1, 2) 
  ToolBarImageButton(2, 3) 
  Repeat 
    EventID = WaitWindowEvent() 
    If EventID = #PB_Event_Menu 
      Debug "ToolBar ID: "+Str(EventMenu()) 
    EndIf 
  Until EventID = #PB_Event_CloseWindow 
  ImageList_Destroy_(hNewIList) 
EndIf
Benutzeravatar
Programie
Beiträge: 1280
Registriert: 06.08.2005 22:56
Computerausstattung: https://www.sysprofile.de/id160800
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von Programie »

Hi,

Ich hab das nun auch mal ausprobiert und es geht.
Man muss aber die ImageID bei AddToolBarImageButton() angeben. :wink:

Jetzt ist da aber noch ein kleiner Bug: Wenn ich die ToolBarhöhe mit ToolBarHeight(#ToolBar) nach dem Hinzufügen und Ändern der Größe ermittle, um die Gadgets, die darunter noch sind an der richtigen Position zu platzieren, gibt ToolBarHeight() immer noch die alte Höhe zurück. Erst wenn man das Fenster von Hand vergrößert/verkleinert und ich das Event "#PB_Event_SizeWindow" empfange, funktioniert es.

Hat jemand eine Idee, warum das vor der Schleife noch nicht ausgelesen werden kann? :?

//EDIT: Hab den Bug gefunden. War nen Fehler von mir. Hab bei MakeLong die falsche Größe angegeben. :mrgreen:
BildBildBildBild
Antworten