In fremder Anwendung Cursor im Editfeld verschieben
-
Hallo,
ich öffne über mein Programm via Createprocess die Notepad.exe und lade eine Textdatei in Notepad.In dieser Textdatei sind textblöcke vorhanden. diese Textblöcke sind durch eine leerzeile getrennt.
Durch mein programm verschaffe ich mir zugriff auf das Editfenster der Notepad.exe und markiere durch tastendruck die einzelnen textblöcke schrittweise und verschiebe dahingehend via EM_LINESCROLL den text im editfeld so, das der markierte Textblock immer als erste sichtbare zeile im Editfeld erscheint.
Das problem was jetzt auftritt ist folgendes, solange die notepad.exe NICHT das aktive fenster ist, werden die textblöcke sauber markiert und auch tadellos gescrollt.
Sobald aber die Notepad.exe das aktive Fenster wird, springt die aktuelle markierung zurück auf den aller ersten textblock und auch scrollt die textanzeige dahingehend zurück.warum passiert das? ich versetzte die aktuelle markierung via EM_SETSEL und dahingehend müste doch auch der Cursor mitgehn. aber der Cursor im Editfeld ist bei der Aktivierung zum Aktiven Fenster immer unterhalb des ersten Textblockes.
weis da jemand abhilfe?
-
Wenn Du EM_SETSEL richtig verwendest sollte es gehen.
In einem Edit Control ist nur diese Edit Position entscheident.Aber ich kann Dein beschriebenes Verhalten mit dem Notpad nicht nachvollziehen.
- Ich öffne eine längere Datei.
- Klicke in Zeile 10 (Cursor ist in Zeile 10)
- Nun Rolle ich über den Rollbalken woanders hin
- Wechsle die Anwednung (minimire Notepad)
- Aktiviere Notepad erneut (Setfocus passiert)
- Notepad steht immer noch an der gleicen (weggerollten Stelle)
- Ich tippe ein Zeichen einund Notapd platziert es an der Stelle an der der Cursor war...
-
Hallo Martin,
erstmal danke für deine bemühungen.ich steuere Notepad komplett durch eine andere anwendung.
also alles, das öffnen der textdatei, die textblockmarkierung, das skrollen, das in den vordergundholen, passiert alles durch eine andere anwendung.
Stell dir volgendes vor, rechte hälfte des bildschirms ist mein Programm,
linke hälfte ist die Notepad.exe mit der geöffneten Textdatei.wenn mein prog. den Textblock markiert und die erste zeile des Textblockes die erste sichtbare zeile ist, hole ich das Notepad in den vordergund. Also aktiviere es das die Windowsleiste blau ist.
Jetzt kann ich mittels Strg+C den Textblock in die Zwischenablage kopieren. mein Prog. reagiert auf die Zwischenablage. Holt den text aus der Zwischenablage und bringt sich selbst wieder in den Vordergrund, damit ich den Textblock weiter verarbeiten kann.Wenn ich den Textblock verarbeitet habe, drücke ich eine Taste in meinem Prog. dadurch wird in der Notepad.exe der nächste Textblock markiert und wieder in den Sichtbaren bereich geskrollt.
Wenn ich aber jetzt die Notepad.exe in den Vordergrund hole, springt die markierung wie durch geisterhand zurück auf den ersten markierten textblock und das textfeld skrollt sich so hin, das die letzte zeile des nunmehr markierten (ersten) textblockes die erste zeile im nicht sichtbaren bereich ist.
Also alles markierte verschwindet im oberen Bildschirmrand der Notepad.exe.ich hab da schon Sleeps eingebaut um zu sehen was passiert. und solange Notepad nicht im vordergund steht, wird alles richtig gemacht. Der Textblock der markiert werden soll ist markiert und es wird auch an die richtige position geskrollt.
-
LOL
hab den fehler... er lag in der reihenfolge...
ich habe zuerst den text markiert, dann gescrollt und zu guter letzt das notepad in den vordergrund geholt... <--- diese reihenfolge ist falsch...
man muss zuerst das notepad in den vordergrund holen und dann kann man ändern was man will. und dann bleiben auch die änderungen...
-
Mal grundsätzlich: Warum benutzt Du Notepad für solch einen Kra`m?
Das kann man doch auch ganz einfach in eigenen Fenstern regeln.
Das ist doch eben nur ein Edit Control...
-
da ich sonst mein ganzes prog. optisch umbauen müßte...
denn man kann ja kein child auserhalb der dialoggrenzen einblenden.
die idee ist mir schon auch gekommen, aber diese lösung finde ich imo. besser.grundsätzlich tue ich damit adressblöcke kopieren, einzeln aus dem web und verarbeite sie in meiner datenbank.
da adressen von jedem anderst geschrieben werden, was reihenfolge und art und weise angeht, bin ich dazu übergegangen diese in einer textdatei visuell grob
vorzuformatieren.da es ziehmlich tricki ist für das prog, zu wissen was ist der vor & zunahme, was die plz & der ort, der firmenname bzw. die straße oder tel, fax & mobil nr bzw. e-mail oder webadresse.
ohne das ich zig tausende vorwahlen, orts-, strasse-, vor & zunnamen einfüge.
-
Du kannst aber jederzeit eine neues Frame Window erzeugen, das vom Dialog geowned wird.
Du bist ja nicht auf Childs angewiesen. Zudem finde ich es lästig über Prozessgrenzen zu kommunizieren.