考虑这个例子:
Memo1.Clear;
Memo1.Add(S);
Memo1.SaveToFile(F);
Run Code Online (Sandbox Code Playgroud)
如果它是在JavaScript中,我们可以这样做:
Memo1.Clear.Add(S).SaveToFile(F);
Run Code Online (Sandbox Code Playgroud)
我怎样才能编写自己的Delphi类来支持这样的链接方法调用?我希望能够编写这样的代码:
MyFileClass.Create('File.txt').OpenForWrite().Add('Test');
Run Code Online (Sandbox Code Playgroud) 我使用的是Delphi 10和Windows 10.
以下代码使插入符号和选择在Edit1中消失.
procedure TForm1.Edit1Enter(Sender: TObject);
begin
Edit1.PasswordChar := '*';
end;
Run Code Online (Sandbox Code Playgroud)
焦点移动到另一个控件后,在onClick上运行良好.
我不能使用onClick,因为焦点按Tab键移动而Edit1应该以默认#0开头,因为它在焦点进入之前保存了'password'文本.
我怎么解决这个问题?
我正在使用Peter Below 的 PBThreadedSplashForm在应用程序启动期间显示。在创建数据模块期间(就在创建主窗体之前),它会随着各种数据库的打开而更新。
问题是我们要检查在创建数据模块期间所做的某些事情是否存在。如果缺少任何这些项目,则会显示一个模式对话框,以便可以创建该项目或关闭应用程序。(缺少的项目通常是索引,该对话框主要在我们重新索引数据库时使用,因此它针对的是开发人员而不是普通用户。)但是,模式对话框显示在启动屏幕后面;随着标题的变化,它似乎是焦点窗口,但它显示在启动屏幕后面。
启动屏幕是使用 Windows API CreateWindowEx() 从与主进程不同的线程创建的,使用以下代码:
procedure TPBSplashThread.CreateSplashWindow;
const
TopmostStyle: Array [Boolean] of DWORD = (0, WS_EX_TOPMOST );
NoActivateStyle : Array [Boolean] of DWORD = (0, WS_EX_NOACTIVATE );
var
wsize: TSize;
begin
wsize.cx := FSurface.Width + GetSystemMetrics( SM_CXEDGE ) * 2;
wsize.cy := FSurface.Height + GetSystemMetrics( SM_CYEDGE ) * 2;
FWnd := CreateWindowEx(
TopmostStyle[ FTopmost ] or WS_EX_TOOLWINDOW
or WS_EX_STATICEDGE or WS_EX_CLIENTEDGE
or NoActivateStyle[ Win32MajorVersion >= 5 ],
MakeIntResource( FWndClass ),
nil,
WS_POPUP or …Run Code Online (Sandbox Code Playgroud) 我试图从我的Delphi代码使用命令行实用程序(它与dos命令行中的测试一起使用)将PDF转储到文本.
这是我的代码
if fileexists(ExtractFilePath(Application.ExeName) + 'pdftotext.exe') then
begin
ShellExecute(H,'open', 'pdftotext.exe', PWideChar(fFileName), nil, SW_SHOWNORMAL);
if fileExists(changeFileExt(fFileName, '.txt')) then
Lines.LoadFromFile(changeFileExt(fFileName, '.txt'))
else
ShowMessage('File Not found');
end;
Run Code Online (Sandbox Code Playgroud)
在代码中放置断点并单步执行时,它会使用它
if fileExists(changeFileExt(fFileName, '.txt')) then
Run Code Online (Sandbox Code Playgroud)
但是返回false,因此调用了Shellexecute,但是没有转储任何文件
我做错了什么?
我正在为HTTP请求寻找IdHTTP的轻量级替代品.最好是不使用WinINet的.我需要向我拥有的网站发送请求(因此我可以配置可能需要的任何设置).
我在一个过程中使用此代码,我遇到了第一个if子句的麻烦:
procedure TForm1.Button1Click(Sender: TObject);
var i,indice,n,conto:integer;
a:string;
begin
indice:=1;
conto:=0;
Memo2.Lines.Add('<tr>');
for i := 1 to 649 do
begin
if ((i <> 11) or (i mod 11 <> 0)) then
begin
proced4();
end
else
begin
Memo2.Lines.Add('</tr><tr>');
proced5();
end;
end;
end;
Run Code Online (Sandbox Code Playgroud)
我有一个for,从1到649.当索引是11的倍数时,11, 22, 33, 44...我必须调用
Memo2.Lines.Add('</tr><tr>');
proced5();
Run Code Online (Sandbox Code Playgroud)
使用我编写的代码,只有当索引i为11时,代码才会调用proced5().但是,例如,当i为22或33时,它执行proced4()而不是proced5().
我怎样才能解决这个问题?
今天我偶然发现了一些神秘的东西.这行代码:
showmessage(menuMain.player[2] + ' ready!');
Run Code Online (Sandbox Code Playgroud)
生成此消息(例如menuMain.player [2] = Player):
播放机
但是如果我以这种方式放置代码(例如menuMain.player [2] = Player):
showmessage('Test: ' + menuMain.player[2]);
Run Code Online (Sandbox Code Playgroud)
它将生成此消息:
测试:玩家
根据调试器,字符串的确切值(buffer := menuMain.player[2] + ' ready!')是这样的:
'玩家'#0#0#0#0#0#0#0'0'准备就绪!'
我老实说相信这是一个编译器故障,因为我在另一个代码块中有完全相同的行,并且它完美无缺.
现在对我来说最难的部分是,我是愚蠢的,还是这确实是一个小故障?
使用unsigned char,您可以存储0到255之间的数字
255(b10)= 11111111(b2)<=那是1个字节
这样可以轻松地执行+, - ,*等操作...
现在怎么样:
255(b10)= 10101101(b2)
使用此方法可以使用unsigned char 表示最多399个?
399(b10)= 11111111(b2)
有人可以提出一种算法来使用最后一种方法进行加法吗?
我怎么能在delphi 7中做这样的事情
if FileExists
then
Filesetattr
DownloadFile
else
Downloadfile
Filesetattr
Run Code Online (Sandbox Code Playgroud)
我试过了; 它不起作用.我用逗号(,)尝试也没用.所以我希望在一个"then语句"中执行两个或更多命令,在"else语句"中执行两个或多个命令
delphi ×9
winapi ×2
c++ ×1
command-line ×1
delphi-2010 ×1
delphi-7 ×1
delphi-xe3 ×1
driver ×1
editbox ×1
if-statement ×1
modulo ×1
range ×1
shellexecute ×1
string ×1
syntax ×1
webcam ×1