Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Узнать слово в позиции курсора, TMemo 
:(
    Опции темы
Akella
Дата 10.1.2005, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



в мемо есть текст, как узнать слово в "границах", которого стоит курсор (не мыши).
PM MAIL   Вверх
NiJazz
Дата 10.1.2005, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 6
Всего: 23



Код

procedure TForm1.Button1Click(Sender: TObject);
var c_pos: integer;
   i: integer;
   s_temp: string;
   s: string;
begin
s_temp := Memo1.Lines[Memo1.CaretPos.Y];
if s_temp = '' then exit;
s := '';
c_pos := Memo1.Caretpos.X;
i := c_pos;
while (s_temp[i] <> ' ') and (i>0) do begin
  c_pos := i;
  Dec(i);
end;
Inc(i);
while (s_temp[i] <> ' ') and (i<=Length(s_temp)) do begin
  s := s + s_temp[i];
  Inc(i);
end;
ShowMessage(s);
end;

Добавлено @ 18:09
Написал на скорую руку, но работает на 100%. smile
С тебя репа! smile
PM MAIL   Вверх
Akella
Дата 11.1.2005, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



щас попробуем smile
Добавлено @ 09:50
код будем шлифовать, т.к. слово выдается от пробела, до конца строки, а нужно от пробела до пробела, а также знаки припинания учитывать.

Это сообщение отредактировал(а) dsergey - 11.1.2005, 10:02
PM MAIL   Вверх
Akella
Дата 11.1.2005, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Код работает хреново, извини зв выражение.
Добавлено @ 10:04
Объясни, пожалуйста, значение каждой переменной и сделай коментарии к коду smile
Добавлено @ 10:08
репу я тебе дал, так что помогай smile
PM MAIL   Вверх
NiJazz
Дата 11.1.2005, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 6
Всего: 23



Цитата
Код работает хреново, извини зв выражение.

Где именно? Я взял просто Memo и написал там предложение из произвольных слов. Установил курсор посреди слова, нажал кнопку и все прекрасно отобразилось в сообщении.
Код

procedure TForm1.Button1Click(Sender: TObject);
var c_pos: integer;
   i: integer;
   s_temp: string;
   s: string;
begin
s_temp := Memo1.Lines[Memo1.CaretPos.Y];  // Кидаем текущую строку, где расположен курсор в нашу темповую строку, чтобы не работать с двумерным массивом.
if s_temp = '' then exit; // если строка пустая (находимся "снизу"), то можно ничего не делать
s := ''; // Это и есть результат. Зануляем его (инициализация).
c_pos := Memo1.Caretpos.X; // Фиксируем текущую позицию курсора по горизонтали
i := c_pos; // Начальное значение индекса
while (s_temp[i] <> ' ') and (i>0) do begin // пока не дошли до пробела вначале
  c_pos := i; // Кидаем текущее значение индекса
  Dec(i);  // Уменьшаем, идём назад, к началу слова
end;
Inc(i); // Так как были в начале на пробеле, то переходим к первой букве слова
while (s_temp[i] <> ' ') and (i<=Length(s_temp)) do begin // пока не дошли до конца слова
  s := s + s_temp[i]; // Выращиваем результат
  Inc(i); // очевидно
end;
ShowMessage(s); // показ результата
end;

PM MAIL   Вверх
NiJazz
Дата 11.1.2005, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 6
Всего: 23



dsergey
На самом деле был глючок в коде
Было:
Код

while (s_temp <> ' ') and (i<=Length(s_temp)) do begin

Это не верно надо так:
Код

while (s_temp[i] <> ' ') and (i<=Length(s_temp)) do begin

Теперь можешь спокойно копировать весь код и все будет ОК. smile
Добавлено @ 14:21
Код я отредактовал, ошибку исправил.
PM MAIL   Вверх
Akella
Дата 11.1.2005, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



теперь отлично, постараюсь добавить знаки припинания и можно добавить в DRKB и FAQ
PM MAIL   Вверх
NiJazz
Дата 11.1.2005, 15:29 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 6
Всего: 23



Готово!
Код

procedure TForm1.Button1Click(Sender: TObject);
var c_pos: integer;
   i: integer;
   s_temp: string;
   s: string;
begin
s_temp := Memo1.Lines[Memo1.CaretPos.Y];
if s_temp = '' then exit;
s := '';
c_pos := Memo1.Caretpos.X;
i := c_pos;
while (not (s_temp[i] in [' ',',','.','!','"',':','?','(',')',';','/','\']))
       and (i>0) do begin
  c_pos := i;
  Dec(i);
end;
Inc(i);
while (not (s_temp[i] in [' ',',','.','!','"',':','?','(',')',';','/','\']))
      and (i<=Length(s_temp)) do begin
  s := s + s_temp[i];
  Inc(i);
end;
ShowMessage(s);
end;

PM MAIL   Вверх
Alex
Дата 11.1.2005, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Код

const
 GoodChr = ['_', '0'..'9', 'A'..'Z', 'А'..'Я'];
var
 c_pos: integer;
 i: integer;
 s_temp: String;
begin
 s_temp := Memo1.Lines[Memo1.CaretPos.Y];
 if s_temp = '' then exit;
 c_pos := Memo1.Caretpos.X;
 i := c_pos;

 while (UpCase(s_temp[i    ]) in GoodChr) and (i>0) do Dec(i);
 Inc(i    );
 Inc(c_pos);
 while (UpCase(s_temp[c_pos]) in GoodChr) and (c_pos<=Length(s_temp)) do Inc(c_pos);

 ShowMessage(copy(s_temp, i,  c_pos - i));
end;



--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1016 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.