Benish |
Отправлено: 07.02.2005, 16:26 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 67
|
Есть программа:
CODE |
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (Clipboard()->HasFormat(CF_TEXT))
{
//Вариант 1
Clipboard()->AsText = Edit1->Text;
//Вариант 2
Clipboard()->SetTextBuf(Edit1->Text.c_str());
//Вариант 3
Edit1->CopyToClipboard();
}
}
|
Форма, на ней TEdit и TButton. После набора текста и нажатия кнопки, текст должен записываться в Clipboard.
Интересно, что:
Вариант 1 и 2 работают у меня на машине и не работают на других компах. Вариант 3 не работает даже у меня.
Подскажите пожалуйста, в чем тут дело! |
|
Gedeon |
Отправлено: 07.02.2005, 17:24 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
Ну во первых что такое Clipboard() ??????????????????
Ну и дальше все работает вот так
CODE |
TClipboard *C = new TClipboard();
if (C->HasFormat(CF_TEXT)){
//Âàðèàíò 1
//C->AsText = Edit1->Text;
//Âàðèàíò 2
//C->SetTextBuf(Edit1->Text.c_str());
//Âàðèàíò 3
Edit1->CopyToClipboard();
}
delete C; |
А про третий вариант в хэлпе можно глянуть было
QUOTE | Copies the selected text in the edit control to the Clipboard. |
Т.е. надо его сначала выделить.
|
|
Benish |
Отправлено: 08.02.2005, 13:09 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 67
|
QUOTE (Gedeon @ 07/02/2005, 18:26) | Ну во первых что такое Clipboard() ??????????????????
|
Цитата из BCBhelp:
Returns an instance of TClipboard.
Unit Clipbrd
Category clipboard routines
extern PACKAGE TClipboard* __fastcall Clipboard(void);
Description
Applications use a single instance of TClipboard for interacting with the system clipboard. If the application has never used the Windows clipboard, calling Clipboard creates a new instance of TClipboard. If the clipboard has already been used, Clipboard returns the previously created TClipboard object.
To use Clipboard and the TClipboard object, include Clipbrd.hpp in the source module.
-------------------------------------------------------------------------------------------
This example uses a button and an edit control on a form. When the user clicks the button, any text on the clipboard is pasted into the edit control. If there is no text on the clipboard, a message box appears.
Note: To use this example, you must include .
CODE |
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (Clipboard()->HasFormat(CF_TEXT))
Edit1->Text = Clipboard()->AsText;
else
Application->MessageBox("The clipboard does not contain text.", NULL, MB_OK);
}
|
|
|
Benish |
Отправлено: 08.02.2005, 13:33 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 67
|
2 Gedeon:
Спасибо. С CopyToClipboard недоглядел.
Попытка применить ваше решение тоже не принесла результатов.
Вообщем после удаления конструкции:
CODE |
if (C->HasFormat(CF_TEXT))
|
Все заработало и на других машинах. |
|
Gedeon |
Отправлено: 08.02.2005, 13:44 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
Ясно.
Запустил на 2 других тачках 98, ХР — все работает.
Вместе с if (Clipboard()->HasFormat(CF_TEXT))
вот буквально следующий код
CODE |
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Clipboard()->AsText = "sss";
if (Clipboard()->HasFormat(CF_TEXT))
Edit1->Text = Clipboard()->AsText;
}
//---------------------------------------------------------------------------
|
Отредактировано Gedeon — 08/02/2005, 12:50
|
|
Benish |
Отправлено: 08.02.2005, 15:34 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 67
|
Хмммм...
Вообщем если использовать вот такой код:
CODE |
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Clipboard()->AsText = "";
if (Clipboard()->HasFormat(CF_TEXT)) Clipboard()->AsText = Edit1->Text;
}
|
то все работает, на всех машинах.
Такое впечатление, что Clipboard(), до инициализации текстом, не знает, что она может работать с текстом. |
|