Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Text an Eingabezeile schicken (https://www.delphipraxis.net/34130-text-eingabezeile-schicken.html)

Aike 22. Nov 2004 21:13

Re: Text an Eingabezeile schicken
 
Ich bin mit meinem Latein am Ende ...
Delphi-Hilfe:
Delphi-Quellcode:
type
  TRect = packed record
  case Integer of
    0: (Left, Top, Right, Bottom: Integer);
    1: (TopLeft, BottomRight: TPoint);
end;
Ich werd' noch bekloppt hier! :wall:

Dani 22. Nov 2004 23:55

Re: Text an Eingabezeile schicken
 
Ganz ruhig :)

in einem TRect kannst du einen rechteckigen Bereich speichern (-> Rectangle).Aber Vorsicht: GetWindowRect speichert laut Beschreibung die absoluten Koordinaten des Controls, nicht dessen relative Position zum Parent-Fenster...


Wenn dir alles zu viel wird, beschreib doch mal was du genau machen willst und ich lass dir mal ein Delphi-Projekt zukommen...

Aike 23. Nov 2004 19:47

Re: Text an Eingabezeile schicken
 
Eigentlich find ich 's ziemlich ... doof, wenn du das für mich schreibst, aber mir fällt absolut nix besseres ein :cry:

Es ist so, dass die Nutzer meines Programmes die Möglichkeit haben sollen, einen (oder mehr) Sätze abspeichern zu können und diese per Makro oder Texteingabe aufrufen zu können; Beispiel: Strg+1 -> "Hallo, Welt!" bzw. "welt" -> "Hallo, Welt!". Dazu muss ich zu allererst wissen, wie das handle der Eingabezeile lautet.
Alles weitere dürfte klar sein: Mit SETTEXT (?) soll dann Text in die Eingabezeile geschrieben werden.

[edit]Nebenbei: "TRect.Create;" geht nicht. Muss ich ein Rect erst erzeugen? Oder wie kann ich damit arbeiten? im DP-Forum finde ich eigentlich nur Prozeduren, die das nutzen.[/edit]

Dani 23. Nov 2004 22:10

Re: Text an Eingabezeile schicken
 
Liste der Anhänge anzeigen (Anzahl: 1)
So, hab mir D4O mal runtergeladen...

das Chat-Eingabefeld ist kein Windows-Control und man kann daher auch den Text nicht mit SendMessage setzen. Was du höchstens machen könntest ist Tastaturanschläge zu simulieren.

Schau dir mal das kleine Programm im Anhang an, da sind auch Komponenten dabei, mit denen du ganz einfach Tastatureingaben an ein Fenster senden kannst.

Zitat:

Nebenbei: "TRect.Create;" geht nicht. Muss ich ein Rect erst erzeugen? Oder wie kann ich damit arbeiten? im DP-Forum finde ich eigentlich nur Prozeduren, die das nutzen.
TRect ist kein Nachfahre von TObject, sondern ein Record. :)

Aike 24. Nov 2004 00:02

Re: Text an Eingabezeile schicken
 
Das bringt mich gleich zum Heulen.
Zum einen funktioniert das Programm nicht, denn WComp.dcu fehlt in SysHot.

Aber SendKeys sieht komplex aus. Da kommen mir schon die Tränen, wenn ich mir das durchlese.
Hab jetzt aber doch ein bisschen herumprobiert und es geschafft, "b" von "bla" an den Editor zu senden. Wenn ich allerdings ein zweites "b(la)" schicke, kriege ich eine Access-Violation, nachdem das "b" geschickt wurde. Außerdem bekomme ich die Fehlermeldung, dass "SendKey1 möglicherweise nicht initialisiert" worden ist.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var SendKey1:TSendKey;
begin
  TSendKey.Create(SendKey1);
  SendKey1.Keys:='bla';
  SendKey1.TitleText:='Unbenannt - Editor';
  SendKey1.execute;
end;
Die Violation tritt durch SendKey1.Keys auf, wie ich gerade herausgefunden hab. Alle anderen Zeilen funktionieren. Wenn ich "SendKey1.Keys:='bla';" weglasse, wird ein "t" gesandt ;-)

Dani 24. Nov 2004 18:00

