StatusBar - text auslesen?

Anfängerfragen zum Programmieren mit PureBasic.
smateja
Beiträge: 250
Registriert: 25.11.2004 19:51
Computerausstattung: Alienware Aurora / Intel Core i7 CPU @ 2.8 GHz / 64 Bit OS

StatusBar - text auslesen?

Beitrag 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?
PB 4.6 / 32 Bit / 64 Bit
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 »

Du siehst es richtig, mit normalen Mitteln läßt sich der Text nicht auslesen.
Welchen Sinn sollte das auch machen?
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
smateja
Beiträge: 250
Registriert: 25.11.2004 19:51
Computerausstattung: Alienware Aurora / Intel Core i7 CPU @ 2.8 GHz / 64 Bit OS

re:

Beitrag 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 ?)
PB 4.6 / 32 Bit / 64 Bit
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 »

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
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
D@nte
Beiträge: 324
Registriert: 24.04.2007 15:33
Wohnort: Berlin

Beitrag 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
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 »

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
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
smateja
Beiträge: 250
Registriert: 25.11.2004 19:51
Computerausstattung: Alienware Aurora / Intel Core i7 CPU @ 2.8 GHz / 64 Bit OS

RE:

Beitrag von smateja »

Merci euch Beiden, Denkanstoß hat 1A geholfen und gepaßt.
PB 4.6 / 32 Bit / 64 Bit
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

Re: RE:

Beitrag 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
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
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: StatusBar - text auslesen?

Beitrag 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...
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
Antworten