我很久以前的这段代码应该返回一个字符串列表,每台计算机连接到我的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 程序中使用单词列表,直到现在我都会将该列表放置在 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)
这是怎么回事?
我正在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; … 我有一个 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的新手(之前曾在较低级别使用过Visual Studio),并且很难理解如何将项目编译成最终的应用程序/安装程序.我已经下载了Inno设置,我认为这是朝着正确方向迈出的一步.我用的是XE3.
任何帮助赞赏.
我编写了一个在我的系统上工作正常的应用程序,但从昨天开始我就意识到它不适用于其他计算机.
这是用户系统中发生的错误:
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) 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) 考虑这个例子:
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) 我有一台Trust GXT-25鼠标,它有4个按钮:左,右,后和下.
我只能左右抓.如何在Delphi XE3中检测剩余的2个以上事件?
基于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 ×10
delphi-xe3 ×10
bass ×1
excel ×1
firemonkey ×1
inno-setup ×1
ogg ×1
pascal ×1
windows-7 ×1