![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Создание процедуры "копирование" [D7]
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