Statusbar mit verkürztem Pfad

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Statusbar mit verkürztem Pfad

Beitrag 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
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Kannst du das Problem mal genauer beschreiben? Dazu noch welches OS und ob du nen Theme nutzt.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von RSBasic »

@edel
Bestimmt meint er, dass beim Verschieben der Abstand sich vergrößert/verkleinert, also nicht konstant:
Bild
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Beitrag 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
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Beitrag 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)
Zuletzt geändert von Josh am 08.09.2009 22:15, insgesamt 1-mal geändert.
Little John

Beitrag von Little John »

Interessant, das kann ich bestimmt 'mal gut brauchen! :-)

Gruß, Little John
Andesdaf
Moderator
Beiträge: 2671
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

Little John hat geschrieben:Interessant, das kann ich bestimmt 'mal gut brauchen! :-)
Genau so auch bei mir.
Win11 x64 | PB 6.20
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von RSBasic »

Dito, werd ich beim nächsten WinAPI Library-Update hinzufügen.
Danke :allright:
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Beitrag 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?
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Du erstellst ja kein neuen Font, brauchst ihn also auch nicht loeschen.
Was macht eigentlich das "Str" vor PathCompactPath_?
Antworten