有谁知道一个可以读取多帧图标的类?搜索互联网并未提供任何信息.
我尝试使用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) 当我尝试在链接中打开任何具有双引号("
)的站点时,例如.user.php?name="stackoverflow"
它只是削减"
或有时它重定向到谷歌!?二手代码:
ShellExecute(0, 'open', PChar('open'), PChar(URL), nil, SW_SHOW) ;
Run Code Online (Sandbox Code Playgroud) 如何正确地向前和向后移动字幕时间?字幕时间格式如下所示:
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) 我的问题是,如果一个线程快速将消息发布到主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) 我很难接受一些非常直截了当的事情.我有一个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.
但它不是空的.它是一个空字符串,应该可以正常工作.我发誓我过去曾多次通过空串.
为什么我会收到此错误,我应该怎么做才能解决它?
额外细节:
SQLOLEDB.1
nvarchar(MAX) NOT NULL
继续上一个问题 我希望即使主线程被阻止也能显示一些活动指示.(基于这篇文章).
基于附加代码的问题:
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) 我试图转换GIF图像(Ajax等待):
将与TAnimate控件(win32动画控件)一起使用的AVI.
我尝试了一些工具,但问题是输出AVI不适合动画控件或不透明.
笔记:
你知道任何可以帮助我进行转换的工具吗?
编辑:
我已经尝试使用ImageMagic与ffmpeg的描述在这里.但我似乎无法设置ffmpeg
编码msrle
.
这里(或多或少)是一个相关的问题: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) 我想知道如何从整数转换为浮点值,而不分配给中间变量.有问题的代码如下所示:
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)
但是读得很差,并且会诱使未来的维护者去除错误中的乘法.
有没有人知道在没有中间变量的情况下做到这一点的干净方法,以及让未来读者明白代码的方式?
{$R *.DFM}
接口和实现部分中有指令的区别?
如果我{$R *.DFM}
在界面怎么办?
interface
{$R *.DFM}
Run Code Online (Sandbox Code Playgroud)
如果我有{$R *.DFM}
实施怎么办?
implementation
{$R *.DFM}
Run Code Online (Sandbox Code Playgroud)