AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Strg+V im TEdit abfangen

Ein Thema von freak1985 · begonnen am 23. Aug 2005 · letzter Beitrag vom 24. Aug 2005
Antwort Antwort
Seite 1 von 2  1 2      
freak1985
(Gast)

n/a Beiträge
 
#1

Strg+V im TEdit abfangen

  Alt 23. Aug 2005, 20:37
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...)
  Mit Zitat antworten Zitat
teebee

Registriert seit: 17. Jan 2003
Ort: Köln
460 Beiträge
 
Delphi 6 Professional
 
#2

Re: Strg+V im TEdit abfangen

  Alt 23. Aug 2005, 21:04
Du könntest MSDN-Library durchsuchenEN_UPDATE abfangen,

Gruß, teebee
  Mit Zitat antworten Zitat
freak1985
(Gast)

n/a Beiträge
 
#3

Re: Strg+V im TEdit abfangen

  Alt 23. Aug 2005, 21:07
aha. aber wie geht das "abfangen"?

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

MfG
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#4

Re: Strg+V im TEdit abfangen

  Alt 23. Aug 2005, 21:12
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)
  Mit Zitat antworten Zitat
teebee

Registriert seit: 17. Jan 2003
Ort: Köln
460 Beiträge
 
Delphi 6 Professional
 
#5

Re: Strg+V im TEdit abfangen

  Alt 23. Aug 2005, 21:16
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
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#6

Re: Strg+V im TEdit abfangen

  Alt 23. Aug 2005, 21:20
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;
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
freak1985
(Gast)

n/a Beiträge
 
#7

Re: Strg+V im TEdit abfangen

  Alt 24. Aug 2005, 00:21
@Chimaira,

stimmt so "primitiv" habe ich garnicht gedacht. Aber so werde ich es machen. Das Andere kapier ich net.
Danke!
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#8

Re: Strg+V im TEdit abfangen

  Alt 24. Aug 2005, 01:10
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 ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Strg+V im TEdit abfangen

  Alt 24. Aug 2005, 08:12
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;
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
teebee

Registriert seit: 17. Jan 2003
Ort: Köln
460 Beiträge
 
Delphi 6 Professional
 
#10

Re: Strg+V im TEdit abfangen

  Alt 24. Aug 2005, 08:16
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 06:33 Uhr.
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