AGB  ·  Datenschutz  ·  Impressum  







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

Datei über Kontextmenü einfügen

Ein Thema von TFischer · begonnen am 18. Jun 2020 · letzter Beitrag vom 18. Jun 2020
Antwort Antwort
TFischer

Registriert seit: 18. Jun 2020
2 Beiträge
 
#1

Datei über Kontextmenü einfügen

  Alt 18. Jun 2020, 11:24
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.139 Beiträge
 
Delphi 12 Athens
 
#2

AW: Datei über Kontextmenü einfügen

  Alt 18. Jun 2020, 11:40
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (18. Jun 2020 um 11:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Datei über Kontextmenü einfügen

  Alt 18. Jun 2020, 11:55
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.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
TFischer

Registriert seit: 18. Jun 2020
2 Beiträge
 
#4

AW: Datei über Kontextmenü einfügen

  Alt 18. Jun 2020, 12:52
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.
  Mit Zitat antworten Zitat
Antwort Antwort


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:20 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