dynamische Label



  • Moin Leute,

    ich bin gerade bei ein etwas komplexes Programm zu erstellen,
    hab jetzt aber ein Problem.

    Ich benutze den Borland C++ Builder 5.
    Ich habe ein Oberfläche auf der verschiedene Ausgaben erfolgen.
    Die Strings gebe ich einfach in einem Label aus.

    Nun habe ich folgendes Problem:
    Wenn ich in diesem Label paar Sachen hintereinander
    ausgeben möchte, dann sehe ich nur den zuletzt ausgegeben String.

    z.B. ich gebe 3 Strings hintereinander aus,
    sehe aber nur den letzten, die ersten beiden sehe ich nicht,
    weil das so schnell geht.

    Gibts es irgendwelche dynamische Label die sowas können ??
    Oder gibts es sonst noch Alternativen ?
    Kenne mich mit Oberflächen nicht so gut aus...

    Danke schonmal



  • wenn du mal dein codebeispiel zeigst!

    Label1->Caption="eins";
    
    Sleep(200);    //warten
    
    Label1->Caption="zwei";
    

    oder was genau willst du??



  • Application->ProcessMessages() ist Dein Freund...



  • Joe_M. schrieb:

    Application->ProcessMessages() ist Dein Freund...

    achso ja, wenn du das in einer schleife machst, dann das was Joe gesagt hat



  • hmm naja den Code kann ich hier nicht so einfach zeigen...

    das sind mehrere Dateien und mit mehreren hundert bis tausend Zeilen.

    also die Ausgabe erfolgt in mehreren Datein bzw in eingigen
    Funktionen.

    aber mit dem Sleep(...) könnte es gehen,
    das ich praktisch nach jeder Ausgabe,
    slepp anhänge.

    oder was meint ihr ??



  • Einfach nen Timer nehmen ...



  • Nein kein Sleep, sondern ein Application->ProcessMessages().
    Dadurch werden die Botschaften der Anwendungen verarbeitet, die unter anderem auch für das Aktualisieren der grafischen Oberfläche verantwortlich sind. Ein Sleep hält die Anwedung nur an, eine Botschaftenverarbeitung findet deswegen aber nicht statt.



  • Einfach deine Messages in einer TStringList speichern und diese dann im OnTimer Event nacheinander anzeigen lassen.



  • timerfreund schrieb:

    Einfach nen Timer nehmen ...

    Ja, man kann auch eine Three-Tier Datenbankanwendung schreiben, um ein einziges Textdokument zu verwalten...



  • Joe_M. schrieb:

    timerfreund schrieb:

    Einfach nen Timer nehmen ...

    Ja, man kann auch eine Three-Tier Datenbankanwendung schreiben, um ein einziges Textdokument zu verwalten...

    Also ich würde meine Anwendung niemals blockieren nur um etwas auszugeben oder zu speichern ...
    🙄



  • hmm nacheinander anzeigen lassen geht nicht so einfach,
    weil nicht immer alle Nachrichten angezeigt werden,
    bzw auch in den verschiedensten Reihenfolgen.

    ich bräuchte was das ich direkt nach der Ausgabe coden könnte,
    also nen Befehl nachm der Ausgabe.

    wie genau funzt des mit ProcessMessages....



  • Sollten die Werte einfach tatsächlichnur zu schnell erzeugt werden, um diese noch lesen zu können, ist ein Label nicht geeignet. Dann würde ich eher auf ein Memo oder eine ListBox ausweichen. Dort kannst Du dann mehrere Werte nacheinander darstellen.

    Wenn Du an ein einziges Label gebunden bist, könntest Du ein Application->ProcessMessages() ausführen und direkt danach ein Sleep einbauen. Aber ich persönlich halte nichts davon, Anwendungen künstlich auszubremsen, nur um dem User die Daten in einer lesbaren Geschwindigkeit anzuzeigen.

    Schau doch mal in der Hilfe zu TApplication::ProcessMessages().



  • Aber ich persönlich halte nichts davon, Anwendungen künstlich auszubremsen, nur um dem User die Daten in einer lesbaren Geschwindigkeit anzuzeigen.

    Mein reden ...



  • naja ne Listbox oder ne Memo gehen auch net wirklich,
    ich habe da net den Platz dafür und
    ich kann die Messages da nicht haufen weise speichern lassen.

    sollte einfach hintereinandern angezeigt werden:
    Bsp: Update -> Update successfull -> Synchroniziation -> Data found -> Ready



  • Ok, wie schnell trudeln die Messages denn ein? Ist das permanent der Fall, oder gibt es zwischendurch 'Ruhezeiten'? Wie wichtig ist die Aktualität der Anzeige?

    Wenn es zwischendurch Ruhezeiten gibt und es nicht so wichtig ist, dass aktuelle Nachrichten zeitnah ausgegeben werden, könntest Du die Nachrichten z.B. in einer TStringList zwischenspeichern und von dort tatsächlich Timer-gesteuert ausgeben.



  • budili schrieb:

    naja ne Listbox oder ne Memo gehen auch net wirklich,
    ich habe da net den Platz dafür und
    ich kann die Messages da nicht haufen weise speichern lassen.

    Man könnte das auch so gestalten, dass immer nur die 3 letzten Nachrichten in der ListBox stehen.



  • nee mit der Listbox würde das net gehn,
    habe echt nur eine Zeile zur Verfügung.

    die Aktualität ist der Nachrichten hat ne hohe Priorität !
    ich kann nicht die Nachrichten anzeigen von den letzten paar Minuten.

    wär es den mit dem sleep oder net am einfachsten,
    das ich praktisch für ne Sekunde oder so kurz anzeigen lasse ??



  • Doch kannst Du, allerdings verzichte ich dann líeber auf die Anzeige einer Nachricht, als die Anwendung künstlich auszubremsen. Schreib die Nachrichten doch zusätzlich in ein LogFile. Wenn dann jemand alle Nachrichten sehen will, kann er sich das ja ansehen.



  • jo das mit Log File is scho drin,
    bzw es sind mehrere.

    naja gut, dann lasse ich das erstmal so,
    das nur die wichtigsten angezeigt werden. 😞



  • irgendwie versteh ich das noch nicht ganz!

    du benutzt doch sicher funktionen, dann lass doch zB in der synchronize() das Label ändern usw...

    und sowieso, wenn die nachrichten sooooooo schnell kommen, kann die ja eh keiner lesen....

    achso, und ein memo kannst du auch so klaein machen wie du willst, hat dann eben scrollbars, oder man kann mit der tastatur "scrollen"


Log in to reply