![]() |
Drag & drop markierte text im memo
Hallo!
Ich möchte per Drag & Drop den markierten Text aus einem Memo in ein anderes Memo verschieben. Ich markiere den Text mit der linken Maustaste und dann wenn ich mit der linken Maustaste das zweite mal auf denn markierten Text drücke soll dass Drag & drop aktiviert werden.
Delphi-Quellcode:
procedure TForm1.mousedown1(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); begin if (Button = mbLeft) and (memo1.SelText <> '') then memo1.BeginDrag(false); end; Nur sofort wenn ich mit der linken maustaste auf denn markierten Text drücke wird die markierung wieder gelöscht. Wie kann ich dieses machen? |
AW: Drag & drop markierte text im memo
Du könntest ja sonst die Selektion nicht mehr per Maus ändern ...
vielleicht kannst Du daraus was basteln ...
Delphi-Quellcode:
unit Unit5;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type Tmemo=Class(StdCtrls.TMemo) procedure WMLButtonDown(var Message: TWMLButtonDown); message WM_LBUTTONDOWN; End; TForm5 = class(TForm) Memo1: TMemo; procedure Memo1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form5: TForm5; implementation {$R *.dfm} { Tmemo } procedure Tmemo.WMLButtonDown(var Message: TWMLButtonDown); begin // hier vielleicht über Tag o.ä. zusätzlich steuern ob oder ob nicht inherited aufgerufen wird if (SelText <> '') then BeginDrag(false) else inherited; end; end. |
AW: Drag & drop markierte text im memo
Musst das Dragging auch für das Source-Memo aktivieren, und dann sollte es damit auch gehen:
![]() |
AW: Drag & drop markierte text im memo
hallo
Erst mal danke für die Kommentare ...leider bin ich daraus nicht schlauer geworden. Wenn ich die rechte Maustaste benutze um das draggen zu starten funktioniert das schon, aber die meisten windows programme können das markieren und draggen mit der linken Maustaste schon machen, und das möchte ich auch können, nur wie? Ich denke man muss irgendwie die linke Maustaste abfangen um zu verhindern das die Markierung gelöscht wird, aber wie kann ich das machen? Muss ich eine eigene Komponente erstellen für das TMemo oder kann ich irgendwie anders die Maustaste abfangen? |
AW: Drag & drop markierte text im memo
Hast Du #2 mal ausprobiert?
|
AW: Drag & drop markierte text im memo
hallo Bummi
Nein ich verstehe nicht was ich mit da machen muss, kannst du mir mal etwas genauer erklären worum es geht? Danke. |
AW: Drag & drop markierte text im memo
mit
Delphi-Quellcode:
überschreibst Du quasi die Klasse TMemo auf Deinem Form, alle Memos kommen jetzt im MouseDown links in der Methode
Tmemo=Class(StdCtrls.TMemo)
procedure WMLButtonDown(var Message: TWMLButtonDown); message WM_LBUTTONDOWN; End;
Delphi-Quellcode:
{ Tmemo }
procedure Tmemo.WMLButtonDown(var Message: TWMLButtonDown); begin // hier vielleicht über Tag o.ä. zusätzlich steuern ob oder ob nicht inherited aufgerufen wird if (SelText <> '') then BeginDrag(false) else inherited; end; was Du hier tun willst liegt bei Dir, inherited allein löst das Standardveraltenaus, bei If könntest Du begin..end einfügen und anhand von Dir festzulegender Bedingungen das Draggen auslösen, ein Beispiel wäre die Steuerung über TAG ... |
AW: Drag & drop markierte text im memo
hallo Bummi
Das klappt wirklich, vielen dank.
Delphi-Quellcode:
procedure Tmemo.WMLButtonDown(var Message: TWMMouse);
begin if ((form1.memo1.SelText <> '') and not bSelected ) then begin form1.memo1.BeginDrag(false); bSelected := true; end else begin inherited; bSelected := false; end; end; |
AW: Drag & drop markierte text im memo
Aber bitte so:
Delphi-Quellcode:
Tmemo= Class( StdCtrls.TMemo )
private bSelected : Boolean; // sollte man eigentlich noch initialisieren public procedure WMLButtonDown(var Message: TWMLButtonDown); message WM_LBUTTONDOWN; End; procedure Tmemo.WMLButtonDown(var Message: TWMMouse); begin if (( {form1.memo1.}SelText <> '') and not bSelected ) then begin {form1.memo1.}BeginDrag(false); bSelected := true; end else begin inherited; bSelected := false; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:44 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