我希望在以下函数中获得任何"记录"类型的大小.但似乎它不起作用:
function GetDataSize(P : Pointer) : Integer;
begin
Result := SizeOf(P^); // **How to write the code?**
end;
Run Code Online (Sandbox Code Playgroud)
例如,后续记录的大小为8个字节
SampleRecord = record
Age1 : Integer;
Age2 : Integer;
end;
Run Code Online (Sandbox Code Playgroud)
但GetDataSize(@a)总是返回1(当然,a是SampleRecord类型的变量).我该怎么办?
我注意到Delphi有一个程序过程New(var P:Pointer),可以分配内存块对应P指向的类型的大小.怎么能达到这个尺寸?
我想用Delphi代码为IE设置代理操作连接.我测试这段代码:
Procedure SetProxy(const Server: String);
var
Reg : TRegistry;
begin
Reg := TRegistry.Create;
Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Internet Settings',False);
Reg.WriteString('ProxyServer',Server);
Reg.WriteBool('ProxyEnable',True);
Reg.CloseKey;
Reg.Free;
InternetSetOption(0, INTERNET_OPTION_SETTINGS_CHANGED, 0, 0);
end;
Run Code Online (Sandbox Code Playgroud)
但它改变了IE Internet Option中的LAN设置.
有人有解决方案吗?
附加: 如何检索连接名称列表?
我在delphi 7中创建了一个表单,并在其上添加了一个组合框.组合框包含项目列表.我不希望用户可以输入值到Combobox,所以我已经设置
combobox.style := csDropDownList;
Run Code Online (Sandbox Code Playgroud)
但我想使用的代码,combobox.text := 'New Item';但它不起作用.请注意,我想要显示的文本不在项目列表中,我不想在那里添加它.请问有什么解决方案吗?
我有一个简单的问题,我在主文件夹中有一些单位,我的项目位于子文件夹,我想使用主文件夹中的单位.我用过这个:
uses
ACMIN in '..\ACMIN.pas'
Run Code Online (Sandbox Code Playgroud)
我收到错误:找不到文件ACMIN.dcu.
我使用Delphi7,MS Vista和Devart's dbExpress驱动程序(版本4.70).我放弃a TSQLConnection,a TSQLTable(tabA),a TDataSetProvider,a TClientDataSet(cdsA),a DataSource和a DBGrid.
我通过图形设计工具进行了所有设置.一切正常,当我打开时cdsA,我可以看到网格中的所有数据.这是我的代码:
procedure TForm1.Button1Click(Sender: TObject);
var
fields, values: string;
begin
cdsA.Close;
cdsA.Open;
fields := 'fielda;fieldb';
values := Edit1.Text+';'+Edit2.Text;
cdsA.SetKey;
cdsA.Locate(fields, values, [loCaseInsensitive]);
end;
Run Code Online (Sandbox Code Playgroud)
fieldA并且fieldB存在于表中并且也被定义cdsA.Fields.当我执行此代码时,Locate指令生成异常EVariantInvalidArgError ... Invalid argument.我想知道什么是错的.TIA.
弗朗切斯科
我正在使用TOpenPictureDialog来浏览图像.在调试模式下,当我在此对话框中浏览图片时,我碰巧在快捷方式(.lnk)上单击(而不是双击),调试器会中断我的程序,因为它捕获异常,说它不是有效文件格式.
怎么克服这个?我知道这只是在调试时间,并且在最终的EXE中没有任何问题,但它变得非常烦人,因为我希望能够通过这些快捷方式.
Delphi v7
此代码旨在允许用户更改其密码.它似乎正确执行,但新密码未保存在密码数据字段中.我一定做错了什么,但我看不出来.
procedure TForm4.btnPswordClick(Sender: TObject);
var
I: integer;
begin
tblLogin.First;;
for I := 0 to tblLogin.RecordCount do
Begin
If tblLogin.FieldByName('Username').Value = Edit1.Text then
if tblLogin.FieldByName('Password').Value = Edit2.Text then
sign2.Visible := True; //Test in this case tells the application to make Label1
visible if the //username and password are correct
tblLogin.Next;
end;
I:= I+1; //ends search loop of records so program can move on
If sign2.Visible = False then
begin
MessageDlg('Error Username, or Password not correct',
mtConfirmation, [mbCancel], 0);
end …Run Code Online (Sandbox Code Playgroud) 附件是我遇到的内存泄漏示例的完整代码.有人可以告诉我如何清理这个内存泄漏.如果您创建一个表单并在其上放置一个按钮,然后将下面的代码粘贴到.pas文件中,则可以编译此代码.提前感谢您提供的任何帮助.
unit LeakForm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type PrintRecord = record
PrintString1,
PrintString2,
PrintString3,
PrintString4,
PrintString5,
PrintString6 : string;
PrintFloat1,
PrintFloat2,
PrintFloat3 : Double;
end;
PrintPointer = ^PrintRecord;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
MyPrintLst : TList;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure ClearTList(Var List : TList);
Var …Run Code Online (Sandbox Code Playgroud) uses
SysUtils,
Classes;
{$R *.res}
function add(Value1:integer;value2:integer):integer;stdcall;
begin
Result:=Value1+value2;
end;
function subtract(Value1:integer;value2:integer):integer;stdcall;
begin
Result:=Value2-value1;
end;
function multiply(Value1:integer;value2:integer):integer;stdcall;
begin
Result:=Value1*value2;
end;
function divide(Value1:integer;value2:integer):integer;stdcall;
begin
Result:=Value2 div value1;
end;
function check(Value1:integer;value2:integer):Boolean;stdcall;
begin
if(Value2>value1)then
Result:=True
else
Result:=False;
end;
exports add,subtract,multiply,divide,check;
Run Code Online (Sandbox Code Playgroud)
这是我的DLL代码.即使我给出口它是有效的.我可以知道这两个关键字的使用之间的区别.