Output in Textfeld ausgeben
-
Hallo Zusammen,
wer kann mir ein bisschen helfen? Hatte bis jetzt noch nicht mit der WinApi gearbeitet.
Jetzt möchte ich ein Fenster erstellen dass einen Button mit der Aufschrift "Start" hat,
und ein Textfeld.
Wenn man nun auf den Start-Button klickt soll der Output einer for-Schleife (siehe Bei-
spiel), zeilenweise in dem Textfeld ausgeben werden. Die Anzahl der Zeilen die max. im
Textfeld ausgegeben werden können soll auf 30 Zeilen begrenzt werden. D.h. bei der 31.
Zeile verschwindet die erste Zeile, bei der 32 Zeile verschwindet die zweite Zeile usw.
Das Textfeld soll dazu ein Autoscroll haben. Schön wäre es wenn ich mit dem Button den
Output anhalten und fortsetzen könnte... for(int i=1; i<=100;i++) { schreibe Ergebnis von i in Textfeld..und mache Zeilenumbruch }
Wer kann mir da ein bisschen weiter helfen? Soll ich ein Editfeld dafür hernehmen?
Und wie bekomme ich den Output aus der For-Schleife in das Feld..Übrigens der Output
ist ein string dessen Inhalt sich innerhalb der for-Schleife immer ändert. Ich habe
nur zur vereinfachten Darstellung dieses Beispiel so gewählt. Vielleicht hat ja schon
jemand ein Snippet in der Art parat und könnt es mal posten? Wäre echt nett!!!! Also
zumindest bin ich jetzt soweit dass ich ein Hauptfenster, Buttons, Editorfelder erstellen
kann. Also ein paar Grundlagen habe ich mir mit Online-Tutorials am Wochenende schon
mal erarbeitet.Gruss und danke im voraus, rommi
-
Wenn du schon immer ganze Zeilen setzen willst, dann nimm vielleicht lieber eine ListBox statt eines Edits. Mit InsertColumn und InsertItem kannst du Elemente hinzufügen. Deine Strings solltest du vielleicht in einem std::vector oder so halten.
-
Mit EM_SETSEL und EM_REPLACESEL kann man Text relativ unproblematisch hinzufügen.
-
Etwas ausführlicher. Ich hab ein Hauptprogramm (hab ich noch als Konsolen-Programm
erstellt) in dem verschiedene Sachen abgefragt und verarbeitet werden. Das Haupt-
programm läuft permanent durch. Die Ergebnisse des Hauptprogramms möchte ich jetzt
in einem Fenster ausgeben können und nicht mehr auf dem Konsolen-Fenster. Es wird
permanant (while-Schlife im Hauptprogramm) ein Ergebnis erzeugt der dann im Fenster
(Textfeld) erscheinen soll. Ohne hier jetzt den ganzen Code zu posten hab ich mal
den Ablauf exemplarisch dargestellt:main.... { //==== Verschiedene Abfragen (Input) ... Inhalt von Datei-A ... Systemszustand ... etc. //==== Verarbeitung der Abfragen/Input while() { ... Sleep(1000) ... weitere Abfragen ... Verarbeitung for(...) { ... Verarbeitung ... Ergebnis (Output) ausgeben } } } LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { //==== switch-case-Anweisungen ... ... case WM_CREATE : .. erstell Text-Feld und Start-Button etc. ... gib das Ergebnis vom Hauptprogramm im Text-Feld aus } int WINAPI WinMain (HINSTANCE hI, HINSTANCE hPrI, PSTR szCmdLine, int iCmdShow) { //==== Erstell das Hauptfenster etc. ... //==== Message-Loop ... }
Meine Frage ist jetzt, wie krieg ich es hin dass das Ergebnis vom Hauptprogramm
im Textfeld (Edit-Feld oder was immer) erscheint. Dabei soll nach der 30igsten
Zeile die erste Zeile immer gelöscht werden wenn eine neue Zeile hinzukommt. Somit
werden nie mehr als 30 Zeilen angezeigt.Auf jeden Fall erstmal vielen Dank für eure Antworten!! liebe grüsse, rommi
-
Strukturiere dein Programm besser um. Mach ein neues Win32-Projekt (WinAPI-Projekt) auf, platziere ein paar Controls für Eingabe/Verarbeitung/Ausgabe (z.B. Edit Controls/Button Control/Static Controls), und pack deine Verarbeitung in den Event-Handler eines Buttons.
-
Hi,
ich bin ziemlich neu in der WinApi unterwegs, aber ich glaube nen Tipp kann ich dir geben:
Soll der Benutzer deine Zeilen auswählen können, bist du denke ich mal, mit einer ListBox gut beraten.
Sollen die Zeilen lediglich angezeigt und ersetzt werden, würde ich ein RichEditControl nehmen. Das erledigt automatisch Zeilenumbrüche bei sich ändernder Fenstergröße, etc..Je nachdem für welches Steuerelement du dich entscheidest, kannst du zum Hinzüfugen deiner Zeilen Nachrichten vom Typ LB_ADDSTRING (ListBox), EM_SETSEL, EM_REPLACESEL (RichEditControl) verschicken.
Deinem Aufbau entnehme ich, das du um einen Thread für dein main-Programm nicht drum herum kommst, wenn das Windows-Fenster auf Bewegungen, etc. reagieren soll.
Gruß,
w.s.
-
Hallo Zusammen, danke erstmal für die Antworten!!
@_matze
für den Fenster-Teil hab ich ja schon ein Win32-Api-Projekt erstellt.
Und weiss auch schon wie man das Hauptfenster, Buttons, Editor-Felder
erstellt. Jetzt will ich eben den Hauptprogramm-Code, den ich mal ge-
schrieben habe, in den Code vom Api-Projekt so einfügen dass eben der
Output, der da erzeugt wird, in einem Api-Fenster erscheint. Wenn ich
dich jetzt richtig verstanden habe soll ich jetzt den Verarbeitungs-Teil
des Hauptprogramms als Funktion schreiben und diese Funktion dann in der
WinProc-Funktion über einen Button-Event-Handler aufrufen?? Oder wie
hast du das gemeint?@winapi scientist
das mit dem RichEditControl könnte was für mich sein. Das schau ich mir
heut abend mal genauer an. Dat Api-Fenster bzw. das Textfeld soll auf den
Output bezogen funktionieren wie ne DOS-BOX. Ne Dos-Box gibt je nach Ein-
stellung ne gewisse Anzahl von Zeilen aus, hat Autoscroll, man kann Text
markieren und man kann das Programm sogar mit der Pause-Taste anhalten und
fortsetzen.. Na, ja das mit der Pause-Taste muss jetzt nicht gleich sein
Vorteil eines Api-Fensters ist halt dass ich dort auch gleich ein Menü
(Datei öffen, abspeicher, etc. etc.) mit dazu basteln und verschiedene nützliche
Controls (Buttons, Checkboxes, Radiobuttons etc. im das Fenster einbinden kann.
Is schon ne feine Sache so n Fensterchen :-))Auf jeden Fall danke, muss jetzt auf erstmal auf Schicht..
gruss, rommi