Delphi-PRAXiS
Seite 1 von 2  1 2      

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 Strg+V im TEdit abfangen (https://www.delphipraxis.net/52098-strg-v-im-tedit-abfangen.html)

freak1985 23. Aug 2005 19:37


Strg+V im TEdit abfangen
 
hallo,


kann mir jemand sagen wie ich auf das Einfügen in ein Editfeld reagieren kann. Also wie kann ich, wenn man was über Strg+V oder über das normale PopUpMenü ("Einfügen") einfügt, auf das Einfügen reagieren. Also bevor der Text wirklich eingetragen wird soll er durch eine eigene procedure überprüft werden und ggf getrennt/gesplittet.

Hoffe ihr habt verstanden was ich meine... Der eine Satz ist etwas komisch geworden ;)



Danke Schonmal


MfG

Habs im OnKeyPress und OnKeyDown probiert, jedoch ohne Erfolg. Und außerdem bliebe da noch die Frage mit PopUpMenu was das Edit hat (wenn es möglich ist, würd ich das auch wegmachen...)

teebee 23. Aug 2005 20:04

Re: Strg+V im TEdit abfangen
 
Du könntest MSDN-Library durchsuchenEN_UPDATE abfangen,

Gruß, teebee

freak1985 23. Aug 2005 20:07

Re: Strg+V im TEdit abfangen
 
aha. aber wie geht das "abfangen"?

Senden könnt ichs ja, aber abfangen.... :?

MfG

jfheins 23. Aug 2005 20:12

Re: Strg+V im TEdit abfangen
 
Entweder biegst du die WndProc um,
oder du leitest dir eine Kompo von TEdit ab, in der du eine Message-Prozedur (procedure ... (...) message EN_UPDATE;) einfügst ;)

(Erster Fall ist nicht so schön, nicht sofort ersichtlich, was du gemacht hast, aber du hast weiterhin ein TEdit, und kein TMyEdit)

teebee 23. Aug 2005 20:16

Re: Strg+V im TEdit abfangen
 
Das mit der eigenen Komponente haut so nicht hin, weil EN_UPDATE über WM_COMMAND an das Parent des Controls gesendet wird. Also im Form (oder wo auch immer) WM_COMMAND abfangen, auf EN_UPDTAE checken und über ((FindControl(Message.lParam)) As TEdit).Text den Text bearbeiten.

Gruß, teebee

JasonDX 23. Aug 2005 20:20

Re: Strg+V im TEdit abfangen
 
eine Möglichkeit, etwas umständlicher und nicht so elegant wäre wenn du den Inhalt des Edits ein zweites mal abspeicherst. Im onChange kannst du dann überprüfen: hat sich der Text um mehr als ein Zeichen verlängert wurde etwas eingefügt, entweder übers Popup-Menü oder Strg+V. in dem Fall kannst du einfach den Text zurücksetzen.
Gemeint:
Delphi-Quellcode:
TForm1 = class(TForm)
//...
  Edit1Text: string;
end;

//...

procedure Edit1Change(Sender: TObject);
begin
  if length(Edit1.Text) > length(Edit1Text) + 1 then
    Edit1.Text := Edit1Text
  else
    Edit1Text := Edit1.Text;
end;

freak1985 23. Aug 2005 23:21

Re: Strg+V im TEdit abfangen
 
@Chimaira,

stimmt so "primitiv" ;) habe ich garnicht gedacht. Aber so werde ich es machen. Das Andere kapier ich net.
Danke! :)

Hansa 24. Aug 2005 00:10

Re: Strg+V im TEdit abfangen
 
Mit Mühe und Not gelingt es mir, das hier zu überlisten :

Delphi-Quellcode:
  ZulZeichen := [#8,#13,#27,'0'..'9'];
  with Sender as TStringGrid do begin
    if Col in MinusCols then
      ZulZeichen := ZulZeichen + ['-'];
    if Col in KommaCols then begin
      if pos (DecimalSeparator,Cells [Col,Row]) < 1 then  // nur 1 Komma
        ZulZeichen := ZulZeichen + [DecimalSeparator];
    end;
    if col = 1 then begin
      if not (key in ZulZeichen) then
        key := #0;
Es geht um eine Zahleneingabe. 8) Und zwar mit : rechte Maustatste -> Einfügen. Wie schalte ich jetzt diese Maustaste ab ? :shock:

Sharky 24. Aug 2005 07:12

Re: Strg+V im TEdit abfangen
 
Hai,

eine andere möglichkeit wäre sich ein eigenes PopUp-Menü zu basteln welches mit dem Edit verknüpft ist.
Für die Tastatureingabe kannst Du es zum Beispiel so machen:
Delphi-Quellcode:
uses
  Clipbrd;

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: word; Shift: TShiftState);
var
  MyString: string;
begin
  if Shift = [ssCtrl] then
  begin
    case Key of
      Ord('C'):
      begin
        Edit1.CopyToClipboard
      end;
      Ord('V'):
      begin
        if (ClipBoard.HasFormat(CF_TEXT)) then
        begin
          MyString := Clipboard.AsText;
          if (IsOnlyHexChar(MyString)) then // Hier wird die Prüfung gemacht
          begin
            Edit1.PasteFromClipboard;
          end;
        end;
      end;
      Ord('X'):
      begin
        Edit1.CutToClipboard
      end;
    end;
    Key := 0;
  end;
end;

teebee 24. Aug 2005 07:16

Re: Strg+V im TEdit abfangen
 
Zitat:

Zitat von Chimaira
eine Möglichkeit, etwas umständlicher und nicht so elegant wäre wenn du den Inhalt des Edits ein zweites mal abspeicherst. Im onChange kannst du dann überprüfen: hat sich der Text um mehr als ein Zeichen verlängert wurde etwas eingefügt, entweder übers Popup-Menü oder Strg+V. in dem Fall kannst du einfach den Text zurücksetzen.

Durch Einfügen kann sich der Text auch verkürzen: vorher einen Bereich markieren, dann einen kürzeren Bereich einfügen. Deshalb dafst Du nicht auf eine Verlängerung testen. Wenn es also ok ist, dass man Änderungen erst kurz sieht, sie dann erst rückgängig gemacht oder neu formatiert werden, reicht es auch, immer auf OnChange zu reagieren, ohne Längenüberprüfung.
Der Sinn von EN_UPDATE ist, dass man über Änderungen informiert wird, bevor sie sichtbar werden.

Gruß, teebee


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

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