Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Подсветка параметров функции [D7, XP]


Ivolg ©   (2007-07-03 12:41:00) 

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


Gydvin   (2007-07-08 12:58:00) [1]

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


Ivolg   (2007-07-07 13:18:00) [2]

Вроде бы сделал то, что мне нужно: 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-05 18:39:00) [3]

А подумать?


Ivolg   (2007-07-05 17:26:00) [4]

Почти то же самый код:
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;


Ivolg   (2007-07-05 12:27:00) [5]

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

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


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


@!!ex   (2007-07-04 23:17:00) [6]

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


Gydvin   (2007-07-04 22:56:00) [7]

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

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;


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

Gydvin ©   (04.07.07 06:50) [7]

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


Gydvin   (2007-07-04 06:50:00) [9]

Ку?

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-03 22:47:00) [10]

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


palva   (2007-07-03 22:44:00) [11]

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


Ivolg   (2007-07-03 22:10:00) [12]

Вот набросал тут алгоритм, правдо пока он плохо работает... Возникла проблема: 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;


Ivolg   (2007-07-03 14:58:00) [13]

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


Loginov Dmitry   (2007-07-03 13:31:00) [14]

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


Gydvin   (2007-07-03 12:47:00) [15]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо