AGB  ·  Datenschutz  ·  Impressum  







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

paste abfangen

Ein Thema von eyeless · begonnen am 17. Aug 2005 · letzter Beitrag vom 17. Aug 2005
Antwort Antwort
Seite 1 von 2  1 2      
eyeless

Registriert seit: 12. Aug 2005
49 Beiträge
 
#1

paste abfangen

  Alt 17. Aug 2005, 21:23
hallo,

kann mir jemand sagen, wie ich strg+v und linxklick-einfügen bei einem tedit abfangen und abändern kann?

habs mit erst TApplicationEvents und dann mit einer eigenen routine:

hier mal der code:
Delphi-Quellcode:
//eigene routine (iss jez für alle paste-vorgänge ...)
//declaration:
procedure WMPASTEFTPURL(var Msg: TMessage); message WM_PASTE;

procedure TfClient.WMPASTEFTPURL(var Msg: TMessage);
var
  buffer : PChar;
  s : string;
begin
 showmessage('paste');
 try
  buffer := StrAlloc(msg.WParam+1);
  GlobalGetAtomName(Msg.lParam, Buffer, Msg.wParam + 1);
  S := StrPas(Buffer);
 finally
  StrDispose(buffer);
  showmessage(s);
 end;
end;

//ODER: per TApplicationEvents

procedure TfClient.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
var
  buffer : PChar;
  s : string;
begin
if msg.message = WM_PASTE then
 begin
 showmessage('paste');
 try
  buffer := StrAlloc(msg.WParam+1);
  GlobalGetAtomName(Msg.lParam, Buffer, Msg.wParam + 1);
  S := StrPas(Buffer);
 finally
  StrDispose(buffer);
  showmessage(s);
 end;
 end;
end;
nur leider passiert bei beiden garnix .. was mach ich falsch?

mfg, eyeless
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#2

Re: paste abfangen

  Alt 17. Aug 2005, 21:25
Hast du das beim Form oder bei der Komponente wo etwas eingefügt werden soll abgeleitet?

Beim Form wäre falsch. WM_PASTE mußt du bei dem Fenster abfangen wo es passiert (also zB ein TEdit ableiten und dort abfangen).
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: paste abfangen

  Alt 17. Aug 2005, 21:26
wird wenigstens in die den zweig bzw. die methode reingesprungen wenn du einfügst (haltepunkt gesetzt)? Ich selbst hab das ganze auch schonmal umgesetzt und bei mir kam die wm_paste an. Wenn diese nicht ankommt musst du mal schauen warum. Und ein ShowMessage in einer Routine die Messages handelt geht sehr oft schief.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
eyeless

Registriert seit: 12. Aug 2005
49 Beiträge
 
#4

Re: paste abfangen

  Alt 17. Aug 2005, 21:35
@olli: aber wenigsten tApplicationEvents müsste doch ALLe messages abfangen, oder?

@SirThornberry: nein der haltepunkt springt nicht an ... weißt du noch, wie du es damals gemacht hast?
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#5

Re: paste abfangen

  Alt 17. Aug 2005, 21:55
Zitat von eyeless:
@olli: aber wenigsten tApplicationEvents müsste doch ALLe messages abfangen, oder?
Nur wenn die VCL WM_PASTE quasi forwardet! Ansonsten wird WM_PASTE nur an das jeweilige Fenster (bzw. Komponente) geschickt!
Zitat:
An application sends a WM_PASTE message to an edit control or combo box to copy the current content of the clipboard to the edit control at the current caret position. Data is inserted only if the clipboard contains data in CF_TEXT format.
  Mit Zitat antworten Zitat
eyeless

Registriert seit: 12. Aug 2005
49 Beiträge
 
#6

Re: paste abfangen

  Alt 17. Aug 2005, 22:03
und wie mache ich das da jez am dümmsten?

ich will nähmlich ftp-urls gleich aufsplitten und die komponenten ind die entsprechenden felder eintagen ...
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#7

