Label in einer Progressbar

12/25/2011 13:09 Ludder231#1
Hi,

ich wollte ein Label in einer Progressbar machen, aber es wird leider nicht angezeigt weil die Progressbar darüber liegt. Kann man das iwie anders machen? Dass das Label "on top" ist? Und am Besten wäre es wenn der Hintergrund von dem Label druchsichtig wäre so das man die Grünen ladebalken sieht und die Label schrifft auch.

MfG Ludder231
12/25/2011 13:28 lolkop#2
eig werden die controls doch immer in der reihenfolge angezigt, in welcher sie erstellt werden.

sollte eig keine probleme geben.
12/25/2011 13:41 Ludder231#3
Quote:
Originally Posted by lolkop View Post
eig werden die controls doch immer in der reihenfolge angezigt, in welcher sie erstellt werden.

sollte eig keine probleme geben.
Hmm, stimmt. Und wie ist das mit dem durchsichtigen Hintergrund. Gibs sowas? Weil sonst sieht das doof aus...
12/25/2011 14:25 lolkop#4
naja das geht ja einfach per GUICtrlSetBkColor($control, -2).

probleme wirst du aber bekommen, da progress bars ja langsam aktualisiert werden.
dh du setzt den wert, und die progressbar steigt/sinkt stetig zu diesem wert.

die sauberste variante hier wäre wohl ein overlay gui über dein eigentliches gui zu legen.

hier mal ein beispiel wie man das ganze sehr sauber lösen könnte:
Code:
#include <winapi.au3>
$gui=GUICreate('blubb', 200, 40, Default, Default, 0x10C80000)
$progress=GUICtrlCreateProgress(10, 10, 180, 20, 1)
$label = BuildOverlayLabel($gui, '0 %', 10, 13, 180, 20, 1)

Dim $percent=0, $timer=TimerInit()
Do
	$msg = GUIGetMsg()
	If TimerDiff($timer)>=100 And $percent<=99 Then
		$percent+=1
		$timer=TimerInit()
		GUICtrlSetData($progress, $percent)
		GUICtrlSetData($label, $percent&' %')
	EndIf
Until $msg=-3

Func BuildOverlayLabel($mainGui, $text, $x, $y, $width, $height, $style=Default, $exStyle=Default)
	Local $overlay = GUICreate('', $width, $height, $x, $y, 0x90000000, 0x00080040, $mainGui)
	GUISetBkColor(0xABCDEF, $overlay)
	_WinAPI_SetLayeredWindowAttributes($overlay, 0xABCDEF, 255)
	Local $label=GUICtrlCreateLabel($text, 0, 0, $width, $height, $style, $exStyle)
	GUICtrlSetBkColor(-1, -2)
	Return $label
EndFunc
01/13/2014 00:06 31_D!4b10#5
Quote:
Originally Posted by lolkop View Post
naja das geht ja einfach per GUICtrlSetBkColor($control, -2).

probleme wirst du aber bekommen, da progress bars ja langsam aktualisiert werden.
dh du setzt den wert, und die progressbar steigt/sinkt stetig zu diesem wert.

die sauberste variante hier wäre wohl ein overlay gui über dein eigentliches gui zu legen.

hier mal ein beispiel wie man das ganze sehr sauber lösen könnte:
Code:
#include <winapi.au3>
$gui=GUICreate('blubb', 200, 40, Default, Default, 0x10C80000)
$progress=GUICtrlCreateProgress(10, 10, 180, 20, 1)
$label = BuildOverlayLabel($gui, '0 %', 10, 13, 180, 20, 1)

Dim $percent=0, $timer=TimerInit()
Do
	$msg = GUIGetMsg()
	If TimerDiff($timer)>=100 And $percent<=99 Then
		$percent+=1
		$timer=TimerInit()
		GUICtrlSetData($progress, $percent)
		GUICtrlSetData($label, $percent&' %')
	EndIf
Until $msg=-3

Func BuildOverlayLabel($mainGui, $text, $x, $y, $width, $height, $style=Default, $exStyle=Default)
	Local $overlay = GUICreate('', $width, $height, $x, $y, 0x90000000, 0x00080040, $mainGui)
	GUISetBkColor(0xABCDEF, $overlay)
	_WinAPI_SetLayeredWindowAttributes($overlay, 0xABCDEF, 255)
	Local $label=GUICtrlCreateLabel($text, 0, 0, $width, $height, $style, $exStyle)
	GUICtrlSetBkColor(-1, -2)
	Return $label
EndFunc
junge lolkop du hast es ja mal richtig drauf!
sass heute den halben tag um das zu verstehen, was hier steht xD

vielen dank.. endlich gehts weiter
01/13/2014 14:09 alpines#6
Da du hier nicht viel gepostet hast möchte ich dich darauf hinweisen damit es sich nicht wiederholt.
Der Thread ist über 2 Jahre alt und dein Beitrag leistet null dazu, also bitte beim nächsten Mal nichts posten damit der Thread nicht unnötig nach oben gepusht wird. Einfach auf Thanks drücken und Ende.