Autor Beitrag
Detlef Schütz
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Sa 11.09.10 22:07 
Hallo Leute,

ich möchte aus meinem Programm heraus den Benutzer auffordern, z.B. eine Tabellenkalkulation zu öffnen und eine dort Zelle zu aktivieren. Dann sollen aus meinem Programm mit einem ButtonClick des Benutzers dorthin Daten gesendet werden (z.B. mit SendKeys). Dazu muß ich den Focus wieder auf die geöffnete Tab.-Kalk. (dessen Namen und Pfad ich nicht kenne) setzen. Wie mache ich das? Vermutlich das Handle merken und mit ihm wieder den vorherigen Focus zurück setzen, aber wie?

Vorab schon mal danke für's Nachdenken. Detlef
Nostromo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33
Erhaltene Danke: 1

Win 7 Pro 64bit, Win XP SP3
Delphi 7 Ent
BeitragVerfasst: Sa 11.09.10 23:59 
Ich weiss ja nicht ob das der richtige Weg ist.
Aber es fehlen auch noch Informationen.
Mit welcher Tabellenkalkulation soll denn gearbeitet werden?
Oder soll nur mit Excel gearbeitet werden?
Wenn du mit Focuswechsel spielst, kann der User doch mit einem Mausklick deine ganze
Arbeit zunichte machen. Dann weisst du eh nicht mehr auf welchem Tabellenfeld der Focus
liegt.

Dann würde ich eher direkt mit TExcelapplication (zu finden unter Server) arbeiten.
Da hast du (fast) die volle Kontrolle.

Für diesen Beitrag haben gedankt: Detlef Schütz
Detlef Schütz Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: So 12.09.10 17:32 
Das ist alles richtig, löst aber nicht mein Problem: ich weiß nicht welche Anwendung der Benutzer meines Programmes aktiviert. Das kann auch ein Editor oder sonst etwas dem Benutzer Eigenes sein. Seine Aufgabe ist es nur die Anwendung und die Stelle zu markieren, wo die Daten erscheinen sollen, und dann bei meinem Programm den Vorgang zu starten. Das heisst ich muß den Focus wieder auf diese Anwendung setzen und alles läuft.
Und natürlich kann der Anwender zerstörend eingreifen, das kann er auch mit der Tastatur; da ich den Tastaturpuffer benutze (SendKeys) kann er schreibend eingreifen. Tut er aber nicht, er weiß was abläuft.
Was ich brauche ist:

1. Mein Programm fordert den Benutzer auf seine Anwendung zu aktivieren; der Focus liegt noch auf meinem Programm;

2. Der Benutzer startet seine Anwendung; der Focus liegt jetzt dort;

3. Er startet per Mausclick den Ablauf bei meinem Programm; der Focus liegt jetzt wieder hier;

4. Bevor mein Programm jetzt Daten sendet, muß es den Focus wieder auf die Anwendung setzen, wie ?????????
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19326
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 13.09.10 05:11 
Setze einfach dein Fenster auf den extended style WS_EX_NOACTIVATE und immer im Vordergrund, Stichwort SetWindowLong oder CreateParams. Wenn er dann da drauf klickt, bekommt dein Fenster nicht den Fokus, sondern der bleibt wo er ist. ;-)

So nach dem Motto: Hier klicken, wenn du soweit bist.

Alternative: Einen globalen Hotkey definieren, der gedrückt werden muss. Dann bleibt der Fokus auch wo er ist.
Detlef Schütz Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mo 13.09.10 13:52 
Danke für diese Hinweise, aber ich kriege das nicht hin: ich verwende Delphi 6 , ist vielleicht zu alt, allerdings habe ich in Forms diese Begriffe gefunden. Aber ich kenne Delphi nur oberflächlig, jedenfalls bin ich für's erste damit überfordert. Ich habe die Anweisung 'StayOnTop' eingesetzt, das funktioniert auch, ändert aber nichts an meinem Focusproblem. Wäre schön noch ein paar Hinweise zu bekommen.
Detlef