AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Text in ein DBRichEdit einfügen per SendMessage()

Text in ein DBRichEdit einfügen per SendMessage()

Offene Frage von "himitsu"
Ein Thema von juergen · begonnen am 30. Jan 2021 · letzter Beitrag vom 6. Feb 2021
Antwort Antwort
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.176 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Text in ein DBRichEdit einfügen per SendMessage()

  Alt 1. Feb 2021, 18:40
Hallo Holger,
vielen Dank, lieb gemeint. U. a. hatte ich es auch so probiert wie in deinem Source. Aber es funktioniert einfach nicht.
Es muss an der Fremd-Anwendung liegen.
Ich habe zig Varianten durch probiert und es klappt einfach nicht. Mit anderen Anwendungen hatte ich kein Problem. Das Handle ist auch immer korrekt, das DBRichEdit ist im Editmodus, es wird aber kein Text übernommen.
WinSpy zeigt mir auch an, dass es wohl eine Midi-Anwendung ist. Ob es damit was zu tun haben könnte? Ich bin da echt ratlos.
Lt. Debugger wird alles korrekt ausgeführt.

@himitsu,
leider war mein Code-Ausschnitt unvollständig. Ich hatte das alles ausprobiert, auch mit WM_KEYUP. In Zukunft muss ich da etwas genauer den Code-Ausschnitt aufbereiten.

Was meintest du mit
Zitat:
Rate mal, warum es mehrere Versuche von SndKey/SendKey/... gibt.
Angehängte Grafiken
Dateityp: jpg WinSpy-Ermittlung der Handle-ID.jpg (45,0 KB, 10x aufgerufen)
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.374 Beiträge
 
Delphi 12 Athens
 
#2

AW: Text in ein DBRichEdit einfügen per SendMessage()

  Alt 1. Feb 2021, 19:12
Wie gesagt, siehe Bei Google suchenDelphi SendKeys / Hier im Forum suchenSendKeys
oder eben MSDN-Library durchsuchenEM_REPLACESEL ala RichEdit.SelText := '...'; .


Hat das Programm, bzw. das RichEdit den Eingabefocus?
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 1. Feb 2021 um 21:08 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.176 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Text in ein DBRichEdit einfügen per SendMessage()

  Alt 1. Feb 2021, 20:55
@himitsu,
dank dir für deine Mühe!
Ich habe deine Tipps auch probiert, aber selbes Ergebnis: Die Showmessage wird aufgerufen und zeigt das richtige Handle an, aber im DBRichEdit der Fremdanwendung passiert absolut nichts.
Das DBRichEdit im Fremdprogramm hat immer den Fokus (Cursor blinkt im DBRichEdit), jeweils einmal im Editiermodus getestet und einmal ohne.

Wie kann ich denn in einem Fremdprogramm
Zitat:
RichEdit.SelText :=
setzen?


Hier mal einer meiner Tests:

Delphi-Quellcode:
PROCEDURE Tfrm_Main.WMHotKey( VAR Msg: TWMHotKey );
VAR
  s: STRING;
  copyDataStruct: TCopyDataStruct;
BEGIN
  gc_my_DBRichEdit_Handle := Handle_DBRichEdit_ermitteln { Return Handle-ID };
  TRY
    IF ( Msg.HotKey = Hotkey_id ) AND ( gc_my_DBRichEdit_Handle > 0 ) THEN
    BEGIN
      s := 'Das ist ein Test';
      copyDataStruct.cbData := 1 + ( Length( s ) * SizeOf( Char ) ); // !!!
      copyDataStruct.lpData := PChar( s );

      Keybd_Event( VK_RETURN, 0, 0, 0 ); // Taste drücken
      Keybd_Event( VK_RETURN, 0, KEYEVENTF_KEYUP, 0 ); // Taste loslassen

      SendMessage( gc_my_DBRichEdit_Handle, EM_REPLACESEL, 0, LPARAM( @copyDataStruct ) );
      Sleep( 2000 );

      ShowMessage( s + ' Handle-ID=' + IntToStr( gc_my_DBRichEdit_Handle ) );
    END;
  FINALLY
    // gc_my_DBRichEdit_Handle := 0; { TODO 2 -oJS -cnoch zu erledigen : Nach den Tests ist das zu aktivieren, damit die Variable nach jedem Aufruf auch initialisiert ist }
  END;
END;
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.374 Beiträge
 
Delphi 12 Athens
 
#4

AW: Text in ein DBRichEdit einfügen per SendMessage()

  Alt 1. Feb 2021, 21:21
Ein CopyDataStruct für was Anderes verwenden zu wollen, als für WM_COPYDATA ... naja

Hier bissl Was zum Abgucken und Ideenholen:
Delphi-Quellcode:
procedure TCustomEdit.SetSelTextBuf(Buffer: PChar);
begin
  SendMessage(Handle, EM_REPLACESEL, 0, LPARAM(Buffer));
end;

// oder besser
procedure TCustomEdit.DoSetTextHint(const Value: string);
begin
  ...
  SendTextMessage(Handle, EM_SETCUEBANNER, 0, Value);
end;
Und natürlich auch beim Hersteller nachzulesen.
MSDN-Library durchsuchenEM_REPLACESEL : https://docs.microsoft.com/en-us/win.../em-replacesel


PS, auch wenn es hier keine Lösung werden wird:
Selbst wenn es so funktioniert hätte, dann wäre aber die Größe dennoch falsch geworden.
Zitat:
1 + ( Length( s ) * SizeOf( Char ) )
Die abschließende #0 hätte natürlich auch 2 Byte groß sein wollen.
Erst (Length+1) und dann das *.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 1. Feb 2021 um 21:28 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.176 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Text in ein DBRichEdit einfügen per SendMessage()

  Alt 1. Feb 2021, 21:55
@himitsu,

danke für die Hinweise. Es hilft alles nichts, noch nie hat das DBRichEdit aus der Fremdanwendung überhaupt mal reagiert. Es scheint keine Messages von "außen" anzunehmen. Da bin ich mir ziemlich sicher. Da kann man wohl nichts machen.
Was als Q&D ginge, wäre den Text über Clipboard einzufügen, das funktioniert. Aber das will ich nicht. Ich mach da jetzt nichts mehr.

Gute N8!
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz