Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Edit - ClipBoard


Автор: uranpro 5.6.2008, 13:33
Код

edit.CopyToClipboard; // oO выдает строчку  edit.CopyToClipboard; хотя edit.text = '4590'

как скопировать данные в буффер(ctrl+c) ?

Автор: THandle 5.6.2008, 13:40
Что то не очень понятно... Что не работает?

Код

procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit1.CopyToClipboard;
end;


Отлично работает...

Автор: uranpro 5.6.2008, 13:42
((( а у меня нет 

edit.CopyToClipboard; выполняю, в буффере edit.CopyToClipboard; оО епыть (((

Автор: THandle 5.6.2008, 13:59
Все понятно. Этот метод использует сообщение WM_COPY. Текст должен быть выделен.

Вот они... Эти методы:

Код

procedure TCustomEdit.CopyToClipboard;
begin
  SendMessage(Handle, WM_COPY, 0, 0);
end;

procedure TCustomEdit.CutToClipboard;
begin
  SendMessage(Handle, WM_CUT, 0, 0);
end;

procedure TCustomEdit.PasteFromClipboard;
begin
  SendMessage(Handle, WM_PASTE, 0, 0);
end;


Попробуй как нибудь так:

Код

procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit1.SetFocus;
  Edit1.CopyToClipboard;
end;


или так:

Код

procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit1.SelStart := 0;
  Edit1.SelLength := length(Edit1.Text);
  Edit1.CopyToClipboard;
end;

Автор: mr.Anderson 5.6.2008, 14:01
uranpro, не может такого быть, все нормально работает. Метод CopyToClipboard() копирует в буфер фрагмент текста, выделенный в том компоненте, для которого вызывается метод. Сбоев в нем быть не может, значит, что-то не так делаешь.

Автор: uranpro 5.6.2008, 14:03
спасибо !!! работают оба, удобней 2 способ) smile  smile 

Автор: mr.Anderson 5.6.2008, 14:04
THandle, ты долго еще будешь меня опережать?! smile 

Если у Edit'а есть метод SelectAll() (точно не помню), то можно так:
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit1.SelectAll();
  Edit1.CopyToClipboard();
end;

Если учитывается user-friendly, то лучше сделать так:
Код

procedure TForm1.Button1Click(Sender: TObject);
var
 oldx : Integer;
 oldl : Integer;
begin
 oldx := Edit1.SelStart;
 oldl := Edit1.SelLength;
  
 Edit1.SelectAll();
 Edit1.CopyToClipboard();

 Edit1.SelStart := oldx;
 Edit1.SelLength := oldl;
end;

Автор: uranpro 5.6.2008, 14:05
так он же не выделенный( при изменении edit.text нужно в буф копировать инфу постоянно

Автор: mr.Anderson 5.6.2008, 14:07
uranpro, кто не выделенный? Мой код или код THandle выделяет текст перед тем, как его копировать. Мой второй пример еще и возвращает на место курсор и старое выделение, если оно было. Хотя это глупость я сморозил, надо вот так лучше сделать:
Код

procedure TForm1.Button1Click(Sender: TObject);
var
 oldx : Integer;
begin
 if( Edit1.SelLength > 0 ) then
 begin
  Edit1.CopyToClipboard();

  exit;
 end;

 oldx := Edit1.SelStart;
  
 Edit1.SelectAll();
 Edit1.CopyToClipboard();
 Edit1.SelLength := 0;
 Edit1.SelStart := oldx;
end;

Автор: THandle 5.6.2008, 14:12
Народ, а зачем так извращаться со всеми этими выделениями?

Код

uses Clipbrd;

{...}

procedure TForm1.Button1Click(Sender: TObject);
begin
  with TClipboard.Create do
    begin
      SetTextBuf(PChar(Edit1.Text));
      Free;
    end;
end;

Автор: uranpro 5.6.2008, 14:18
ТОЧНО !!! я хотел его использовать, но забыл как str в pchar переводить (( PChar

у меняесть 5 полей, которые я постоянно изменяю, и одно, которое отображает нужную инфу(readonly), не удобно, когда текст в информационном поле выделяется

Автор: mr.Anderson 5.6.2008, 14:41
THandle, ага, так лучше, я что-то и забыл про Clipbrd модуль... smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)