Re: paste abfangen

  Alt 17. Aug 2005, 22:07
Zitat von eyeless:
und wie mache ich das da jez am dümmsten?

ich will nähmlich ftp-urls gleich aufsplitten und die komponenten ind die entsprechenden felder eintagen ...
Wenn du aktuell zB ein TEdit benutzt, dann leite es ab. So einfach ist das. In deiner abgeleiteten Klasse mußt du dann die Nachricht so abfangen, wie du es wohl oben versucht hast.
  Mit Zitat antworten Zitat
eyeless

Registriert seit: 12. Aug 2005
49 Beiträge
 
#8

Re: paste abfangen

  Alt 17. Aug 2005, 22:08
huch, ich habe gerade gesehen, dass das edit sonundso schon eine von abgeleitete komponente ist
werde gleich mal eine onpaste anweisung reinmachen

DANKE!!!

das wars fürs erste!

mfg :. sic00rn
  Mit Zitat antworten Zitat
eyeless

Registriert seit: 12. Aug 2005
49 Beiträge
 
#9

Re: paste abfangen

  Alt 17. Aug 2005, 22:20
hmm, wohl zu früh gefreut, passiert nix ...

hier mal die komponente:

Delphi-Quellcode:
unit JEdit;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, stdctrls, clipbrd;

type
  TPasteNotifyEvent = procedure(Sender: TObject; Text: string) of object;
  
type
  TJEdit = class(TEdit)
  private
    { Private declarations }
    FOnPaste: TPasteNotifyEvent;
    procedure WMPaste(var Message: TMessage); message WM_COPY;
  protected
    { Protected declarations }
  public
    { Public declarations }
    constructor Create(AOwner: TComponent); override;
  published
    { Published declarations }
    property OnPaste: TPasteNotifyEvent read FOnPaste write FOnPaste;
  end;

procedure Register;

implementation

uses Variants;

constructor TJEdit.Create(AOwner: TComponent);
begin
inherited create(AOwner);
BorderStyle := bsNone;
BevelKind := bkTile;
end;

procedure TJEdit.WMPaste(var Message: TMessage);
var
  Accept: Boolean;
  Handle: THandle;
  CText: string;
  LText: string;
  AText: string;
begin
  if IsClipboardFormatAvailable(CF_TEXT) then
  begin
    try
      OpenClipBoard(Self.Handle);
      Handle := GetClipboardData(CF_TEXT);
      if Handle = 0 then
        Exit;
      CText := StrPas(GlobalLock(Handle));
      GlobalUnlock(Handle);
      Accept := True;
      if Assigned(FOnPaste) then
        FOnPaste(Self, CText);
      if not Accept then
        Exit;
      LText := '';
      if SelStart > 0 then
        LText := Copy(Text, 1, SelStart);
      LText := LText + CText;
      AText := '';
      if (SelStart + 1) < Length(Text) then
        AText := Copy(Text, SelStart + SelLength + 1, Length(Text) - SelStart + SelLength + 1);
      Text := LText + AText;
    finally
      CloseClipBoard;
    end;
  end;
end;


procedure Register;
begin
  RegisterComponents('selfmade', [TJEdit]);
end;

end.
wenn ich dann in der anwendung im onpaste showmessage(text) mache passiert nichts! NIX!

warum?

mfg, eyeless
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#10

Re: paste abfangen

  Alt 17. Aug 2005, 22:29
Faszinierend. Es sollte aber funzen. Kann es sein, daß im Code beim Kopieren des Strings bereits etwas falsch ist? Du könntest als Test mal ein paar Writeln()-Aufrufe in deinen WM_PASTE-Handler reinmachen und die Anwendung als Konsolenanwendung kompilieren. Dann siehst du, ob das überhaupt aufgerufen wird - auch ohne ShowMessage und dennoch live.
  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 00:51 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