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

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

Создание процедуры "копирование" [D7]


Страницы:   1 2

Lyonux ©   (2009-12-27 08:52:00) 

Здраствуйте! Подскажите пожалуйста, как написать процедуру копирования в буфер таким образом, чтобы копировать можно было из всех edit и memo на форме?
Clipboard.SetTextBuf(PChar( {компонент}.SelText)); - вот как будет осуществляться копирование в буфер. Нужно оптимизировать его для всех компонентов на форме. Вот :) помогите, кто чем может! Пожалуйста! Голову уже сломала(


KilkennyCat   (2009-12-27 13:01:00) [21]


> Anatoly Podgoretsky ©   (27.12.09 12:47) [15]

зачем лишнюю проверку, события сами собой не назначаются


Anatoly Podgoretsky   (2009-12-27 12:47:00) [22]

> Lyonux  (27.12.2009 12:30:14)  [14]


if Sender is TEdit then begin
  ...
end;

И убрать Clipboard.Clear;


Lyonux   (2009-12-27 12:30:00) [23]

Я не знаю, тут принято хвастаться своими достижениями?) В общем, я поставила на событие OnContextPopup edit'a первого следующий код:

procedure TForm1.Edit1ContextPopup(Sender: TObject; MousePos: TPoint;
 var Handled: Boolean);
begin
Clipboard.Clear;
If TEdit(sender).SelText <> '' then
Clipboard.AsText:=TEdit(sender).SelText;
end;


и прикрепила ко всем edit контекстное меню с единственным пунктом "копировать" ) Вроде бы пользователь и не должен заметить, а выглядит вполне приемлимо.
Йа молодец) Всем спасибо!


Lyonux   (2009-12-27 12:01:00) [24]

turbouser, ах жеж..мм..спасибо большое, надо было это к даблклику по едиту прикрепить, как KilkennyCat написал)
Спасибо, спасибо всем!)
З.Ы. turbouser, у Вас отлично настроен телепатор)


Lyonux   (2009-12-27 11:59:00) [25]

Anatoly Podgoretsky, спасибо за ещё один вариант копированя в буфер)
Получилось вот так:

Clipboard.AsText:=TEdit(sender).SelText;

Очень мило выглядит..Только вот ошибка никуда не делась.

'Access violation at address 69746341. Read of address 69746341'

В чём же дело? :*(


turbouser   (2009-12-27 11:56:00) [26]


> Lyonux ©   (27.12.09 11:16) [7]


> При компиляции ошибок не было: всё включено, написано правильно.

Не правильно.

> procedure TForm1 .N1Click(Sender: TObject);

N1- так обычно итемы в меню автоматически именуются.
Так что, как подсказывает мне телепатор, Sender-ом в таком случае ну ни как не может быть TEdit :)


Anatoly Podgoretsky   (2009-12-27 11:28:00) [27]

> Lyonux  (27.12.2009 11:16:07)  [7]

SelText это не строка, а свойство, какое еще приведение к PChar

Clipboard.AsText := SelText;


Lyonux   (2009-12-27 11:18:00) [28]

Упс..Извините, оно нечаянно два раза получилось)


Lyonux   (2009-12-27 11:17:00) [29]

Удалено модератором


Lyonux   (2009-12-27 11:16:00) [30]

Дяденька, вернитесь пожалуйста!
procedure TForm1.N1Click(Sender: TObject);
begin
If TEdit(sender).SelText <> '' then begin
Clipboard.Clear;
Clipboard.SetTextBuf(PChar(TEdit(sender).SelText));
end;
end;


Я тут написала код, даже перестраховалась.. а оно мне ХЛОП! и при попытке копирования в буфер выдаёт окошко:


'Access violation at address 69746341. Read of address 69746341'  


Что этот шайтан делает?( Подскажите пожалуйста, что тут может быть не так? При компиляции ошибок не было: всё включено, написано правильно. До этого мне никогда не приходилось работать с Clipbrd.
Если совершенно непонятно даже Вам, почему и откуда взялась ошибка, подскажите пожалуйста альтернативу Clipbrd!
Заранее благодарна!


Lyonux   (2009-12-27 09:46:00) [31]

Ааа, не могу сдержать себя: Мусье знает толк в извращениях! =))
Спасибо вам большое)

KilkennyCat ©   (27.12.09 08:58) [1]
Sender
TComponent
FindComponent

Вообще этот ответ был самый краткий и исчерпывающий)) Честно, я вам за него очень благодарна! =)


KilkennyCat   (2009-12-27 09:16:00) [32]

ну и последний пример:

procedure TForm1.Button1Click(Sender: TObject);
var
 s : string;
i : integer;
Begin
s := '';
for i:= 0 to ComponentCount-1 do s := s + TEdit(Components(i)).SelText+#13#10;
Clipboard.SetTextBuf(PChar(s));
end;</CODE

Заберет текст из всех едитов, какие есть.


Lyonux   (2009-12-27 09:11:00) [33]

KilkennyCat, спасибо большое! TEdit(sender) - вот про это не знала, постоянно приходилось отдельные процедуры для каждого компонента писать в подобных случаях.


KilkennyCat   (2009-12-27 09:09:00) [34]

еще пример:

procedure TForm1.Button1Click(Sender: TObject);
var
  s : string;
 i : integer;
Begin
 s := '';
 for i := 1 to 3 do s := s + TEdit(FindComponent('Edit' + inttostr(i))).SelText+#13#10;
 Clipboard.SetTextBuf(PChar(s));
end;


по кнопке из едитов Edit1, Edit2, Edit3 выделенный текст суммируется и заносится в буфер


KilkennyCat   (2009-12-27 09:01:00) [35]

пример:

procedure TForm1.Edit1DblClick(Sender: TObject);
begin
Clipboard.SetTextBuf(PChar(TEdit(sender).SelText));
end;

теперь всем едитам можно назначить этот обработчик на даблклик.


KilkennyCat   (2009-12-27 08:58:00) [36]

Sender
TComponent
FindComponent


Страницы:   1 2

Наверх

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