标签: delphi-xe3

如何获取本地网络中所有计算机的列表?

我很久以前的这段代码应该返回一个字符串列表,每台计算机连接到我的Windows,workgroup但是当我测试时,我只得到自己的计算机,但我有三台连接相同workgroup名称的计算机并出现在我的Windows中Explorer网络列表.

可能有什么不对?还有另一种方法吗?

function FindAllComputers(Workgroup: string; WithIP: Boolean): TStringList;
var
  EnumHandle : THandle;
  WorkgroupRS : TNetResource;
  Buf : Array[1..500] of TNetResource;
  BufSize : cardinal;
  Entries : cardinal;
  Res : Integer;
  Computers : Tstringlist;
  Limit, I: Integer;
begin
  Limit := 0;
  Workgroup := Workgroup + #0;
  FillChar(WorkgroupRS, SizeOf(WorkgroupRS) , 0);
  With WorkgroupRS do
  begin
    dwScope := 2;
    dwType := 3;
    dwDisplayType := 1;
    dwUsage := 2;
    lpRemoteName := @Workgroup[1];
  end;
  WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, 
    @WorkgroupRS, EnumHandle);
  Computers := TStringList.Create; …
Run Code Online (Sandbox Code Playgroud)

delphi windows-7 delphi-xe3

0
推荐指数
1
解决办法
2463
查看次数

文本资源不会编译到我的 Delphi exe 中

我在 Delphi 程序中使用单词列表,直到现在我都会将该列表放置在 TMemo 的 Lines 属性中。不过,我不需要可视组件,而是需要 TStringList,所以现在我想通过使用资源文件以正确的方式执行操作,并从资源加载我的 TStringList。我尝试应用此答案中的信息,但收到错误:

[dcc32 错误] E2161 错误:RLINK32:文件“D:\etc\Unit1.rc”中不支持 16 位资源

为了更好地衡量,我有这个 Unit1.rc 文件:

RC_keywords RCDATA "keywords.txt"
Run Code Online (Sandbox Code Playgroud)

我在项目→资源和图像...中创建了这个,但看起来这与自己编写 .rc 文件相同。

在我的程序中,我的资源包括:

{$R *.rc}
Run Code Online (Sandbox Code Playgroud)

在我的程序中

procedure TForm1.FormCreate(Sender: TObject);
var
  SL: TStringList;
  ResStream: TResourceStream;
begin
  SL := TStringList.Create;
  try
    ResStream := TResourceStream.Create(hInstance, 'RC_keywords', RT_RCDATA);
    SL.LoadFromStream(ResStream);
    //
    // do a lot of useful stuff here
    //
  finally
    SL.Free;
  end;
Run Code Online (Sandbox Code Playgroud)

这是怎么回事?

delphi delphi-xe3

0
推荐指数
1
解决办法
1712
查看次数

尝试释放FSQL时,Delphi XE3指针无效(TStringList)

我正在XE3中创建一个新的应用程序,但使用在D2007中创建的一些单位.

我在释放TStringList数据项时遇到错误.这是创建数据项FSQL的代码:

procedure TPayorDM.DataModuleCreate(Sender: TObject);
begin
  FPayorDRM := TDRM.Create;
  FSQL := TStringList.Create;
end;
Run Code Online (Sandbox Code Playgroud)

这是获取错误的代码:

procedure TPayorDM.DataModuleDestroy(Sender: TObject);
begin
  FreeAndNil(FSQL);
  if T_Payor.Active then T_Payor.Close;
  FreeAndNil(FPayorDRM);
end;
Run Code Online (Sandbox Code Playgroud)

错误发生在'FreeAndNil(FSQL);'上.我尝试了'FSQL.Free',我得到了相同的结果.

这是我得到的错误:

项目:PayorUpdate.exe引发异常类EInvalidPointer,消息为"无效指针操作".

当我打破蓝色箭头(调试模式)指向_FreeMem(指针(Self)); 在System单元中的TObject.FreeInstance过程中如下:

procedure TObject.FreeInstance;
begin
  CleanupInstance;
  _FreeMem(Pointer(Self));
end;
Run Code Online (Sandbox Code Playgroud)

如果我没有释放TStringList数据项,我会在应用程序中出现内存泄漏.

是否可能需要设置配置选项?我搜索谷歌并没有找到任何解释我做错的事情,除了三种可能之一:

  • 它是由其他一些内存管理器分配的.
  • 它曾经被释放过一次.
  • 它从未被任何东西分配过.

如果我试一试......除了......我能解决这个问题,但我不想这样做.

顺便说一下,我有另一个TStringList在不同的单位,我创建和FreeAndNil,我没有得到任何错误.

这是完整的来源:


    unit PayorDataMgr;

    interface

    uses
      SysUtils,
      Classes,
      Dialogs,
      NativeXML,
      adscnnct,
      DB,
      adsdata,
      adsfunc,
      adstable,
      ace,
      cbs.drm,
      cbs.utils,
      cbs.LogFiles;

    const
      POLICY_TYPES: array[1..3] of string = ('Primary','Secondary','Tertiary');

    type
      TPayorRecord = Record
        ASSIGNBENEFITS: Boolean;
        AUTHORIZE: Boolean;
        BATCHBILL: Boolean;
        CLAIMMAX: Integer; …

delphi object-destruction delphi-xe3 invalid-pointer

0
推荐指数
1
解决办法
785
查看次数

读取 Excel 表格中的特定列

我有一个 Excel 电子表格,但现在我的问题是我希望能够只读取特定的列,电子表格中的列超过 20,我只需要读取 3 列。

