Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.08.05;
Скачать: CL | DM;

Вниз

Подсветка параметров функции   Найти похожие ветки 

 
Ivolg ©   (2007-07-03 12:41) [0]

Например, есть RichEdit, в нем например пишу слово "copy(" и при открытии скобки должна выплывать подсказка с параметрами функции, как в Delphi. Как это можно реализовать ? Может имеются специальные компоненты ?


 
Gydvin ©   (2007-07-03 12:47) [1]

Синтаксический анализ строки


 
Loginov Dmitry ©   (2007-07-03 13:31) [2]

Смотри в сторону SynEdit. Оно много чего умеет.


 
Ivolg ©   (2007-07-03 14:58) [3]

SynEdit правда много чего умеет, но именно этого, к сожелению, в нем нет (


 
Ivolg ©   (2007-07-03 22:10) [4]

Вот набросал тут алгоритм, правдо пока он плохо работает... Возникла проблема: 1. Как можно показать подсказку в том месте, где стоит указатель ? Вот код:

...
const
   Symbols: Array[0..2] of String = ("copy", "deletefile", "save"); // слова
функций.
   Parameters: Array[0..2] of String = ("copy (Input: String, Output: String)",
   "deletefile (FileName: String)", "save (FileName: String)"); //Описание
параметров функции.
...
procedure TForm1.RichEdit1Change(Sender: TObject);
var
   S, S2: String;
   I: Integer;
begin
   S:=RichEdit1.Lines.Text; //Записываем текст в переменную.
   if Pos("(", S) > 0 then  //Если в строке найден символ "(", то выполняем цыкл.
     begin
       for I:=0 to 2 do
         begin
           S2:=Copy(S, Pos("(", S)-Length(Symbols[I]), Length(Symbols[I])); //Копируем текст с позиции "(" - длинну слов функции I, по длинну слов функции I.
           if S2=Symbols[I] then //Если слово совпало со словом функции, то
             begin
               Panel1.Caption:=Parameters[I]; //Выводим параметры функции I
               //Тут надо показать саму подсказку, только как ? )
             end;
         end;
     end
      else
          S2:="";
end;



 
palva ©   (2007-07-03 22:44) [5]

> //Тут надо показать саму подсказку, только как ? )
Можно показать модальную форму. У вас трудности с определением координат этой формы?


 
Ivolg ©   (2007-07-03 22:47) [6]

Трудности с определением координат мигающего курсора (не коретки) и показом подсказки на этих координатах !


 
Gydvin ©   (2007-07-04 06:50) [7]

Ку?

function starpos(fmemo1: TCustomMemo): tpoint;
var
 iX, iY: Integer;
begin
 iX := 0;
 iY := 0;
 iY := SendMessage(fmemo1.Handle, EM_LINEFROMCHAR, fmemo1.SelStart, 0);
 iX := fmemo1.SelStart - SendMessage(fmemo1.Handle, EM_LINEINDEX, iY, 0);
 result.y := iY;   //№ строки
 result.x := iX;  //№ символа в строке
end;


 
Ivolg ©   (2007-07-04 15:10) [8]

Gydvin ©   (04.07.07 06:50) [7]

Спасибо, но это не подходит, например я спользую вместо всплывающей подсказки TPanel, так вот, она не появляется в нужном мне месте, т.е после написания символа "(".


 
Gydvin ©   (2007-07-04 22:56) [9]

Получение координат внутри клиентской области ричедита.Относительно формы пересчитаешь сам. Ку?

procedure TForm1.RichEdit1KeyUp(Sender: TObject; var Key: Word;
 Shift: TShiftState);
function IndexByPos(handl:hwnd;num: Integer): tpoint;
   var
     pos: DWord;
   begin
     pos := sendmessage(handl, EM_POSFROMCHAR, WPARAM(num), 0);
     Result.x := LoWord(pos);
     Result.y := HiWord(pos);
   end;
var
 LineNum,ColNum : Word;
 t:tpoint;
begin
 t:=IndexByPos(RichEdit1.Handle,RichEdit1.SelStart);


end;


 
@!!ex ©   (2007-07-04 23:17) [10]

TSynEdit
Подсветка синтаксиса, Autocomplete. Вещь.


 
Ivolg ©   (2007-07-05 12:27) [11]

@!!ex ©   (04.07.07 23:17) [10]

TSynEdit
Подсветка синтаксиса, Autocomplete. Вещь.


Мне подсветка синтаксиса не нужна, нужно чтобы выплывала подсказка с параметрами функции !


 
Ivolg ©   (2007-07-05 17:26) [12]

Почти то же самый код:
const
  Symbols: Array[0..2] of String = ("copy", "deletefile", "save"); // слова
функций.
  Parameters: Array[0..2] of String = ("copy (Input: String, Output: String)",
  "deletefile (FileName: String)", "save (FileName: String)"); //Описание
параметров функции.
...
procedure TForm1.RichEdit1Change(Sender: TObject);
var
  S, S2: String;
  I: Integer;
begin
  S:=RichEdit1.Lines.Text; //Записываем текст в переменную.
  if Pos("(", S) > 0 then  //Если в строке найден символ "(", то выполняем цыкл.
    begin
      for I:=0 to 2 do
        begin
          S2:=Copy(S, Pos("(", S)-Length(Symbols[I]), Length(Symbols[I])); //Копируем текст с позиции "(" - длинну слов функции I, по длинну слов функции I.
          if S2=Symbols[I] then //Если слово совпало со словом функции, то
            begin
              Panel1.Caption:=Parameters[I]; //Выводим параметры функции I
              Panel1.Left:=RichEdit1.CaretPos.X; Как оределить координаты, чтобы показать панель рядом с "(" ?
              Panel1.Top:=RichEdit1.CaretPos.Y;

              Panel1.Visible:=True;
            end;
        end;
    end
     else
       begin
         S2:="";
         Panel1.Visible:=False; // Скрыть Panel1
       end;
end;


 
Gydvin ©   (2007-07-05 18:39) [13]

А подумать?


 
Ivolg ©   (2007-07-07 13:18) [14]

Вроде бы сделал то, что мне нужно: Parent Panel1 на форме
...
if S2=Symbols[I] then
  begin
     Panel1.Caption:=Parameters[I];
     Panel1.Left:=28+(8*RichEdit1.CaretPos.X);
     Panel1.Top:=(16*RichEdit1.CaretPos.Y)-5;
     Panel1.Visible:=True;
  end;
...

Но возикла проблема: Например, когда каретка по Y > 17, то получается что Top у Panel1 увеличивается и она выходит за рамки RichEdit"a. Тоже самое происходит с Panel1.Left. Left у Panel1 увиличивается и панель уходит за рамки. Как можно запретить панели не выходить за рамки RichEdit"a, при условии что ее Top и Left увеличиваются ?


 
Gydvin ©   (2007-07-08 12:58) [15]

А проверять кординаты, типа?
if panel1.top+panel1.height>richedit1.top+richedit1.height then panel1.top:=y-panel1.height else panel1.top:=y;



Страницы: 1 вся ветка

Текущий архив: 2007.08.05;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.04 c
1-1180200153
Calibr
2007-05-26 21:22
2007.08.05
Текст с консоля


3-1177351107
DmitrichJ
2007-04-23 21:58
2007.08.05
Автоинкреминируемое поле в STANDART PARADOX7


15-1184061961
Piter
2007-07-10 14:06
2007.08.05
TBitmap в windows.pas и в graphics.pas


15-1184143953
vitv
2007-07-11 12:52
2007.08.05
Проблема с Java


1-1180360269
timonissimo
2007-05-28 17:51
2007.08.05
TMainMenu :чтобы меню разместилось на всех формах





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский