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/)
-   -   Datei über Kontextmenü einfügen (https://www.delphipraxis.net/204678-datei-ueber-kontextmenue-einfuegen.html)

TFischer 18. Jun 2020 11:24

Datei über Kontextmenü einfügen
 
Hallo,

ich habe einen Email-Client auf dem ein TMemo Control liegt.
TMemo hat ja per Default das Standard-Kontextmenü von Windows beim welchem "Einfügen" ja nur dann aktiviert ist wenn sich Text in der Zwischenablage befindet.
Ich möchte aber, dass ich über den Menüpunkt "Einfügen" auch andere Formate unterstüzen kann um diese als Anhänge zu versenden.
Im Key-Down Event des Memos habe ich das auch schon für STRG+V implementiert.

Nun meine Frage kann ich dem Standard-Kontextmenü oder TMemo irgendwo mitteilen / einstellen das ich auch andere Clipboard-Formate als Text unterstütze und dafür dann einen eigenen Event-Handler definieren oder muss ich das Kontextmenü selber nachbauen, sprich Copy/Cut/Paste/Delete eigens implementieren?

Bei meiner Suche habe ich https://www.delphipraxis.net/167611-...tmemo-usw.html gefunden, das hat mir aber nicht wirklich weiter geholfen.

himitsu 18. Jun 2020 11:40

AW: Datei über Kontextmenü einfügen
 
So schwer ist das "Selbstbauen" nun auch nicht.

Ein Popupmenü und darin einfach die vorhandenen Befehle nutzen.
Delphi-Quellcode:
Memo1.Undo; // Rückgängig
Memo1.CutToClipboard; // Ausschneiden
Memo1.CopyToClipboard; // Kopieren
Memo1.PasteFromClipboard; // Einfügen (und hier zusätzlich deine andere Behandlung mit dazu)
Memo1.SelText := ''; // Löschen
Memo1.SelectAll; // Alles auswählen
Ich glaub in den Demos gibt/gabe es einen TextEditor, wo du dir das Menü auf Basis eines TPopupMenu+TActionList kopieren könntest.
C:\Users\Public\Documents\Embarcadero\Studio\19.0\ Samples\...



Oben, für das Fenstermenü im TitelleistenIcon, gibt es irgendwo Codes, wo man dieses Menü bearbeiten/erweitern oder in ein TPopupMenu kopieren kann.
Eventuell lässt sich der Code auch für ein normales Popupmenü benutzen.

KodeZwerg 18. Jun 2020 11:55

AW: Datei über Kontextmenü einfügen
 
Ist das ein gewünschtes Beispiel?

Delphi-Quellcode:
{
This example demonstrates how to add and delete menu items
to a popup menu at runtime and assign an event handler to
the OnClick event. Place a TPopupMenu and three buttons on
the form named "AddButton", "EditButton", and
"DestroyButton" and add OnClick events to all three buttons.
Put the TPopupMenu in the PopupMenu property of the form.
Place the PopupMenuItemsClick procedure in the TForm1 type
declaration so that it can be used as the method call for
the menu item OnClick event.
}

type
  TForm1 = class(TForm)
    AddButton: TButton;
    EditButton: TButton;
    DestroyButton: TButton;
    PopupMenu1: TPopupMenu;
    procedure AddButtonClick(Sender: TObject);
    procedure EditButtonClick(Sender: TObject);
    procedure DestroyButtonClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    procedure PopupMenuItemsClick(Sender: TObject);

  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.AddButtonClick(Sender: TObject);
var
  index: Integer;
  NewItem: TMenuItem;
begin
    // The owner (PopupMenu1) will cleanup this menu item.
  NewItem := TMenuItem.Create(PopupMenu1); // create the new item
  index := PopupMenu1.Items.Count;
  PopupMenu1.Items.Add(NewItem);// add it to the Popupmenu
  NewItem.Caption := 'Menu Item ' + IntToStr(index);
  NewItem.Tag := index;
  NewItem.OnClick :=
    PopupMenuItemsClick; // assign it an event handler
end;

procedure TForm1.PopupMenuItemsClick(Sender: TObject);
begin
  with Sender as TMenuItem do
  begin
    case Tag of
      0: ShowMessage('first item clicked');
      1: ShowMessage('second item clicked');
      2: ShowMessage('third item clicked');
      3: ShowMessage('fourth item clicked');
    end;
  end;
end;

{
To edit or destroy an item, grab its pointer via the Items
property.
}
procedure TForm1.EditButtonClick(Sender: TObject);
var
  ItemToEdit: TMenuItem;
begin
  ItemToEdit := PopupMenu.Items[1];
  ItemToEdit.Caption := 'Changed Caption';
end;

procedure TForm1.DestroyButtonClick(Sender: TObject);
var
  ItemToDelete: TMenuItem;
begin
  ItemToDelete := PopupMenu.Items[2];
  ItemToDelete.Free;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  index: Integer;
  NewItem: TMenuItem;
begin
  for index := 0 to 3 do
  begin
      // The owner (PopupMenu1) will cleanup this menu item.
    NewItem := TMenuItem.Create(PopupMenu1); // create the new item
    PopupMenu1.Items.Add(NewItem);// add it to the Popupmenu
    NewItem.Caption := 'Menu Item ' + IntToStr(index);
    NewItem.Tag := index;
    NewItem.OnClick :=
      PopupMenuItemsClick; // assign it an event handler
  end;
end;
Source stammt von hier.
Es gibt bestimmt auch einen Delphi Sydney erklärung, aber das war mein erster Treffer der es recht gut erklärt.

Relativ simpel und effektiv, finde ich.

TFischer 18. Jun 2020 12:52

AW: Datei über Kontextmenü einfügen
 
Danke für die schnellen Antworten.

Wie man ein Kontextmenü baut weiß ich, mir ging es eigentlich hauptsächlich darum ob es evtl. Events/Hooks gibts mit denen ich mich an das bestehende dran hängen kann.


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