Çeviri: Ramazan Gülbahar.
TRichEdit’e Standart Popup Menü Eklemek
Kullanıcı sağ tıklayıp kontrol üzerinde değişiklik yapmak istediği zaman(herhangi bir komponent olabilir edit, memo, dbedit…) varsayılan sistem menüsü açılır ve seçenekler gösterilir kes, kopyala, yapıştır sil…
TRichEdit sağ tıklanınca açılan popup pencereyi desteklemez.
TRichEdit Ve Varsayılan Windows Popup Menü
Bu uygulamayı gerçekleştirebilmek amacıyla TRichEdit için kendimiz bir popup menü oluşturmak zorundayız.
TRichEdit için standart popup menü oluşturmanın adımları:
1. Form’a bir TPopupMenu komponentini ("richEditContextMen") TRichEdit ("richEdit1"), ya da daha fazla richediti kontrol etmesi için yerleştiriyoruz.
2. Menü nesnelerini ekliyelim, standart bir TEdit’te olduğu gibi; menu ("itemUndo", "itemCut", "itemCopy", "itemPaste", "itemDelete", "itemSelectAll"),
3. RichEditteki seçili metinleri hafızaya alabilmek için OnPopup olayına bir handle atıyoruz.
4. PopupMenu özelliği için, popupları oluşturuyoruz.
5. Her popupun OnClick olayına bir handle atıyoruz.
TPopupMenu komponentini (adı "richEditContextMenu") rich editi kontrol etmek için form’a yerleştir. İki adet çizgi yerleştir(Ya da daha fazla) bu standart popup gibi görünmesini sağlayacak.
Richedite popup menuyi atayalım. Ve OnPopup olayından menüleri enable ya da disable yapalım:
Kod: Tümünü seç
procedure TForm1.richEditContextMenuPopup(Sender: TObject) ;
var
re : TRichEdit;
begin
re := GetRichEditFromPopup;
itemUndo.Enabled := re.CanUndo;
itemCut.Enabled := re.SelText <> '';
itemCopy.Enabled := re.SelText <> '';
itemDelete.Enabled := re.SelText <> '';
itemPaste.Enabled := Clipboard.HasFormat(CF_TEXT) ;
end;
Kod: Tümünü seç
function TForm1.GetRichEditFromPopup: TRichEdit;
begin
{Burda kontrol işlemi yapmalıyız (if richEditContextMenu.PopupComponent is TRichEdit)}
result := TRichEdit(richEditContextMenu.PopupComponent) ;
end;
Undo – Bütün değişiklikleri geri alır:
Kod: Tümünü seç
procedure TForm1.itemUndoClick(Sender: TObject) ;
begin
GetRichEditFromPopup.Undo;
end;
Kod: Tümünü seç
procedure TForm1.itemCutClick(Sender: TObject) ;
begin
GetRichEditFromPopup.CutToClipboard;
end;
Kod: Tümünü seç
procedure TForm1.itemCopyClick(Sender: TObject) ;
begin
GetRichEditFromPopup.CopyToClipboard;
end;
Kod: Tümünü seç
procedure TForm1.itemPasteClick(Sender: TObject) ;
begin
GetRichEditFromPopup.PasteFromClipboard;
end;
Kod: Tümünü seç
procedure TForm1.itemDeleteClick(Sender: TObject) ;
begin
GetRichEditFromPopup.ClearSelection;
end;
Kod: Tümünü seç
procedure TForm1.itemSelectAllClick(Sender: TObject) ;
begin
GetRichEditFromPopup.SelectAll;
end;
Not: Kopyalama ve yapıştırma işlemleri RTF - rich text biçimini destekler.
ContextPopup ve varsayılan PopupMenu
Diğer bir yolu TWinControl kullanıp var olan popup menüyü değiştirerek richeditte kullanmaktır.
OnContextPopup olayının handle parmetresini True yaparsanız popup menü gösterilmez.