Seite 1 von 1

StatusBar - text auslesen?

Verfasst: 17.06.2007 18:57
von smateja
Sorry für die Frage - aber - seh ich das richtig, dass man wenn man in die Statusbar n Text z. B. in das 1. Feld schreibt - es man nicht mehr auslesen kann? - Zumindest hab ich dafür mal keinen passenden Befehl gefunden?

Kennt wer hier n Trick etc?

Verfasst: 17.06.2007 19:01
von ts-soft
Du siehst es richtig, mit normalen Mitteln läßt sich der Text nicht auslesen.
Welchen Sinn sollte das auch machen?

re:

Verfasst: 17.06.2007 19:08
von smateja
naja - also ich muß n wenig ausholen - evtl. gibts ja ne bessere möglichkeit das zu lösen:

also hab n kleines proggy - welches eben ne statuszeile unten einblendet - und wenn ich da die zeit update und das datum - dann flackert mir das richtig böse - hab auch schon versucht - das nur alle 400 Ticks Updaten zu lassen - aber flackert trotzdem noch - stellt ichs druchaus höher - so sehe ich nur noch alle 2 Sekunden n Zeitupdate.

Meine Idee war dann - ich lese einfach dei statusbar aus - und vergleichen den ist mit dem soll wert - wenn dieser nicht stimmt Update ich die Anzeige.

Evtl. hier jemand ne andere Lösung ? (Außer hier n Delay etc einzubauen ?)

Verfasst: 17.06.2007 19:23
von ts-soft
Wie wäre es mit einer Variable?
Pseudocode:

Code: Alles auswählen

;OldTime = Time
If Time > OldTime + UpdateIntervall
  OldTime = Time
  StatusBarText(0, 0, Str(OldTime))
EndIf

Verfasst: 17.06.2007 19:29
von D@nte
Denk mal das dürfte dem nah kommen was du suchst...

Code: Alles auswählen

Procedure Display_Time()
    StatusBarText(0, 0, FormatDate("%yyyy-%mm-%dd um %hh:%ii:%ss Uhr", Date()), #PB_StatusBar_Center)
EndProcedure

ElapsedMS = ElapsedMilliseconds() ;<- funktioniert auch ohne

If OpenWindow(0, 216, 0, 240, 20, "Timer",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  If CreateStatusBar(0, WindowID(0))
  EndIf

  Repeat

    Event = WaitWindowEvent(100)

    If ElapsedMilliseconds() > ElapsedMS
      ElapsedMS + 1000
      Display_Time()
    EndIf

  Until GetAsyncKeyState_(#VK_ESCAPE) Or Event = #PB_Event_CloseWindow
EndIf
@ts-soft
Doch'n Minimalist ;p

Verfasst: 17.06.2007 19:38
von ts-soft
D@nte hat geschrieben: @ts-soft
Doch'n Minimalist ;p
Mein Code ist länger als der von smateja :mrgreen:

Konkretes Beispiel ist also garnicht möglich, bei den vorliegenden Daten

RE:

Verfasst: 17.06.2007 19:56
von smateja
Merci euch Beiden, Denkanstoß hat 1A geholfen und gepaßt.

Re: RE:

Verfasst: 17.06.2007 20:20
von ts-soft
smateja hat geschrieben:Merci euch Beiden, Denkanstoß hat 1A geholfen und gepaßt.
Freut mich.

Mein persönlicher Favorit wäre für Windows folgender:

Code: Alles auswählen

Procedure CB_Timer(hWnd.l, uMsg, IDEvent, dwTime)
  Protected Time$ = FormatDate("%ii:%ss", Date())
  StatusBarText(0, 2, Time$, #PB_StatusBar_Right | #PB_StatusBar_Raised) 
EndProcedure 

If OpenWindow(0, 100, 150, 300, 100, "PureBasic - StatusBar Example", #PB_Window_SystemMenu | #PB_Window_SizeGadget)
  
  If CreateStatusBar(0, WindowID(0))
    AddStatusBarField(100)
    AddStatusBarField(50)
    AddStatusBarField(100)
  EndIf

  StatusBarText(0, 0, "Area 1")
  StatusBarText(0, 1, "Area 2", #PB_StatusBar_BorderLess)
  
  SetTimer_(WindowID(0), 1, 500, @CB_Timer())   
   
  Repeat

  Until WaitWindowEvent() = #PB_Event_CloseWindow
  
  KillTimer_(WindowID(0), 1)
EndIf 
Man spart sich das TimeOut und es ist auch schön übersichtlich. Läßt sich
problemlos um weitere TimerEvents ergänzen.

Gruß
Thomas

Re: StatusBar - text auslesen?

Verfasst: 21.12.2007 18:51
von Kurzer
smateja hat geschrieben:Sorry für die Frage - aber - seh ich das richtig, dass man wenn man in die Statusbar n Text z. B. in das 1. Feld schreibt - es man nicht mehr auslesen kann? - Zumindest hab ich dafür mal keinen passenden Befehl gefunden?
Kennt wer hier n Trick etc?
Mit WinAPI geht es:

Code: Alles auswählen

If OpenWindow(0, 100, 150, 300, 100, "PureBasic - StatusBar Example", #PB_Window_SystemMenu | #PB_Window_SizeGadget)
 
  If CreateStatusBar(0, WindowID(0))
    AddStatusBarField(100)
    AddStatusBarField(50)
    AddStatusBarField(100)
  EndIf

  StatusBarText(0, 0, "Feld 1")
  StatusBarText(0, 1, "Feld 2")
  StatusBarText(0, 2, "Feld 3")
  
  Repeat :  Until WaitWindowEvent() = #PB_Event_CloseWindow
  
	OldText$ = Space(256)
 	SendMessage_(StatusBarID(0), #SB_GETTEXT, 0, @OldText$)	; Den vorhandenen Text der StatusBar auslesen
 	Debug OldText$

	OldText$ = Space(256)
 	SendMessage_(StatusBarID(0), #SB_GETTEXT, 1, @OldText$)	; Den vorhandenen Text der StatusBar auslesen
 	Debug OldText$

	OldText$ = Space(256)
 	SendMessage_(StatusBarID(0), #SB_GETTEXT, 2, @OldText$)	; Den vorhandenen Text der StatusBar auslesen
 	Debug OldText$

EndIf 
0, 1, 2 stehen jeweils für das Feld der StatusBar...