Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.08.05;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.049 c
2-1184059419
Жидкое стекло
2007-07-10 13:23
2007.08.05
Как переименовать файл (папку) с поддержкой Unicode?


15-1183976760
ProgRAMmer Dimonych
2007-07-09 14:26
2007.08.05
Как организовать ShoutCast?


2-1184134646
Jacks
2007-07-11 10:17
2007.08.05
Помогите с FastReport


15-1183655714
@!!ex
2007-07-05 21:15
2007.08.05
НЕ смотрится DVD.


15-1183689416
Slider007
2007-07-06 06:36
2007.08.05
С днем рождения ! 6 июля 2007 пятница





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский