我正在使用TApplicationEvents OnShortCut事件来获取Delphi程序中的应用程序键盘快捷方式.
使用以下代码:
procedure TForm1.ApplicationEvents1ShortCut(var Msg: TWMKey; var Handled: Boolean) ;
begin
if (Msg.CharCode = VK_F9) then
begin
ShowMessage('F9 pressed!') ;
Handled := True;
end;
end;
Run Code Online (Sandbox Code Playgroud)
题:
如何检测何时按下"ALT C"?
在Delphi 2009中将声明为TBytes的字节数组转换为RawByteString的最佳方法是什么?这段代码实际上有效,也许有更快的方式(没有循环):
function Convert(Bytes: TBytes): RawByteString;
var
I: Integer;
begin
SetLength(Result, Length(Bytes));
for I := 0 to ABytes - 1 do
Result[I + 1] := AnsiChar(Bytes[I]);
end;
Run Code Online (Sandbox Code Playgroud) 我尝试了许多与RibbonApplicationMenuBar相关联的方法,以防止用户使用鼠标选择RibbonApplicationMenuBar,直到从inifile加载项目设置并关闭splashform.但除非另有说明,否则似乎没有任何工作可以使RibbonApplicationMenuBar InActive.
帮助文件没有显示RibbonApplicationMenuBar的许多属性和帮助Wiki相同,所以我无法解决这个问题.
procedure TMainForm.FormCreate( Sender: TObject );
begin
// make theRibbonApplicationMenuBar1 inactive
RibbonApplicationMenuBar1.Enabled := False;
RibbonApplicationMenuBar1.Inactive := True;
RibbonApplicationMenuBar1.Hide;
RibbonApplicationMenuBar1.AutoFocus := False;
// read application settings
ReadIni( AIniFileFilename );
// show a splash form
FormSplash := TFormSplash.Create( MainForm );
// FormSplash.Parent := MainForm;
FormSplash.Position := poOwnerFormCenter;
FormSplash.Show;
FormSplash.Update;
end;
procedure TMainForm.FormShow( Sender: TObject );
begin
// close the splash form
FormSplash.RequestClose;
// Activate the RibbonApplicationMenuBar
RibbonApplicationMenuBar1.Enabled := True;
RibbonApplicationMenuBar1.Inactive := False;
if RibbonApplicationMenuBar1.CanFocus then
RibbonApplicationMenuBar1.SetFocus;
RibbonApplicationMenuBar1.AutoFocus := True;
RibbonApplicationMenuBar1.SelectApplicationButton; …Run Code Online (Sandbox Code Playgroud) 我看到了与此相关的另一个帖子,但我有一个不同的问题.我根据手册和其他线程的建议设置了所有内容,我没有收到任何错误.该应用程序实际上出现在码头,但这是事情停止的地方.首先它反弹了很长时间(分钟),在它最终停止反弹之后,没有窗口会显示出来.我在任何地方都没有错误.有什么建议?
这是我的程序使用的类层次结构:

TForm_Upgrade_Database的构造函数如下所示:
__fastcall TForm_Upgrade_Database :: TForm_Upgrade_Database(TComponent*Owner,int newest_version):TForm(Owner){}
在尝试创建公式的实例之后
TForm_Upgrade_Database *dlg = new TForm_Upgrade_Database(this, newest_version);
Run Code Online (Sandbox Code Playgroud)
我的程序抛出EStackOverflow异常

我停止了程序并在TForm_Upgrade_Database构造函数中使用断点再次运行它.几步之后callstack看起来像这样:

如何TCustomForm构造函数继续尝试调用其后代的构造函数???
最小的测试用例:
so_project.cpp:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "f_form.h"
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
TForm_Upgrade_Database *form = new TForm_Upgrade_Database(NULL, 10);
delete form;
form = NULL;
return 0;
}
//---------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
f_form.cpp:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "f_form.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm_Upgrade_Database *Form1;
//---------------------------------------------------------------------------
__fastcall TForm_Upgrade_Database::TForm_Upgrade_Database(TComponent* Owner, int x)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
f_form.h:
//---------------------------------------------------------------------------
#ifndef f_formH
#define …Run Code Online (Sandbox Code Playgroud) 我正在使用Delphi 2010,我试图允许用户在TListView中每行选择2个选项.使用TListView,我可以将样式设置为vsReport并启用Checkboxes,但每行只能获得1个复选框.我需要的是每行2个复选框...具体为1表示第1列,1表示第2列.
我想要完成的是非常类似于标准的Windows文件安全对话框:

有没有人有任何建议使用TListView甚至MustangPeak的TEasyListView来实现这样的东西?
我有下表中(id, Tag)包含以下值
(1, 17)
(1, 31)
(2, 17)
(3, 31)
Run Code Online (Sandbox Code Playgroud)
当我查询以下内容时
"SELECT id FROM table WHERE 1 AND Tag=17 AND Tag=31"
Run Code Online (Sandbox Code Playgroud)
我期望它返回(id)
(1)
Run Code Online (Sandbox Code Playgroud)
但事实并非如此.(返回0行)
这有什么不对?
使用简单的代码,例如:
procedure TForm1.cxButton1Click(Sender: TObject);
begin
ftp.Host := 'domain';
ftp.Username := 'user';
ftp.Password := 'password';
ftp.Connect;
ftp.Put('C:\_Projects\testpicture.JPG');
ftp.Quit;
ftp.Disconnect;
end;
Run Code Online (Sandbox Code Playgroud)
我得到以下结果:
我究竟做错了什么?
谢谢.
delphi ×8
vcl ×2
c++ ×1
c++builder ×1
c++builder-6 ×1
constructor ×1
delphi-2009 ×1
delphi-xe2 ×1
embedded ×1
firemonkey ×1
ftp ×1
indy ×1
listview ×1
mysql ×1
ribbon ×1
sql ×1
string ×1
windows ×1