我负责将Delphi 2007应用程序移植到C#,并且完全没有使用Delphi的经验.我想知道Delphi包括的两个Indy版本之间有什么区别--Indy 9和Indy 10.此时我甚至不知道什么是Indy.有人可以帮我吗?它们只是Delphi库的不同版本吗?使用其中一个有什么含义?
谢谢!
我想在已经安装了Rad Studio 2007的机器上安装Rad Studio 2010,存在一些兼容性问题?
提前谢谢,再见.
我怎样才能找到TGridPanel里面控件的位置(行和列索引)?我想对按钮的数量使用常见的OnClick事件,并且需要知道按钮的X,Y位置.
我正在使用Delphi 2007.
以下情况:
type
TRec = record
Member : Integer;
end;
TMyClass = class
private
FRec : TRec;
public
property Rec : TRec read FRec write FRec;
end;
Run Code Online (Sandbox Code Playgroud)
以下不起作用(左侧不能分配),这是可以的,因为它TRec是一个值类型:
MyClass.Rec.Member := 0;
Run Code Online (Sandbox Code Playgroud)
在D2007中,虽然以下内容有效:
with MyClass.Rec do
Member := 0;
Run Code Online (Sandbox Code Playgroud)
不幸的是,它在D2010中不起作用(我认为它在D2009中也不起作用).第一个问题:为什么?故意改变了吗?或者它只是其他一些变化的副作用?D2007的解决方法只是一个"错误"吗?
第二个问题:您如何看待以下解决方法?使用安全吗?
with PRec (@MyClass.Rec)^ do
Member := 0;
Run Code Online (Sandbox Code Playgroud)
我在这里谈论现有代码,因此必须进行的更改才能使其工作应该是最小的.
谢谢!
我编写了一个实用程序来搜索异常文件的日志文件,它在Vista 64位上运行良好.现在我已经升级到Windows 7 64位,有时在读取文件流时会永远挂起.我认为它只有在日志文件处于活动状态并且用户写入它时才会挂起.但是在我使用fmShareDenyNone标志之前,这样可以正常工作.我使用Delphi 2007.任何想法我可以改变以使其工作?
以下是搜索日志文件目录的整个方法:
procedure TfrmMain.Refresh;
var
FileData : TSearchRec; // Used for the file searching. Contains data of the file
vPos, i, PathIndex : Integer;
vCurrentFile: TStringList;
vDate: TDateTime;
vFileStream: TFileStream;
begin
tvMain.DataController.RecordCount := 0;
vCurrentFile := TStringList.Create;
memCallStack.Clear;
try
for PathIndex := 0 to fPathList.Count - 1 do // Loop 0. This loops until all directories are searched through
begin
if (FindFirst (fPathList[PathIndex] + '\*.log', faAnyFile, FileData) = 0) then
repeat // Loop 1. This loops …Run Code Online (Sandbox Code Playgroud) 我在某些Windows 2003服务器上遇到Delphi应用程序的问题.它使用webservice调用来连接另一台服务器并来回传输数据.一旦应用程序进入Authenticate方法,应用程序就会死亡.该应用程序已经使用Win Server 2003在以前的盒子上工作多年,但它不适用于新建的机器.这些机器在大多数情况下都以相同的方式设置,但显然有一些配置设置不同,我无法追踪.此外,虽然在对Authenticate的调用中错误变得明显,但是数据包嗅探证明应用程序和它试图联系的服务器之间没有任何事情发生,这加强了我的想法,即在设置连接的早期就会死亡.我无法在本地复制错误,因此我无法在调试器中单步调试应用程序.有关为什么Indy 9 Delphi网络连接可能会无声地失败的任何想法?
我还没有找到最佳解决方案.我有一个非模态对话框,可以通过应用程序中的热键在无限制实例中打开.甚至对话框本身也可以打开一个新实例.我希望这些对话框始终位于主应用程序窗口的前面.我尝试过几件事.
任何其他建议:-)
在Delphi 2007中编译Embarcadero VirtualShellTools时:http://embtvstools.svn.sourceforge.net/
function TShellIDList.InternalChildPIDL(Index: integer): PItemIDList;
{ Remember PIDLCount does not count index [0] where the Absolute Parent is }
begin
if Assigned(FCIDA) and (Index > -1) and (Index < PIDLCount) then
Result := PItemIDList( PByte(FCIDA)
+ PDWORD(PByte(@FCIDA^.aoffset)
+sizeof(FCIDA^.aoffset[0])*(1+Index))^)
else
Result := nil
end;
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
[Pascal Error] IDEVirtualDataObject.pas(1023):E2015运算符不适用于此操作数类型
这段代码有什么问题,我需要做什么样的类型转换才能真正实现它?
我在以下(不太复杂)的例程中得到了同样的错误:
function TShellIDList.InternalParentPIDL: PItemIDList;
{ Remember PIDLCount does not count index [0] where the Absolute Parent is }
begin
if Assigned(FCIDA) then
Result := PItemIDList( PByte(FCIDA) + …Run Code Online (Sandbox Code Playgroud) 我正在发送带有英文文件名的文件(doc,pdf,xls),但是当我发送带有希腊文件名的文件时,我正在服务器端上面????????? 文件名和错误消息的字符Socket Error 10053,软件导致连接中止.是否有解决此类问题的方法.
码:
procedure TForm1.LoadFileButtonClick(Sender: TObject);
begin
OpenDialog1.Filter := 'All Files (*.*)';
OpenDialog1.FilterIndex := 1;
if OpenDialog1.Execute then
begin
Edit1.Text := ExtractFileName(OpenDialog1.FileName);
Edit3.Text := OpenDialog1.FileName;
Fstream := TFileStream.Create(OpenDialog1.FileName, fmopenread);
Edit2.Text := inttostr(Fstream.Size);
Fstream.Position := 0;
FreeandNil(FStream);
//Fstream.Free;
end;
end;
procedure TForm1.SendFileButtonClick(Sender: TObject);
var
IncommingText: string;
begin
if (opendialog1.filename<>'') and (CheckBox1.Checked = True) then begin
IdTCPClient1.iohandler.writeln(edit1.text + '@' + edit2.text + ';' + edit3.text + ',');
Sleep(2000);
try
IdTCPClient1.IOHandler.largestream:=true;
Fstream := TFileStream.Create(OpenDialog1.FileName, fmopenread);
IdTCPClient1.IOHandler.Write(Fstream, 0 ,true);
finally
Fstream.Position := …Run Code Online (Sandbox Code Playgroud) 希望实现一个最终用户对话框,要求他们创建自己的密码.
长度必须为9个字符.1个字符必须是大写,1必须是小写,1必须是数字,['0'..'9'],一个必须来自一组6个预定义的ascii字符,如此.[ '!', '#', '%', '&', '*', '@'].
完成了这个.和工作.但是,我想要做的是使用onchange事件提供可见验证,如果满足所有要求,则将编辑框的颜色更改为绿色,否则更改为RED.对9个字符长度进行调整很容易,但是要检查9个不同的字符,以确保至少有1个上部,1个下部,1个数字和1个预定义,这证明有点困难.有人可以帮忙吗?谢谢.
这是代码:
procedure TPasswordForm.edtPassword1Change(Sender: TObject);
begin
if Length(edtPassword1.Text <> 9 then
edtPassword1.Color := clRed
else
edtPassword1.Color := clLime;
end;
Run Code Online (Sandbox Code Playgroud) delphi ×10
delphi-2007 ×10
delphi-2010 ×2
delphi-2005 ×1
dep ×1
dialog ×1
indy ×1
indy10 ×1
nonblocking ×1
passwords ×1
records ×1
soap ×1
tgridpanel ×1
validating ×1
vcl ×1