Pixel und Buchstaben

  • Hallo
    ich hab mal wieder ein kleines Problem:
    Ich möchte in einem Fenster einen Text(GUICtrlCreateLabel) mittig ausgeben´, wobei ein Teil des Textes variabel ist.
    Nun ist ja ein Buchstabe nicht gleich ein Pixel, wie macht man so etwas?

    Spoiler anzeigen
    [autoit]


    #include <date.au3>
    #include <GUIConstants.au3>
    #include <StaticConstants.au3>
    Opt('MustDeclareVars', 1)
    Dim $cLine, $title, $cLstart, $guiwidth
    ;$cLine = $CmdLine[1]
    $cLine = "notepad.exe"
    $title = "test"
    $guiwidth = 250
    ;$cLstart = (250 - StringLen($cLine & " is running!")) / 2
    GUICreate($title, $guiwidth, 100)
    GUICtrlCreateLabel("Start: " & _Now(), 60, 30)
    ;GUICtrlCreateLabel($cLine & " is running!", $cLstart, 50)
    GUICtrlCreateLabel($cLine & " is running!",0,50,$guiwidth,200,$SS_CENTER)
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    If ProcessExists($cLine) Then
    WinActivate($title)
    Else
    ExitLoop
    EndIf
    Sleep(500)
    WEnd

    [/autoit]


    Danke im Vorraus und Gruß
    EDIT: Lösung eingebaut, so geht es.

    Einmal editiert, zuletzt von energy98 (14. Juli 2009 um 13:09)

  • vielleicht hilft Dir ein Beispiel...???

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <StaticConstants.au3>
    $guiwidth = 400
    GUICreate('TestGui',$guiwidth)
    $label = GUICtrlCreateLabel("Dies ist ein zentriertes Label, das sich selber auflöst :-)",0,100,$guiwidth,200,$SS_CENTER)
    GUISetState()
    AdlibEnable("setdata",100)
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    EndSelect
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func setdata()
    Local $data = guictrlread($label)
    If $data = "" Then AdlibDisable()
    GUICtrlSetData($label, StringTrimRight(StringTrimLeft($data,1),1))
    EndFunc

    [/autoit]

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Vielen Dank, hat super geholfen.

    BTW:
    Wozu setzt man ADLIB ein, als paralellen Task?
    In der Hilfe steht ja nicht so viel dazu ...

    Einmal editiert, zuletzt von energy98 (14. Juli 2009 um 13:10)

  • [autoit]

    #include <Misc.au3>
    global $dll = DllOpen("user32.dll")
    Global $iCounter = 10

    [/autoit][autoit][/autoit][autoit]

    AdlibEnable('_Countdown', 1000)
    While True
    if _IsPressed("6b", $dll) then MsgBox(1, "", $iCounter)
    If $iCounter <= 0 Then ; wenn der Counter Null erreicht hat, dann...
    AdlibDisable() ; die zeitgesteuerte Funktion beenden
    $iCounter = 1 ; den Counter auf 1 setzen, damit diese If...Then-Anweisung nur einmal ausgeführt wird
    MsgBox(0, 'Countdown-Timer', 'Zeit um!') ; Eine Meldung ausgeben
    exit
    EndIf
    WEnd

    [/autoit][autoit][/autoit][autoit]

    Func _Countdown()
    $iCounter -= 1 ; den Counterwert um 1 verringern
    EndFunc ;==>_Countdown

    [/autoit]


    Ein einfaches Beispiel sagt mehr als lange Erklärungen.