Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Результаты опроса: Была полезна консоль в программа (в Memo или RichEdit) ?
Да, это лучше чем стандартная консоль Windows 1 14.29%
Да, была бы полезна для отладки, и вообще пригодится 1 14.29%
Нет, лучше использовать стандартную консоль Windows 0 0%
Нет, консоль вообще не нужна в приложениях 5 71.43%
Голосовавшие: 7. Вы еще не голосовали в этом опросе

 
 
Опции темы Поиск в этой теме Опции просмотра
  #5  
Старый 24.05.2011, 20:06
KiL0z KiL0z вне форума
Прохожий
 
Регистрация: 27.05.2010
Сообщения: 23
Репутация: 10
Радость

Уф... все же два дня поисков увенчались успехом - нашел, ура!

Кажется то что нужно, наконец, по крайней мере работает пока как надо (это оригинал кода Armorer):
Код:
Procedure TfMain.ResetStatusPos;
 var
  X, Y : Integer;
begin

  if CarPos <> -1 then// если нажали мышь и выделяем текст - то здесь начало выделяемого текста
    begin

    if ( Memo.SelStart + Memo.SelLength ) = CarPos // вычисляем в какую сторону выделяем
      then
        begin
        // строка - если выделяем в сторону начала текста
        Y := Memo.Perform( EM_LINEFROMCHAR, -1, -1 );
        // колонка - если выделяем в сторону начала текста
        X := LoWord( Memo.Perform( EM_GETSEL, 0, 0 ) ) - Memo.Perform( EM_LINEINDEX, -1, 0 );
        end
      else
        begin
        // строка - если выделяем в сторону конца текста
        Y := Memo.CaretPos.Y;
        // колонка - если выделяем в сторону конца текста
        X := HiWord( Memo.Perform( EM_GETSEL, 0, 0 ) ) - Memo.Perform( EM_LINEINDEX, -1, 0 );
        end;

    end
  else
  begin
   Y := Memo.Perform( EM_LINEFROMCHAR, -1, -1 );
   X := LoWord( Memo.Perform( EM_GETSEL, 0, 0 ) ) - Memo.Perform( EM_LINEINDEX, -1, 0 );
  end;

 inc(Y);
 inc(X);

 StatusBar.Panels[0].Text := IntToStr( Y ) + ':' + IntToStr( X );
end;

procedure TfMain.MemoMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Memo.SelLength = 0 then
   CarPos := -1;
  ResetStatusPos; 
end;


procedure TfMain.MemoMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
 ResetStatusPos;
end;

procedure TfMain.MemoMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 CarPos := Memo.SelStart;
 ResetStatusPos;
end;

procedure TfMain.MemoKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 if not (ssShift in Shift) and (Memo.SelLength = 0) then
  CarPos := -1;

 ResetStatusPos;
end;

procedure TfMain.MemoKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin

  if (CarPos = -1) and (ssShift in Shift) then
    CarPos := Memo.SelStart;
  ResetStatusPos;

end;
Теперь осталось разобраться с буфером обмена, но тут не знаю с какой стороны подступиться

---------
Кстати, как перехватить попытки вырезать и вставить (копирование не нужно) до их выполнения и определить область выделения (для случая вырезания) - в тех же координатах [строка, позиция_в_строке] ?
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:56.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025