procedure TForm1.sh1(SheetIndex: integer);
Var
  Xlapp1,Xlrange, Sheet:Variant ;
  MaxRow, MaxCol,X, Y:integer ;
  str:string;
  arrData:Variant;
begin
 try
  Str:=trim(form1.OpenDialog1.FileName);

  XLApp1 := createoleobject('excel.application');
  XLApp1.Workbooks.open(Str) ;

  Sheet := XLApp1.WorkSheets[SheetIndex] ;

  MaxRow := Sheet.Usedrange.EntireRow.count ;
  MaxCol := sheet.Usedrange.EntireColumn.count;

  arrData:= Sheet.UsedRange.Value;

  stringgrid1.RowCount:=maxRow+1;
  StringGrid1.ColCount:=maxCol+1;

  for x := 1 to maxCol do
    for y := 1 to maxRow do
     stringgrid1.Cells[x,y]:=arrData[y, x];

  XLApp1.Workbooks.close;
 Except
  on E : Exception do begin
  XLApp1.Workbooks.close;
   ShowMessage(E.Message);
  end;
 end;
end;
Run Code Online (Sandbox Code Playgroud)

delphi excel delphi-xe3

0
推荐指数
1
解决办法
2976
查看次数

如何创建安装程序项目以构建Delphi应用程序的安装程序

我是Delphi的新手(之前曾在较低级别使用过Visual Studio),并且很难理解如何将项目编译成最终的应用程序/安装程序.我已经下载了Inno设置,我认为这是朝着正确方向迈出的一步.我用的是XE3.

任何帮助赞赏.

delphi pascal inno-setup delphi-xe3

-1
推荐指数
1
解决办法
1583
查看次数

delphi应用程序中的未知异常

我编写了一个在我的系统上工作正常的应用程序,但从昨天开始我就意识到它不适用于其他计算机.

这是用户系统中发生的错误:

EReadError error 
Error reading
bmpAnimation.AnimationBitmap.PNG: Access violation at address 009BBCAC in
module 'Autorun.exe'. Read of address 000000000
Run Code Online (Sandbox Code Playgroud)

我使用madExcept,这是它的错误报告:

date/time         : 2013-04-13, 13:54:14, 962ms
computer name     : ----
user name         : ---
registered owner  : ----
operating system  : Windows 8 x64 build 9200
system language   : Persian
system up time    : 5 days 5 hours
program up time   : 291 milliseconds
processors        : 8x Intel(R) Core(TM) CPU Q 720 @ 1.60GHz
physical memory   : 2182/4025 MB (free/total)
free …
Run Code Online (Sandbox Code Playgroud)

delphi firemonkey delphi-xe3

-1
推荐指数
1
解决办法
2233
查看次数

服务开始然后停止?

procedure TService1.ServiceExecute(Sender: TService);
var
   FileName : string;
   Strm     : TMemoryStream;
   i        : integer;
   h,m,s,ms : word;
begin

   DecodeTime( now, h, m, s, ms );

   if ( h = 13 ) AND ( m = 6 ) AND ( s = 0 ) then
   begin
      ShowMessage( 'entered' );
      for i := 0 to 3 do
      begin

         DateTimeToString( FileName, 'yyyy-mm-dd-hh-nn-ss', now );

         FileName := ExtractFilePath( Application.ExeName ) + FileName + '.jpg';

         if not FileExists( FileName ) then
         begin
            try

               Strm := TMemoryStream.Create; …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-xe3

-1
推荐指数
1
解决办法
1291
查看次数

如何链接方法调用?

考虑这个例子:

 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 delphi-xe3

-1
推荐指数
1
解决办法
578
查看次数

如何在Delphi中检测鼠标的前后点击?

我有一台Trust GXT-25鼠标,它有4个按钮:左,右,后和下.

我只能左右抓.如何在Delphi XE3中检测剩余的2个以上事件?

delphi mouseclick-event delphi-xe3

-2
推荐指数
1
解决办法
1003
查看次数

我是否正确使用Bass.dll加载此音乐?

基于Bass的文档,我正在尝试使用以下代码加载ogg文件:

var
  FFile : string;
  Music: HSAMPLE; 
  ch: HCHANNEL;
  OpenDialog1 : TOpenDialog;
begin
  Dynamic_Bass.Load_BASSDLL('Library/Bass.dll');
  Dynamic_Bass.BASS_Init(1,44000,Bass_DEVICE_SPEAKERS,0,nil);  
  OpenDialog1 := TOpenDialog.Create(nil);
  if not OpenDialog1.Execute then
    Exit;
  ffile := OpenDialog1.FileName;
  Music := BASS_SampleLoad(FALSE, PChar(ffile), 0, 0, 3, BASS_SAMPLE_OVER_POS);
  ch := BASS_SampleGetChannel(Music, False);
  BASS_ChannelSetAttribute(ch, BASS_ATTRIB_PAN, 0);
  BASS_ChannelSetAttribute(ch, BASS_ATTRIB_VOL, 1);
  BASS_ChannelPlay(ch, False);
  ShowMessage(IntToStr(BASS_ErrorGetCode));
end;
Run Code Online (Sandbox Code Playgroud)

ShowMessage返回5.根据文档,这是Handle错误,这意味着错误在musicvar中.如果我评论下面的行BASS_SampleLoad我得到错误2.意味着无法加载该文件.所以这是一个普通的OGG文件.所以我的问题是:我做错了吗?

提前致谢.

delphi ogg bass delphi-xe3

-5
推荐指数
1
解决办法
1165
查看次数