Re: Text an Eingabezeile schicken
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var SendKey1:TSendKey;
begin
  SendKey1 := TSendKey.Create(Self);
  try
   SendKey1.Keys:='bla';
   SendKey1.TitleText:='Unbenannt - Editor';
   SendKey1.execute;
  finally
   SendKey1.Free;
  end;
end;
Vielleicht wäre es besser, wenn du vor diesem Projekt noch ein wenig Grundlagenforschung zum Thema OOP und Delphi-Language betreibst (Bücher...) :angel:

Aike 24. Nov 2004 19:19

Re: Text an Eingabezeile schicken
 
Boar, wir hatten OOP in der schule (letztes Jahr) und es war einfach nur Müll ;-)
Der Fehler war ... dumm von mir. Hab nicht nachgedacht, denn normalerweise kenn' ich die Technik(en) von regist, ini und StringList :coder:

Das funktioniert jetzt also schonmal, zumindest mit dem Editor. Bei D4O funktioniert es irgendwie nicht. Ich habe es mit TitleText:='4';, TitleText:='Offenbarung'; und TitleText:='Coming'; probiert, hat aber alles keinen Erfolg gezeigt.

Jetzt ist aber die Frage, wie ich Makros erstellen kann, sodass z.b. STRG+1 den Text "bla" erzeugt. Im Idealfall sollte es auch möglich sein, den Text "bla" auszugeben, sobald "bl" geschrieben wurde, aber das ist nicht so wichtig und sicher zu kompliziert. Natürlich müssen diese Makros aus D4O gestartet werden können, ohne dass mein eigenes Programm im Vordergrund bzw. fokusiert ist.

[edit]
Haha! Es macht sich alles! Also Shortcuts erstellen kann ich jetzt (quasi und improvisiviert) über eine HotKey-Komponente einen Shortcut erzeugen. Allerdings funktioniert das ja nicht global. Kann ich dazu einen ActionListener (Gibt 's das überhaupt? Das klingt einfach passend.) benutzen?
[/edit]

Dani 24. Nov 2004 20:38

Re: Text an Eingabezeile schicken
 
Mit der Komponente aus SysHot.pas kannst du globale Hotkeys erzeugen. Du findest sie hier

Damit würde ich zunächst mal schauen, welches Fenster während des Spiels den Fokus hat (MSDN-Library durchsuchenGetForegroundWindow).

Die Eigenschaft TitleText kannst du leer lassen, prüfe lieber "manuell" mit GetForeGroundWindow, GetWindowText und GetWindowClassName, ob D4O im Vordergrund ist. Wenn du dennoch TitleText verwenden willst, denke daran, dass du hier den *exakten* Fenstertitel eingeben musst, nicht nur einen Teilstring.

Aike 24. Nov 2004 22:17

Re: Text an Eingabezeile schicken
 
Ok, das ist ... kompliziert. Ich werde nicht ganz schlau aus der .pas bzw. dem Beispielprogramm (welches sich nicht starten lässt).

Die Funktion AddHotKey(VirtKey: TVirtKey; Modifiers: THKModifiers) kommt mir Spanisch vor.
Ich kann zum Beispiel Alt+F5 regisitrieren (AddHotKey(vkF5, [hkAlt])), aber wo wird denn angegeben, wofür Alt+F5 stehen soll? Dann gibt 's da auch noch die Funktionen "HotKeyItem" und "KeyToVirtKey", von denen ich nicht weiß, ob ich die irgendwie brauche :pale:

Dani 24. Nov 2004 22:33

Re: Text an Eingabezeile schicken
 
Liste der Anhänge anzeigen (Anzahl: 1)
Die Komponente TSyshotKey erzeugt einen Event OnHotKey, wenn einer der registrierten Hotkeys gedrückt wurde. Du kannst durch einen Index überprüfen, welcher der Hotkeys es war. In den Anhang findest du die fehlende WComp.pas, habbisch vergessen in das Archiv zu packen :oops:

Damit sollte sich das Programm starten lassen! Du musst nur die Units Sendkeys.pas, SysHot.pas und WComp.pas in das LIB-Verzeichnis (oder irgendein Verzeichnis das in der Bibliothek eingetragen ist) kopieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:35 Uhr.
Seite 3 von 4     123 4      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz