小编kob*_*bik的帖子

加载MultiFrame图标

有谁知道一个可以读取多帧图标的类?搜索互联网并未提供任何信息.

我尝试使用Alan Peter Stotz的IconTools 2.0,它将图标正确加载到列表中,但8位和4位图标的位深度返回0.正确返回32位和24位图标帧的bitdepth,然而.

查看时图标本身看起来正确...只是所提到的位的bitdepth错误.

编辑#2 在这里评论TLama的评论是一些未经测试的代码:

function NumberOfIcons ( AFileName: string ): integer;
var
  iNumberOfIcons: Integer;
begin

  iNumberOfIcons := ExtractIcon ( hInstance, PChar ( AFilename ), UINT ( -1 ) );
  Result := iNumberOfIcons;

end;

function ExtractAnIcon ( AFilename: string; AIndex: integer ): TBitmap;
var
  icoHandle: HIcon;
  iBitmap: TBitmap;
  iIcon: TIcon;
  iNumberOfIcons, i: Integer;
begin

  Result := nil;

  iBitmap := TBitMap.Create;

  iIcon := TIcon.Create;
  try

    // Get the number of Icons
    iNumberOfIcons := ExtractIcon ( hInstance, PChar ( …
Run Code Online (Sandbox Code Playgroud)

delphi icons delphi-2010

6
推荐指数
1
解决办法
1432
查看次数

在默认浏览器中打开网页,在网址内加双引号(")

当我尝试在链接中打开任何具有双引号(")的站点时,例如.user.php?name="stackoverflow"它只是削减"或有时它重定向到谷歌!?二手代码:

ShellExecute(0, 'open', PChar('open'), PChar(URL), nil, SW_SHOW) ;
Run Code Online (Sandbox Code Playgroud)

browser delphi winapi delphi-7

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

如何在SRT(SubRip)文件中纠正/移动字幕时间?

如何正确地向前和向后移动字幕时间?字幕时间格式如下所示: 00:00:52,656 --> 00:00:56,326

如果字幕和音频不同步,例如,在语音/音频之前显示字幕,00:00:52,656 --> 00:00:56,326则应校正字幕行的所有时间(时间格式:).

因此,如果所有字幕行的时间必须改变/移位2秒.然后,这次是字幕行:00:00:52,656 --> 00:00:56,326应该改为: 00:00:54,656 --> 00:00:58,326.

这指的是字幕文件中的所有时间,而不仅仅是一行文本/一次.


SubRip(.srt)文件的示例:

1
00:00:52,656 --> 00:00:56,326
Kanalska Zona: Panama

2
00:00:56,335 --> 00:00:59,755
Francuzi su pokušali da izgrade
kanal pre Amerikanaca.
Run Code Online (Sandbox Code Playgroud)

delphi shift subtitle

6
推荐指数
1
解决办法
3847
查看次数

线程发布到主UI线程的消息被阻止/删除

我的问题是,如果一个线程快速将消息发布到主UI线程,并且如果我在那时更新UI,有时主消息队列会被卡住(我没有更好的词来描述这个).

这是简化的repro代码:

const
  TH_MESSAGE = WM_USER + 1; // Thread message
  TH_PARAM_ACTION = 1;
  TH_PARAM_FINISH = 2;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    ThreadHandle: Integer;
    procedure ThreadMessage(var Message: TMessage); message TH_MESSAGE;
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function ThreadProc(Parameter: Pointer): Integer;
var
  ReceiverWnd: HWND;
  I: Integer;
  Counter: Integer;
begin
  Result := 0;
  ReceiverWnd := Form1.Handle;
  Counter := 100000;
  for I := 1 to Counter do
  begin
    PostMessage(ReceiverWnd, TH_MESSAGE, TH_PARAM_ACTION, I); …
Run Code Online (Sandbox Code Playgroud)

delphi user-interface multithreading delphi-7

6
推荐指数
1
解决办法
497
查看次数

无法将空字符串传递到非空数据库字段

我很难接受一些非常直截了当的事情.我有一个SQL Server数据库,我正在尝试使用空字符串更新不可为空的varchar或nvarchar字段.我知道这是可能的,因为空字符串''一样的东西NULL.但是,使用它TADOQuery,它不允许我这样做.

我正在尝试更新现有记录,如下所示:

ADOQuery1.Edit;
ADOQuery1['NonNullFieldName']:= '';
//or
ADOQuery1.FieldByName('NonNullFieldName').AsString:= '';
ADOQuery1.Post; //<-- Exception raised while posting
Run Code Online (Sandbox Code Playgroud)

如果字符串中有任何内容,即使只是一个空格,它也会像预期的那样保存得很好.但是,如果它是一个空字符串,它会失败:

不可为空的列无法更新为Null.

但它不是空的.它是一个空字符串,应该可以正常工作.我发誓我过去曾多次通过空串.

为什么我会收到此错误,我应该怎么做才能解决它?


额外细节:

  • 数据库:Microsoft SQL Server 2014 Express
  • 语言:Delphi 10 Seattle Update 1
  • 数据库驱动: SQLOLEDB.1
  • 正在更新的字段: nvarchar(MAX) NOT NULL

sql-server delphi ado sql-server-2014 delphi-10-seattle

6
推荐指数
1
解决办法
1033
查看次数

主线程被阻止时显示活动指示符(继续)

继续上一个问题 我希望即使主线程被阻止也能显示一些活动指示.(基于这篇文章).

基于附加代码的问题:

  • 使用Synchronize(PaintTargetWindow);不会绘制窗口
  • 我有时会收到一个错误: Canvas does not allow drawing.在行中:{FBitmap.}StretchDraw(Rect(Left, ImageRect.Top, Right, ImageRect.Bottom), FfgPattern)

这是我用来创建指标线程的代码:

unit AniThread;

interface

uses Windows, Classes, Graphics, Controls, Math;

const
  ANI_GRAD_FG_COLOR_BAGIN = $00CDFFCD;
  ANI_GRAD_FG_COLOR_END   = $0024B105;
  ANI_GRAD_BK_COLOR_BAGIN = $00F5F5F5;
  ANI_GRAD_BK_COLOR_END   = $00BDBDBD;

type
  TAnimationThread = class(TThread)
  private
    FWnd: HWND;
    FPaintRect: TRect;
    FInterval: Integer;
    FfgPattern, FbkPattern: TBitmap;
    FBitmap: TBitmap;
    FImageRect: TRect;
    procedure UpdatePattern(Pattern: TBitmap; ColorBegin, ColorEnd: TColor);
    function CreatePatternBitmap(AColorBegin, AColorEnd: TColor): TBitmap;
    procedure PaintTargetWindow;
  protected
    procedure Execute; …
Run Code Online (Sandbox Code Playgroud)

delphi multithreading thread-safety delphi-5

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

使用Windows Animate Control将GIF转换为AVI

我试图转换GIF图像(Ajax等待):

等待GIF ......

将与TAnimate控件(win32动画控件)一起使用的AVI.

我尝试了一些工具,但问题是输出AVI不适合动画控件或不透明.

笔记:

  • 我不使用Windows XP主题清单(D5).即使我的节目不是主题,Common Avi也是透明的.
  • 使用GIF本身来显示动画不是一种选择.

你知道任何可以帮助我进行转换的工具吗?

编辑:

我已经尝试使用ImageMagicffmpeg的描述在这里.但我似乎无法设置ffmpeg编码msrle.

delphi winapi avi graphic

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

带有alpha混合图标的图像列表失去透明度

这里(或多或少)是一个相关的问题:Delphi - 在运行时使用图标填充图像列表'破坏'透明度.

我测试了@TOndrej的答案.但似乎我需要启用视觉样式(XP Manifest)才能工作(将使用版本6.0的Windows常用控件 - 我现在不想要).我通过ExtractIconEx和运行时添加图标ImageList_AddIcon.

显然,设置ImageList.Handle使用系统图像列表手柄,并不需要XP清单.因此,当我使用系统图像列表显示文件列表(带有a TListView)时,即使是我在D3中写回的旧程序也正确显示alpha混合图标.

我在徘徊系统图像列表有什么特别之处以及它是如何创建的,所以它在所有情况下都支持alpha混合?我无法弄明白.以下是一些示例代码:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, ImgList, StdCtrls, ShellAPI, ExtCtrls, Commctrl;

type
  TForm1 = class(TForm)
    ImageList1: TImageList;
    PopupMenu1: TPopupMenu;
    MenuItem1: TMenuItem;
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    FileName: string;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
// {$R WindowsXP.res} …
Run Code Online (Sandbox Code Playgroud)

delphi imagelist delphi-7 delphi-5 common-controls

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

如何在不分配变量的情况下将整数转换为浮点值?

我想知道如何从整数转换为浮点值,而不分配给中间变量.有问题的代码如下所示:

Format('Theoretical peak scaling %6.2f', [ThreadCount])
Run Code Online (Sandbox Code Playgroud)

这显然在运行时失败,因为它ThreadCount是一个整数.

我试过了明显的事

Format('Theoretical peak scaling %6.2f', [Double(ThreadCount)])
Run Code Online (Sandbox Code Playgroud)

并且编译器拒绝使用

E2089 Invalid typecast
Run Code Online (Sandbox Code Playgroud)

我知道我可以写

Format('Theoretical peak scaling %6.2f', [ThreadCount*1.0])
Run Code Online (Sandbox Code Playgroud)

但是读得很差,并且会诱使未来的维护者去除错误中的乘法.

有没有人知道在没有中间变量的情况下做到这一点的干净方法,以及让未来读者明白代码的方式?

delphi

5
推荐指数
3
解决办法
2143
查看次数

具有{$ R*.DFM}指令的接口和实现部分的差异

{$R *.DFM}接口和实现部分中有指令的区别?

如果我{$R *.DFM}在界面怎么办?

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

如果我有{$R *.DFM}实施怎么办?

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

delphi

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