TRichEdit’e Standart Popup Menü Eklemek

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
RamazanG
Üye
Mesajlar: 73
Kayıt: 16 Tem 2010 02:38

TRichEdit’e Standart Popup Menü Eklemek

Mesaj gönderen RamazanG » 17 Kas 2010 06:24

Makale: Zarko Gajic
Çeviri: Ramazan Gülbahar.

TRichEdit’e Standart Popup Menü Eklemek


Resim

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;
GetRichEditFromPopup uygulaması geriye rich edite sağ tıklama sonucunda açılan popupmenünün en son halini geri döndürür:

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; 
Popupta menü nesnelerine tıklanması sonucunda oluşacak uygulamalar:

Undo – Bütün değişiklikleri geri alır:

Kod: Tümünü seç

 
procedure TForm1.itemUndoClick(Sender: TObject) ;
 begin
   GetRichEditFromPopup.Undo;
 end;
Cut – seçilen metni hafızaya CF_TEXT biçiminde kopyalar ve rich edit üzerinde seçili yerden siler.

Kod: Tümünü seç

 
procedure TForm1.itemCutClick(Sender: TObject) ;
 begin
   GetRichEditFromPopup.CutToClipboard;
 end;
Copy - seçilen metni hafızaya CF_TEXT biçiminde kopyalar.

Kod: Tümünü seç

 
procedure TForm1.itemCopyClick(Sender: TObject) ;
 begin
   GetRichEditFromPopup.CopyToClipboard;
 end;
Paste – Belirtilen yere hafızadaki bilgileri yapıştırır.

Kod: Tümünü seç

 
procedure TForm1.itemPasteClick(Sender: TObject) ;
 begin
   GetRichEditFromPopup.PasteFromClipboard;
 end;
Delete – ich edit içinden seçili metni siler.

Kod: Tümünü seç

 
procedure TForm1.itemDeleteClick(Sender: TObject) ;
 begin
   GetRichEditFromPopup.ClearSelection;
 end;
Select All – Rich edit içindeki bütün metni seçer.

Kod: Tümünü seç

procedure TForm1.itemSelectAllClick(Sender: TObject) ;
 begin
   GetRichEditFromPopup.SelectAll;
 end;
Hepsi bukadar, şimdi richedit üzerinde sağ tıklarsanız popup menü gösterilecektir.
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.

Cevapla