我目前正在使用 C++Builder 创建一个将文本复制到用户剪贴板的应用程序。我已经放置了一个TMemo控件,我想将其包含在一个const char *变量中,如下面的代码所示:
const char* output = TMemo1->Text;
Run Code Online (Sandbox Code Playgroud)
当我编译程序时它抛出错误
没有从“Vcl::Controls::TCaption”(又名“System::UnicodeString”)到“const char *”的可行转换
以下是将文本复制到剪贴板的代码:
const char* output = TMemo1->Text; // Error here
const size_t len = strlen(output) + 1;
HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE, len);
memcpy(GlobalLock(hMem), output, len);
GlobalUnlock(hMem);
OpenClipboard(0);
EmptyClipboard();
SetClipboardData(CF_TEXT, hMem);
CloseClipboard();
Run Code Online (Sandbox Code Playgroud) 我有一种情况需要将a char*与a 进行比较WideString.
如何在C++中将WideString转换为char*?
我有2个显示器具有非常不同的分辨率(这使得只是在它们上面拉伸窗口不是一个好主意)并且主动使用它们,通常在另一个显示时查看一个.
所以我想知道我是否可以从它的主窗口边界内移动Visual Studio 2010的子窗口,将其移动到另一个显示器.现在,我喜欢Borland C++ Builder中子窗口的行为方式(每个窗口,包括一个工具栏和一个属性窗格作为桌面上的一个独立窗口)(虽然我实际使用它的时候是无意义的).
有人知道如何深度复制构建器组件吗?
我的印象是我可以使用Assign函数,因为他们没有可用的复制构造函数?
我正在使用Assign,但是它不喜欢它用于TPanel(对于Graphics :: TBitmap可以正常工作)。我得到的错误是“无法将TPanel分配给TPanel”?
有人对我应该怎么做有任何想法吗?一段代码如下:
CConfigComponentPanel::CConfigComponentPanel( const CConfigComponentPanel& rkConfigComponentPanel ):
CConfigComponent( rkConfigComponentPanel ),
m_pkPanel( new TPanel(this) )
{
m_pkPanel->Assign( rkConfigComponentPanel.m_pkPanel );
}
Run Code Online (Sandbox Code Playgroud) 可能重复:
更改文件扩展名c#
以下代码在c ++中,我将如何在c#中表示?
FILE fp = fopen(ChangeFileExt(Application.ExeName, ".DAT").c_str(), "w");
Run Code Online (Sandbox Code Playgroud)
与此主题相关的另一个问题是:
以下是c#中的等价物:
fputs((thisstring.CommaText + "\n").c_str(), fp);
Run Code Online (Sandbox Code Playgroud) 关于TIdThreadComponent以下问题的简单而重要的问题:
在哪个线程是OnTerminate与OnStopped执行-主线程或者工作线程?
我在这些事件中(并调用VCL属性和方法)可以安全地假设我在主线程中吗?
更新:我想我可能会使用调试器,并在尝试之后,看起来像是OnStopped在工作线程内并且OnTerminate在主线程内.另外一个好处是调试器可以帮助确定执行启动/停止/控制线程的其他相关功能的位置,并减少可能的错误.
IDE:Embarcadero XE5 c ++构建器。
我试图在XML CData 节中转储UnicodeStrings。
这样的字符串的小摘录:
u"‰PNG\r\n\x1A\n\0\0\0\rIHDR\0\0\0õ\0\0\02\b\x06\0\0\0„\\i\0\0\0\x01sRGB\0®Î\x1Cé\0\0\0\x04gAMA\0\0±\vüa\x05\0\0\0\tpHYs\0\0\x0EÃ\0\0\x0EÃ\x01Ço¨d\0\0\v¼IDATxÚíœypUÕ\x19ÀO\x06…°¤\x04D$ˆ²\b1š\b\x18@...etc"
Run Code Online (Sandbox Code Playgroud)
我知道一个XML文档可以包含非ASCII字符,并且我认为XML解析器无法解析XML CData节的内容(节末尾指示符“ [[> ” 除外)不存在在我的数据中进行检查)。
当创建(写入)CDATA节,我仍然得到“ 无效字符在文本内容创建节点时被发现的错误”。
代码示例:
_di_IXMLDocument pXMLDocument = NewXMLDocument("1.0");
// I've played around with the document encoding with no success, guessing it's only applicable while reading the document.
// pXMLDocument->SetEncoding(L"iso-8859-1");
String myString; // Unicode, contains my data string.
// 1st param of CreateNode method is of type UnicodeString.
di_IXMLNode pCDataNode = pXMLDocument->CreateNode( myString, ntCData );
Run Code Online (Sandbox Code Playgroud)
有什么想法为什么会失败?编码有问题吗?
为了在一个窗口中看到多个视图我读了这个答案,但似乎那些选项不再可用,现在我的问题是如何配置rad studio xe6以 在窗口中查看多个视图(例如实际代码和设计形式) .
我在一个TTreeView对象中显示项目.当一个项目有子项时,控件>在图标旁边绘制一个(或者如果展开则绘制一个向下箭头).
我想知道>即使没有添加任何孩子,我是否能以某种方式告诉该项目.
在我的软件中存在某些条件,其中向用户显示有孩子是有意义的,而没有实际添加孩子(然后在选择项目时完成)
使用c ++ Builder 2009 VCL,但这个Q也应该对Delphi有效.
c++builder ×10
c++ ×6
delphi ×4
c# ×1
char ×1
delphi-xe6 ×1
file ×1
indy ×1
indy10 ×1
shutdown ×1
tmemo ×1
vcl ×1
widestring ×1
windows ×1
xml ×1