我想防止复制,剪切和粘贴我的TEdit.我怎样才能做到这一点?
我在控件上按下时尝试设置Key=NULLon KeyDown事件CTRL+V,但是没有用.
我需要重新编译一个C++构建器项目,并遇到了这个问题.
其中一个单位包含以下内容:
#include "LMDBaseControl.hpp"
#include "LMDBaseGraphicControl.hpp"
#include "LMDBaseLabel.hpp"
#include "LMDBaseMeter.hpp"
#include "LMDControl.hpp"
Run Code Online (Sandbox Code Playgroud)
:
当我编译这个单元时,我收到以下错误消息:
MHSS_ISS_HMI_v3_2.cpp(41):#include ....\include\MHSS\iss_hmi_gui_cached.h [C++错误] iss_hmi_gui_cached.h(68):E2209无法打开包含文件'LMDBaseControl.hpp'
完整的解析器上下文
MHSS_ISS_HMI_v3_2.cpp(41):#include ....\include\MHSS\iss_hmi_gui_cached.h [C++错误] iss_hmi_gui_cached.h(69):E2209无法打开包含文件'LMDBaseGraphicControl.hpp'
完整的解析器上下文
MHSS_ISS_HMI_v3_2.cpp(41):#include ....\include\MHSS\iss_hmi_gui_cached.h [C++错误] iss_hmi_gui_cached.h(70):E2209无法打开包含文件'LMDBaseLabel.hpp'
完整的解析器上下文
MHSS_ISS_HMI_v3_2.cpp(41):#include ....\include\MHSS\iss_hmi_gui_cached.h [C++错误] iss_hmi_gui_cached.h(71):E2209无法打开包含文件'LMDBaseMeter.hpp'
MHSS_ISS_HMI_v3_2.cpp(41):#include ....\include\MHSS\iss_hmi_gui_cached.h [C++错误] iss_hmi_gui_cached.h(72):E2209无法打开包含文件'LMDControl.hpp':
我在Borland C++ builder 6上安装了LMD Tools 7.0,并将库设置为我安装LMD Tool的文件夹.
我有一个C++ Builder项目,它还涉及一些Delphi Pascal文件.我注意到修改PAS文件的实现部分导致重新构建的文件比需要的多得多.
即使接口未更改,只要修改.pas文件,就会创建一个新的.hpp文件.反过来,这会导致许多.cpp文件需要重新编译.
是否有可以避免这种情况的解决方法或技巧?
这里的"免费"意味着无需购买任何许可证.
据我所知,VCL来自Borland C++ Builder,它是一个商业IDE.MFC属于Microsoft Visual Studio.
如果我没有购买BCB或MSVS的任何许可证,我可以编译这两个库的头文件并将它们链接到我自己的应用程序(免费应用程序,没有商业用途)?
我问这个是因为BCB和MSVS都有免费版本.BCB编译器是免费的,MSVS Express是免费的.
我还发现一篇文章告诉人们如何在MSVS Express中编译MFC:http: //www.codeproject.com/Articles/30439/How-to-compile-MFC-code-in-Visual-C-Express
它使用了DDK的旧版MFC.
== ==综述
如果我没有购买BCB或MSVS的任何许可证,我可以通过编译和链接在我自己的非商业应用程序中使用MFC或VCL吗?
如果第一个问题的答案是肯定的,就像文章说我们可以在DDK中找到MFC4.2,我可以在免费的SDK中找到VCL标题和lib/dll吗?
==更多解释(已编辑)==
这个问题不仅仅是关于重新分配问题,因为起初我想为自己编译一些代码.之后我可能想要发布二进制文件.为了使我的问题更直接:
因为我必须使用MFC/VCL header&lib来编译我的项目,我可以合法地获得这些文件而无需支付任何许可费吗?
在我上面提到的文章中,可以在DDK找到MFC4.2.我认为这可能是一种合法的方式.也许我可以在Platform SDK中获得更高级别的MFC头和lib.但是我在哪里可以得到VCL header/lib我完全不知道,如果我确实找到了一些来源,我不知道这是否合法.
(再次编辑)
根据paulsm4的回答,Wine说:
"首先,你必须合法地在你的计算机上获得MFC源代码.MFC源代码是Visual Studio的一部分.Visual Studio的许可证意味着它是一个单一的产品,不能分解成它的组件.所以最干净的方式在您的系统上获得MFC就是购买Visual Studio并将其安装在双启动Linux机器上." (http://www.sdconsult.no/linux/wine-doc/mfc-legal-issues.html)
VCL是同样的情况吗?
(最终编辑)
从David M的回答来看,VCL也是如此
但是你可以使用包含VCL lib/header的"Turbo C++ Builder 2006 Explorer",它是免费的.可悲的是,官方网站将不再提供此免费版本.
目前我想TDitionary在C++ Buillder XE2中使用
在我阅读文档后,我认为应该很容易,但我甚至无法创建TDictionary对象......
我的代码:
#include <vcl.h>
#pragma hdrstop
#include <Generics.collections.hpp>
#include "TDictionaryTest.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
void __fastcall TForm2::FormCreate(TObject *Sender)
{
TDictionary__2 <String, String> *Dir = new TDictionary__2<String, String>(0);
delete Dir;
}
Run Code Online (Sandbox Code Playgroud)
错误消息:
[ILINK32 Error] Error: Unresolved external '__fastcall System::Generics::Collections::TDictionary__2<System::UnicodeString, System::UnicodeString>::~TDictionary__2<System::UnicodeString, System::UnicodeString>()' referenced from ...\PRACTICE\C++\WIN32\DEBUG\TDICTIONARYTEST.OBJ
[ILINK32 Error] Error: Unresolved external '__fastcall System::Generics::Collections::TEnumerable__1<System::Generics::Collections::TPair__2<System::UnicodeString, System::UnicodeString> >::~TEnumerable__1<System::Generics::Collections::TPair__2<System::UnicodeString, System::UnicodeString> >()' referenced from ...\PRACTICE\C++\WIN32\DEBUG\TDICTIONARYTEST.OBJ
[ILINK32 Error] Error: Unresolved external 'System::Generics::Collections::TDictionary__2<System::UnicodeString, System::UnicodeString>::' referenced from ...\PRACTICE\C++\WIN32\DEBUG\TDICTIONARYTEST.OBJ
[ILINK32 …Run Code Online (Sandbox Code Playgroud) 我使用此代码来填充VirtualStringTree并允许重命名项目:
//---------------------------------------------------------------------------
// Structure for the tree
//---------------------------------------------------------------------------
struct TVSTdata
{
UnicodeString Name;
};
//---------------------------------------------------------------------------
// Initialization of the tree
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
VirtualStringTree1->NodeDataSize = sizeof(TVSTdata);
// Fill all nodes with initial data
InitializeTree();
}
//---------------------------------------------------------------------------
// Fill all nodes with data and assign FocusedNode
//---------------------------------------------------------------------------
void TForm1::InitializeTree()
{
TVirtualNode* pNode;
TVirtualNode* pActiveNode;
TVSTdata* pData;
VirtualStringTree1->BeginUpdate();
VirtualStringTree1->Clear();
pNode = VirtualStringTree1->AddChild(NULL); pData = static_cast<TVSTdata*>(VirtualStringTree1->GetNodeData(pNode)); pData->Name = "This is name 1";
pNode = VirtualStringTree1->AddChild(NULL); pData = static_cast<TVSTdata*>(VirtualStringTree1->GetNodeData(pNode)); pData->Name …Run Code Online (Sandbox Code Playgroud) 我试图解析以下Json文档:
[
{"EventType":49,"Code":"234","EventDate":"20050202", "Result":1},
{"EventType":48,"Code":"0120","EventDate":"20130201", "Group":"g1"}
]
Run Code Online (Sandbox Code Playgroud)
我使用以下代码:
TJSONObject* jsonread0 = (TJSONObject*) TJSONObject::ParseJSONValue(TEncoding::ASCII->GetBytes(Memo1->Lines->Text), 0);
for(int i=0;i<jsonread0->Size();i++)
{
TJSONPair* pair = jsonread0->Get(i);
Run Code Online (Sandbox Code Playgroud)
此时,pair.JsonValue为NULL.我需要做什么来阅读这些值?
我有2个字符串数组,在头文件中定义如下:
#ifndef DRC_DefinesH
#define DRC_DefinesH
#include <string>
#include <System.hpp>
//---------------------------------------------------------------------------
std::string MagFields[] = {
"SCAN", "EVENT", "EVENT2", "EVENT1", "EVENT3", "VECTORX", "VECTORY", "VECTORZ", "MAG1RAW", "MAG2RAW", "MAG3RAW",
"MAG4RAW", "MAG1UNCOMP", "MAG2UNCOMP", "MAG3UNCOMP", "MAG4UNCOMP", "MAG1COMP", "MAG2COMP", "MAG3COMP", "MAG4COMP",
"GRAD1", "GRAD2", "GRAD3", "UTC", "LAT", "LON", "ALT", "ANALOG1", "ANALOG2", "ANALOG3", "ANALOG4", "SYSTIME"};
std::string AnalogFields[] = {
"SCAN", "EVENT0", "EVENT1", "EVENT2", "EVENT3", "ANALOG1", "ANALOG2", "ANALOG3", "ANALOG4", "ANALOG5", "ANALOG6",
"ANALOG7", "ANALOG8", "ANALOG9", "ANALOG10", "ANALOG11", "ANALOG12", "ANALOG13", "ANALOG14", "ANALOG15", "ANALOG16",
"ANALOG17", "ANALOG18", "ANALOG19", "ANALOG20", "ANALOG21", "ANALOG22", "ANALOG23", "ANALOG24", "ANALOG25", …Run Code Online (Sandbox Code Playgroud) 我有一个程序,底部有一个包含三个元素的状态栏.我想用不同的字体颜色重绘第二个元素,以表示用户有效.我的问题的第一部分是:
a)如何以不同的颜色将文本重绘为默认文本?
和b)如何在触发事件后以不同的颜色绘制文本(例如按下按钮)?
我目前的代码如下.我正在尝试检查以不同颜色重新绘制面板的条件是否正确(CurrentUser.Valid,这是一个布尔值),然后尝试重新着色文本.这目前不起作用.
procedure TChatFormMain.sbarMainDrawPanel(StatusBar: TStatusBar;
Panel: TStatusPanel; const Rect: TRect);
var
RectForText: TRect;
begin
if (Panel = StatusBar.Panels[1]) and (CurrentUser.Valid) then
begin
sbarMain.Canvas.Font.Color := clGreen;
RectForText := Rect;
StatusBar.Canvas.FillRect(RectForText);
DrawText(sbarMain.Canvas.Handle, PChar(Panel.Text), -1, RectForText,
DT_SINGLELINE or DT_VCENTER or DT_LEFT);
end;
end;
Run Code Online (Sandbox Code Playgroud)
在代码的另一部分我打电话StatusBar.repaint;试图用新的文本颜色重绘条,这是正确的吗?
更新MCVE:
unit colourStatusU;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls;
type
TForm1 = class(TForm)
StatusBar1: TStatusBar;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure StatusBar1DrawPanel(StatusBar: TStatusBar; Panel: TStatusPanel;
const Rect: TRect); …Run Code Online (Sandbox Code Playgroud) c++builder ×10
delphi ×5
c++ ×4
vcl ×3
clipboard ×1
colors ×1
compilation ×1
dictionary ×1
json ×1
licensing ×1
mfc ×1
ondraw ×1
packages ×1
statusbar ×1