Seite 1 von 2

Statusbar mit verkürztem Pfad

Verfasst: 06.09.2009 21:45
von Josh
wenn ich in der Statusbar einen verkürzten Pfad anzeigen möchte, hab ich ja die API-Funktion PathCompactPath.

Wenn ich jetzt das Fenster allerdings auseinander schiebe, dann ist der verkürzte Pfad nicht richtig berechnet. Ich nehme an, dass da mit dem hDC auf die Toolbar nicht der richtige Font oder die richtige Schriftgröße geliefert werden.

Hat dafür jemand eine andere Idee?

Code: Alles auswählen

EnableExplicit

Define sPath.s
Define hStatusbar.l
Define Event.l
Define rect.RECT
Define lTextLenInPixels.l


OpenWindow(0, #PB_Ignore, #PB_Ignore, 300, 200, "test", #PB_Window_SizeGadget | #PB_Window_SystemMenu) 

hStatusbar = CreateStatusBar(1, WindowID(0)) 
AddStatusBarField(100) 
AddStatusBarField(#PB_Ignore) 

Repeat 
  Event = WaitWindowEvent()
  
    ;Wenn Fenstergröße geändert wird, ...
    If Event = #PB_Event_SizeWindow 

      ;Verfügbare Pixelbreite in Statusbar auslesen
      SendMessage_(hStatusBar, #SB_GETRECT, 1, @rect)
      lTextLenInPixels = rect\right - rect\left

      ;Text in Statusbar anpassen
      sPath = "C:\\test\test\test\test\test\test\test\test\test\test\test\test\test\test\test\test\test.txt"
      Str(PathCompactPath_(GetDC_(hStatusbar), sPath, lTextLenInPixels + 50))
      StatusBarText(1, 1, sPath)

    EndIf   

Until event = #PB_Event_CloseWindow

Verfasst: 06.09.2009 22:32
von edel
Kannst du das Problem mal genauer beschreiben? Dazu noch welches OS und ob du nen Theme nutzt.

Verfasst: 06.09.2009 22:49
von RSBasic
@edel
Bestimmt meint er, dass beim Verschieben der Abstand sich vergrößert/verkleinert, also nicht konstant:
Bild

Verfasst: 06.09.2009 22:52
von Josh
wenn du das fenster aufschiebst, dann sollte ja die verkürzte pfadangabe immer in das statusbarfeld passen, tut er aber nicht. der abstand ändert sich immer.

ich benutze WinXP, das programm braucht auch nur unter windows zu laufen.

@RSBasic: genau das meine ich

Verfasst: 08.09.2009 15:13
von Josh
hmpf....., zwei tage damit verschissen und dann waren es nur 3 zusätzliche zeilen :lol:

aber so funktioniert es:

Code: Alles auswählen

EnableExplicit 

Define sPath.s 
Define hStatusbar.l 
Define Event.l 
Define rect.RECT 
Define lTextLenInPixels.l 
Define hFntStb.l
Define hDcStb.l


OpenWindow(0, #PB_Ignore, #PB_Ignore, 300, 200, "test", #PB_Window_SizeGadget | #PB_Window_SystemMenu) 

hStatusbar = CreateStatusBar(1, WindowID(0)) 
AddStatusBarField(100) 
AddStatusBarField(#PB_Ignore) 

;Zum kürzen des Pfades wird ein Device Context benötigt
hFntStb = SendMessage_(hStatusBar, #WM_GETFONT,0 , 0)
hDcStb = CreateCompatibleDC_(0)
SelectObject_(hDcStb, hFntStb)

Repeat 
  Event = WaitWindowEvent() 
  
    ;Wenn Fenstergröße geändert wird, ... 
    If Event = #PB_Event_SizeWindow 

      ;Verfügbare Pixelbreite in Statusbar auslesen 
      SendMessage_(hStatusBar, #SB_GETRECT, 1, @rect) 
      lTextLenInPixels = rect\right - rect\left 

      ;Text in Statusbar anpassen 
      sPath = "C:\\test\test\test\test\test\test\test\test\test\test\test\test\test\test\test\test\test\test\test\test\test\test\test.txt" 
      PathCompactPath_(hDcStb, sPath, lTextLenInPixels)
      StatusBarText(1, 1, sPath) 

    EndIf    

Until event = #PB_Event_CloseWindow

DeleteDC_(hDcStb)

Verfasst: 08.09.2009 17:25
von Little John
Interessant, das kann ich bestimmt 'mal gut brauchen! :-)

Gruß, Little John

Verfasst: 08.09.2009 17:28
von Andesdaf
Little John hat geschrieben:Interessant, das kann ich bestimmt 'mal gut brauchen! :-)
Genau so auch bei mir.

Verfasst: 08.09.2009 17:44
von RSBasic
Dito, werd ich beim nächsten WinAPI Library-Update hinzufügen.
Danke :allright:

Verfasst: 08.09.2009 21:45
von Josh
wenn sowas dann funktioniert, ist es eh geil. aber als programmierer werd ich wohl keinen job finden, wenn ich im schnitt pro tag nur 1 1/2 zeilen schaff :mrgreen:

was mir aber noch nicht ganz klar ist, ob ich das fonthandle hFntStb auch irgendwie killen muss, oder ist das ohnehin nur ein verweis auf einen bereits vorhandenen font oder stirbt das mit beendigung der prozedur automatisch?

Verfasst: 08.09.2009 21:56
von edel
Du erstellst ja kein neuen Font, brauchst ihn also auch nicht loeschen.
Was macht eigentlich das "Str" vor PathCompactPath_?