5

オートコンプリート機能付きのメモが必要です。最終的には、ユーザーがDelphi IDEのオートコンプリートと同様のホットキー(Ctrl-スペース)を押したときに、カスタムのオートコンプリートリストを表示できるようにしたいと思います。

私はTMSを持っていますが、AdvMemo正直なところ、この特定のコンポーネントのヘルプが不足しています。AdvMemoはカスタムオートコンプリートをサポートしているようですが、リストの表示方法がわからないようです。

したがって、メモのオートコンプリートを実現したり、AdvMemoの使用法として私を啓蒙したりするための提案があれば、ぜひ教えてください。

4

2 に答える 2

7

オートコンプリートリストとしてTPopupmenuを使用して、TMemoのハンドラーを作成することにしました。

これを読んだ人は、私の他の投稿を参照してください: Delphi-メモの中でカレットがどこにあるかをすべて理解してください(RRUZに感謝します)

そして、次のコード:オートコンプリートTPopupMenuのOnPopup:(memoAutoCompleteはオートコンプリートアイテムのリストを保持します)

procedure AutoCompletePopup(Sender: TObject);
var i : integer;
NewItem : TMenuItem;
AutoCompleteToken: String;
begin
    //filter list by token
    AutoCompleteToken := SelectWordUnderCaret(edtComment);
    AutoComplete.Items.Clear;
    for i:=0 to memoAutoComplete.Lines.Count -1 do
    begin
         if SameText(LeftStr(memoAutoComplete.Lines.Strings[i],Length(AutoCompleteToken)),AutoCompleteToken) then
         begin
             NewItem := TMenuItem.Create(AutoComplete);
             NewItem.Caption := memoAutoComplete.Lines.Strings[i];
             NewItem.OnClick := AutoComplete1Click;
             NewItem.OnMeasureItem := AutoComplete1MeasureItem;
             NewItem.OnAdvancedDrawItem := AutoComplete1AdvancedDrawItem;
             AutoComplete.Items.Add(NewItem);
         end;
    end;
end;

そしてTmemoの場合:

procedure Memo1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var pt : TPoint;
begin
     if (Key = VK_SPACE) and (GetKeyState(VK_CONTROL) < 0) then
     begin
          pt := Memo1.ClientToScreen(Point(0,Memo1.Height));
          AutoComplete.Popup(pt.X,pt.Y);
     end;
end;
于 2011-06-14T07:58:20.143 に答える
4

SynEditをご覧ください。これは無料のオープンソースであり、行き詰まったときに役立つアクティブなコミュニティがあります。

于 2011-06-14T05:48:07.993 に答える