小编Zig*_*giZ的帖子

检测IE代理设置并使用TIdHTTP

如何设置TIdHTTP以使用IE代理配置?
它应该与XP/Vista/Win7兼容且可靠.

delphi proxy internet-explorer indy delphi-7

14
推荐指数
2
解决办法
1万
查看次数

带有自动显示/隐藏滚动条的TMemo

我需要简单的TMemo,它不会在不需要时显示滚动条(即文本不足),但是当它们存在时会显示.类似于ScrollBars = ssAuto或类似于TRichEdit HideScrollBars.

我试图将TMemo子类化并ES_DISABLENOSCROLL在CreateParams中使用,TRichEdit但它不起作用.

编辑:这应该在WordWrap启用或不启用的情况下工作.

delphi delphi-7

13
推荐指数
1
解决办法
8514
查看次数

FileExists和修改日期的问题

在我的服务器上有几个文件的修改日期31/DEC/1979(不要问我原因).所以FileExists返回false.

Sysutils.FileExists 看起来像这样:

function FileAge(const FileName: string): Integer;
var
  Handle: THandle;
  FindData: TWin32FindData;
  LocalFileTime: TFileTime;
begin
  Handle := FindFirstFile(PChar(FileName), FindData);
  if Handle <> INVALID_HANDLE_VALUE then
  begin
    Windows.FindClose(Handle);
    if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0 then
    begin
      FileTimeToLocalFileTime(FindData.ftLastWriteTime, LocalFileTime);
      if FileTimeToDosDateTime(LocalFileTime, LongRec(Result).Hi,
        LongRec(Result).Lo) then Exit;
    end;
  end;
  Result := -1;
end;

function FileExists(const FileName: string): Boolean;
begin
  Result := FileAge(FileName) <> -1;
end;
Run Code Online (Sandbox Code Playgroud)

我的问题是,为什么功能首先取决于FileAge?以下行不够吗?:

if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0 then
  // Yes the file exists!
Run Code Online (Sandbox Code Playgroud)

甚至基于文件属性:

function …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-7

12
推荐指数
1
解决办法
2665
查看次数

拖放时移动图像

我在TPanel上有一个TImage,还有一个其他(空)TPanel.我想使用拖放将图像从第一个面板拖动到第二个面板.

我实际上想要看到图像从一个面板移动到另一个面板(半透明).

我想我应该使用,TDragObject.GetDragImages但我无法弄清楚如何构建整个魔法.

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Image1.ControlStyle := Image1.ControlStyle + [csDisplayDragImage]; // ???
  TImage(Sender).BeginDrag(False);
end;

procedure TForm1.Image1StartDrag(Sender: TObject; var DragObject: TDragObject);
begin
  // ???
end;

procedure TForm1.Panel1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  if (Source is TImage) then
    Accept := TImage(Source).Parent <> Sender;
end;

procedure TForm1.Panel1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
  if (Source is TImage) then
  begin
    TImage(Source).Parent := TPanel(Sender);
    TImage(Source).Align := alClient;
  end; …
Run Code Online (Sandbox Code Playgroud)

delphi drag-and-drop delphi-7

10
推荐指数
1
解决办法
7970
查看次数

继承类覆盖虚方法依赖项

我有这两个班:

type
  TMyBaseClass = class
  protected
    FAllowDoSomething: Boolean; // initialized to False
    procedure DoSomething; virtual;
  end;

  TMyChildClass = class(TMyBaseClass)
  protected
    procedure DoSomething; override;
  end;

implementation

procedure TMyBaseClass.DoSomething;
begin
  if not FAllowDoSomething then Exit; // Abort;
  ShowMessage('TMyBaseClass: FAllowDoSomething is False. You wont see me!');
end;

procedure TMyChildClass.DoSomething;
begin
  inherited; // Must inherit
  // if not FAllowDoSomething then Exit; { I don't want to check here again }
  ShowMessage('TMyChildClass: FAllowDoSomething is False but still I can see this message!');
end;

