Delphi-PRAXiS

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 Automatisches Drag&Drop von JvRichEdit überschreiben / deakt (https://www.delphipraxis.net/89796-automatisches-drag-drop-von-jvrichedit-ueberschreiben-deakt.html)

MrKnogge 5. Apr 2007 20:16


Automatisches Drag&Drop von JvRichEdit überschreiben / d
 
Moin,

wenn ich eine beliebige Datei auf ein JvRichEdit ziehe, so erstellt das JvRichEdit automatisch ein Objekt. Das möchte ich gerne deaktivieren, da ich mich selber darum kümmern möchte.

Folgenden Code habe ich bisher bei einer ListBox verwendet:
Delphi-Quellcode:
uses JvExStdCtrls, JvRichEdit, shellapi;

...

type
  TJvRichEdit = class(JvRichEdit.TJvRichEdit)
  private
    procedure GetDroppedFileNames(var msg : TWMDropFiles); message WM_DROPFILES;
  end;

...

procedure TJvRichEdit.GetDroppedFileNames(var msg : TWMDropFiles);
var
  sFileName   : string;
  dwFileCount : cardinal;
  i           : cardinal;
  dwReqdLength : cardinal;
begin
  dwFileCount := DragQueryFile(msg.Drop, $FFFFFFFF, nil, 0);
  for i := 0 to dwFileCount - 1 do
  begin
    // Pfadlänge ermitteln
    dwReqdLength := DragQueryFile(msg.Drop,i,nil,1);

    // Dateinamen abfragen
    sFileName   := StringOfChar(#00,dwReqdLength);         // length + 1
    DragQueryFile(msg.Drop,i,PChar(sFileName),dwReqdLength+1);

    // Datei laden
    Lines.LoadFromFile(sFileName);
  end;
end;
Aber bei einem JvRichEdit wird nicht mal die Funktion aufgerufen.

Wie schaffe ich es, einfach nur die gedroppten Dateinamen zu erhalten, ohne das JvRichEdit automatisch Objekte erstellt ?

Viele Grüße

Flocke 5. Apr 2007 22:12

Re: Automatisches Drag&Drop von JvRichEdit überschreiben
 
1. Der RichEdit-Fensterklasse kannst du das eigenständige OLE Drag&Drop verbieten, indem du das Fensterstil-Bit ES_NOOLEDRAGDROP setzt.

Überschreibe dazu in deiner abgeleiteten Klasse die Routine "CreateParams":
Delphi-Quellcode:
TMyRichEdit.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.Style := Params.Style or ES_NOOLEDRAGDROP;
end;
2. Normalerweise geht auch der von dir gewünschte Weg ohne Probleme. Hast du auch an alles gedacht, z.B. das DragAcceptFiles (am besten in in CreateWindowHandle)?
Delphi-Quellcode:
TMyRichEdit.CreateWindowHandle(const Params: TCreateParams);
begin
  inherited;
  if HandleAllocated then
    DragAcceptFiles(Handle, True);
end;

MrKnogge 5. Apr 2007 22:16

Re: Automatisches Drag&Drop von JvRichEdit überschreiben
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zu 1:
Danke werde ich gleich mal testen

Zu2:
Ja daran habe ich gedacht, habe es momentan im OnCreate der Form:
Delphi-Quellcode:
DragAcceptFiles(JvRichEdit1.Handle, true);
Werde es aber mal ins CreateWindowHandle packen (finde ich auch übersichtlicher)

[Add]
Funktioniert leider nicht.

Gruß

Flocke 7. Apr 2007 13:26

Re: Automatisches Drag&Drop von JvRichEdit überschreiben
 
<schimpf>
Schon mal Haltepunkte beim Debuggen gesetzt?
Schon mal auf die Compiler-Warnungen geachtet? ;)
</schimpf>

Dann wäre die aufgefallen, dass ohne override nichts läuft - deine Routinen werden überhaupt nicht aufgerufen.
Delphi-Quellcode:
procedure CreateParams(var Params: TCreateParams); override;
procedure CreateWindowHandle(const Params: TCreateParams); override;

MrKnogge 7. Apr 2007 21:56

Re: Automatisches Drag&Drop von JvRichEdit überschreiben
 
Danke, ich hatte zwar bemerkt, dass die Funktion nicht aufgerufen wurde, woran es aber lag habe ich nicht gewusst.

Gibt es auch eine Möglichkeit, dass zusätzlich noch weiterhin Rtf-Text per Drag&Drop hinzugefügt werden kann ?

Gruß

Flocke 8. Apr 2007 11:32

Re: Automatisches Drag&Drop von JvRichEdit überschreiben
 
Zitat:

Zitat von MrKnogge
Gibt es auch eine Möglichkeit, dass zusätzlich noch weiterhin Rtf-Text per Drag&Drop hinzugefügt werden kann ?

Dazu musst du einfach das Hinzufügen von ES_NOOLEDRAGDROP in der Routine "CreateParams" unterlassen (bzw. die ganze Routine löschen). Bei meinen Tests funktionierte dann beides.

MrKnogge 8. Apr 2007 13:10

Re: Automatisches Drag&Drop von JvRichEdit überschreiben
 
Bei mir werden txt-Dateien die ich auf dem JvRichEdit droppe dann wieder als Objekt eingefügt.

Flocke 8. Apr 2007 16:35

Re: Automatisches Drag&Drop von JvRichEdit überschreiben
 
Tja - ist wohl so. Ich muss zugeben, dass ich es hier nur mit einem Standard-RichEdit ausprobiert habe. Offensichtlich geht's nicht mehr, sobald du OLE Drag&Drop aktiviert hast (geht beim JvRichEdit übrigens auch über eine Property).

MrKnogge 8. Apr 2007 16:57

Re: Automatisches Drag&Drop von JvRichEdit überschreiben
 
Danke für den Hinweis, ich habe es nämlich erst gar nicht mit dem standard RichEdit probiert, klappt wunderbar. (Ist mir sogar lieber ohne FremdKompos auszukommen)

Gruß


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:52 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