Richedit Verlinken einer Datei per Drag-And-Drop

  • Hallo zusammen,

    ich würde gerne in ein Richtextconrol Datein per Drag-and-Drop hinzufügen. Nur sollen sie als Verknüpft werden mit der Datei und nicht koppiert werden.

    MfG Flo

    Mit freundlichen Grüßen

    Flo

  • Vielleicht hilft dieser Thread aus dem engl. Forum: https://www.autoitscript.com/forum/topic/18…ropbox-for-urls

  • Hallo water,

    leider hat mir das nichts gebracht. Ich kann erkennen, wenn eine Drag-And-Drop-Aktion passiert ist, in dem ich schaue, was mir die funktion _GUICtrlRichEdit_GetNextUndo zurückgibt. Aber ich habe leider nicht rausgefunden, wie ich die Objekte, welche automatisch eingefügt werden, manipulieren kann, weil das für mich einfach nur sinnlose Zahlen und Buchstaben sind.

    Auch habe ich leider nicht rausfinden können, wie ich beeinflussen kann, was bei einem doppel klick auf ein solches Objekt passieren soll.

    Ich rede von diesen Objekten:

    Mit freundlichen Grüßen

    Flo

  • Nur sollen sie als Verknüpft werden mit der Datei und nicht koppiert werden.

    Du möchtest also den Dateipfad dort als Link ablegen? Aber was willst du dann damit machen? Soll dieser Link anklickbar sein und eine hinterlegte Anwendung starten?

    Grundsätzlich halte ich das RichEdit Control dafür als ziemlich ungeeignet. Nicht das das Vorhaben damit nicht umsetzbar wäre, aber der Aufwand ist m.E. zu groß.

    Vielleicht gibst du mal genauer an, was du als Ziel hast, dann kann man vermutlich bessere Lösungsansätze bieten.

  • Ich bin dabei ein Projektmanager zuschreiben, welcher alle Datein auflistet, welche in einem Ordner sind, und dort dann möglichkeiten bietet die text-Datei zu bearbeiten, zum Beispiel einen Eintrag mit Zeitstempel einzufügen, die Datein zu durch suchen und die Suchergebnisse dann unteranderem Hervorzuheben,...

    Jetzt bin ich gerade dabei, das man Datein ablegen kann, welche sich dann öffnen, sobald man draufklickt, aber es sollen eben die Orginalen Datein geöffnet werden.

    Mit freundlichen Grüßen

    Flo

  • Blöde Frage Floooooo24 : Warum machst du das nicht einfach, das die Dateien aufgelistet werden und dann per z.B. Doppelklick im Default Editor des Nutzers bearbeitet werden?

    So habe ich das bei mir gemacht. Dann kann der Nutzer selber wählen mit welchem Programm er die Datei bearbeiten möchte.

  • Moombas, dass das Standart Programm verwendet werden soll, ist schon der Plan, ich hab die schwierigkeiten mit dem Auflisten der Datei, weil sie per Drag-And-Drop eingefügt werden sollen.

    Mit freundlichen Grüßen

    Flo

  • Floooooo24 : Aber wenn ich die Datei doch sowieso zu packen habe, warum öffne ich sie nicht direkt, sondern soll sie nochmal in dein Programm vorher schieben?

    Sorry, das erschließt sich mir aktuell nicht, evtl. Begriffsstutzig.

  • Ich bin dabei ein Projektmanager zuschreiben, welcher alle Datein auflistet, welche in einem Ordner sind, und dort dann möglichkeiten bietet die text-Datei zu bearbeiten, zum Beispiel einen Eintrag mit Zeitstempel einzufügen, die Datein zu durch suchen und die Suchergebnisse dann unteranderem Hervorzuheben,...

    Dafür ist RichEdit das ungeeignete Control. Besser z.B. Treeview, ListBox, Listview.

    So bietet z.B. die ListBox mit der GuiListBox.au3 Funktionen, die dein Projekt erfordert.

  • weil du sie nicht direkt öffnest. Das kam vielleicht falsch rüber:

    Es gibt einen Ordner der zu speichern von verschieden Text datein verwendet wird. In den Textdateien kann man sich organisieren, und den Stand von verschiedenen Projekten reinschreiben. Damit man einen Ort hat an welchem alles steht. Da man ja aber auch immer wieder die verschiedesten Datein hat, welche für das Projekt relevant sind, sollen diese auch dort verknüpft werden können. Damit man diese schneller findet und am besten auch direkt öffnen kann.

    Mit freundlichen Grüßen

    Flo

  • Hört sich für mich nach einer 1A Geschichte an, um diese Informationen in eine Ini-Datei (1 je Projekt) zu schreiben (z.B. vom Projektleiter) und diese dann zentral im Netzwerk abzulegen.

    Das Programm des Nutzers liest diese vom Netzwerkpfad alle vorhandenen Ini's ein und bietet dann die Möglichkeit die Dateien zu öffnen.

    Idealerweise generiert es entweder eine Strucktur via Treeview/Listview/Listbox wie von BugFix vorgeschlagen oder auch ein TAB je Projekt mit den entsprechenden Informationen komplett separiert.

    Mir erscheint dein aktueller Weg zu umständlich.

  • weil du sie nicht direkt öffnest. Das kam vielleicht falsch rüber:

    Es gibt einen Ordner der zu speichern von verschieden Text datein verwendet wird. In den Textdateien kann man sich organisieren, und den Stand von verschiedenen Projekten reinschreiben. Damit man einen Ort hat an welchem alles steht. Da man ja aber auch immer wieder die verschiedesten Datein hat, welche für das Projekt relevant sind, sollen diese auch dort verknüpft werden können. Damit man diese schneller findet und am besten auch direkt öffnen kann.

    Sieht so aus, als wolltest du Git neu erfinden. :rofl:

    Nehmt dann lieber das Original.

  • Es funktioniert schon alles so wie ich das möchte, nur was mir eben fehlt, ist das man Datein rin ein Richtextedit zeihen kann und diese dann per klick/doppel klick öffnen kann.

    Weiß jemand wie man das am besten anstellen kann?

    Mit freundlichen Grüßen

    Flo

  • Ich bin weiterhin der Meinung das dein Weg, den du gehen willst, nicht wirklich Sinn ergibt aber ich werfe zusätzlich zu dem Hinweis von BugFix noch folgendes in den Raum:

    Code
    While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $GUI_EVENT_DROPPED
                $File          = @GUI_DragFile ;Get Filename
                $DropControlID = @GUI_DropId   ;Get Control where it has dropped on
        EndSwitch
    WEnd

    3 Mal editiert, zuletzt von Moombas (31. Januar 2023 um 13:40)

  • Hallo noch mal, ich habe nun die Lösung gefunden, welche nicht wirklich aufwendig ist, wenn man weiß, was alles zu tun ist. Die Lösung hab ich hier gefunden:

    Richedit : drag/drop .txt files and display content
    Hello I was used to drag and drop .txt files in Edit controls and then display the text at once But I got problems when trying to do the same with a Richedit…
    www.autoitscript.com

    Ich hab das skript von ihn abgeändert zu:

    Wichtig sind die Befehle:

    _WinAPI_DragAcceptFiles ($hRichEdit)

    _GUICtrlRichEdit_SetEventMask($hRichEdit, $ENM_DROPFILES)

    und wichtig ist, dass man in der WM_NOTIFY das ganze abfragt und verarbeitet und anschließend ein Retrun 1 sendet, wenn man nicht möchte, das die Standart Befehle für die Nachricht ausgeführt werden.

    und sobald man einmal den Befehl _GUICtrlRichEdit_SetReadOnly verwendet, funktioniert das ganze nicht mehr. Man kann aber mit _GUICtrlRichEdit_SetcharAttributes auf alle Charakter die eigenschaft "pr" setzen und auch wieder in WM_NOTIFY verarbeiten und einfach wenn $EN_Protect kommt Return 1 senden.

    Das man draufklicken kann kann man über $EN_Link erreichen.

    Mit freundlichen Grüßen

    Flo

  • Moin,

    guter Fund. Ich habe mich früher mal mit RichEdits beschäftigt und hätte das auch gern gehabt, habe es aber nicht geschafft. Vielleicht lag es aber auch an Win XP.

    Ich habe mit Deiner Lösung gespielt. Offensichtlich ist die GuiRichEdit.au3 schon länger nicht mehr aktualisiert worden. Bereits mit WIn 8 sind viele Optionen hinzugekommen, von denen sich in der UDF nichts findet.

    Für die automatische Link-Erkennung gibt es z.B. die Option AURL_ENABLEDRIVELETTERS = 16, die auch normale Dateipfade findet. Die kann man mit _GUICtrlRichEdit_AutoDetectURL() leider nicht nutzen, weil die Funktion für den Parameter intern eine IsBool() Prüfung macht. Außerdem gibt es für die Links die Option SES_HYPERLINKTOOLTIPS = 8, die das Ziel als Tooltipps anzeigt. Das ist zwar eher eine Spielerei, man kann sie aber mit der UDF auch nicht nutzen, weil sowohl die Definition als auch eine Funktion für die Nachricht EM_SETEDITSTYLE fehlen. Auch für die Nachricht EM_SETOPTIONS gibt es keine Funktion. Damit kann man z.B. die Option ECO_SELECTIONBAR = 0x01000000 aktivieren, die an der linken Seite des RichEdit einen Auswahlbereich für Zeilen einrichtet.

    Ich habe noch einen weiteren Vorschlag. Für die Einfügeposition kannst DU meiner Meinung nach direkt den Wert cp aus $tagENDROPFILES mutzen. Dann kannst Du auf die Abfrage zu Zeichen- und Mauspositionen verzichten.

    Ich habe meine Ideen in das folgende Skript einfliessen lassen. Vielleicht ist da auch etwas für Dich dabei. Wenn Alles funktionieren soll, braucht es aber mindestens Win 8.

    Viel Spaß noch!