procedure TForm1.Button1Click(Sender: …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-7

10
推荐指数
1
解决办法
289
查看次数

客户端 - 服务器数据库应用程序:如何通知客户端数据已更改?

是否可以知道数据库中某些表的内容何时以及是否已更改?我的SQL Server如何通知客户端应用程序数据被另一个用户更改?如何使用dbGo实现查询通知?

我的客户是否需要轮询数据库,或者是否有回调机制?

我的客户端是Delphi应用程序TADODataSet,我的服务器是SQL Server 2005/2008,为多个客户端提供服务.

sql-server delphi client-server

9
推荐指数
1
解决办法
2672
查看次数

如何使用Owner创建一个TStringList后代,它将自动释放TStringList?

我希望创建类似"TOwnedStringList"(类名是小说)的东西,我可以构造为:

sl := TOwnedStringList.Create(Self);
sl.Sorted := True;
sl.Duplicates := dupIgnore; 
sl.Add(...);
// etc...
Run Code Online (Sandbox Code Playgroud)

哪里Self可以是一个Form(例如),以便所有者将自动释放StringList.我希望能够避免给sl.Free自己打电话.

这可能吗?

delphi delphi-7

9
推荐指数
1
解决办法
563
查看次数

如何创建一个Child进程取决于它的父进程?

我的应用程序(main.exe)正在执行子进程(child.exe)使用ShellExecuteEx.

但是当我关闭或杀死(通过Process-Explorer)main.exe时,子进程仍然处于活动状态.

main.exe终止child.exe终止时,如何优雅地处理它?

delphi delphi-7

8
推荐指数
1
解决办法
2950
查看次数

如何同步父/子进程执行?

我想执行子进程并同步它(可能与Mutex),而不等待子进程终止:

家长:

program Project1;
{$APPTYPE CONSOLE}
uses
  Windows, ShellApi, SysUtils, Dialogs;

procedure ShellExecEx(Wnd: HWND; const AExeFilename, AParams: string);
const
  SEE_MASK_NOZONECHECKS = $00800000;
  SEE_MASK_WAITFORINPUTIDLE = $02000000;
  SEE_MASK_NOASYNC = $00000100;
var
  Info: TShellExecuteInfo;
begin
  FillChar(Info, SizeOf(Info), 0);
  Info.Wnd := Wnd;
  Info.cbSize := SizeOf(Info);
  Info.fMask := SEE_MASK_FLAG_NO_UI or SEE_MASK_NOZONECHECKS or
    SEE_MASK_NOASYNC
    //or SEE_MASK_WAITFORINPUTIDLE (works only with UI app ???)
    //or SEE_MASK_NO_CONSOLE
    //or SEE_MASK_NOCLOSEPROCESS
    ;
  Info.lpVerb := '';
  Info.lpFile := PChar(AExeFilename);
  Info.lpParameters := PChar(AParams);
  Info.lpDirectory := PChar(ExtractFilePath(AExeFilename));
  Info.nShow := SW_SHOWNORMAL;
  if not ShellExecuteEx(@Info) then …
Run Code Online (Sandbox Code Playgroud)

delphi winapi delphi-7

7
推荐指数
1
解决办法
1222
查看次数

如何为多用户应用程序实现简单的锁定机制?

我真的不想在这里重新发明,所以我要求在多用户数据库应用程序中实现简单(行)锁机制的想法.

假设我有一个表Products,当然它有一个ID(PK),还有一个rowversion列(到目前为止还没有使用),我想只允许一个用户编辑一个特定的行.

当此用户正在编辑记录时(在"签入"之后),其他用户只能查看此记录(只读),但不能修改或删除它.当用户完成并保存记录("结账")时,该记录将再次可供其他用户编辑/删除.

我有一些想法(例如添加"状态"列,或者可能创建一个"锁定"表),但是如果"锁定用户"长时间保持记录(也就是说他去了周末,他的电脑在编辑模式下打开).如果程序在客户端机器上崩溃/系统断电,如何解锁记录......

我想知道是否有一个好的和相对简单的模式(可能包括SQL-Server功能)?

顺便说一句,我的客户端应用程序是Delphi/ADO(不是它非常相关).

sql-server sql-server-2005 multi-user

7
推荐指数
1
解决办法
3993
查看次数