小编Bil*_*ill的帖子

如何在Delphi 2010中更改TWICImage的pixelformat

我有一个TWICImage,IWicBitmap和一个IWicBitmapSource,可以很好地显示所有支持的图形文件格式,允许旋转,水平翻转,垂直翻转,缩放和剪切.所有这些似乎都运行良好,我可以得到WicImages像素格式,但我无法弄清楚如何更改或设置TWICImage的pixelformat.

我创建了一个对话框来返回WICPixelFormatGUID以用作转换的pixelformat.

任何人都可以共享一些代码,演示如何使用IWICColorTransform或其他Wincodec方法更改WicImage的pixelformat?

法案

它现在到2011年中期......所以对于那些可能想知道的人我试过这个并且它似乎有用(它使用Developer Express的TcxImage,但我怀疑TImage也能正常工作):

procedure TForm1.N16bitBGR1Click( Sender: TObject );
var
  wicImg: TWICImage;
  wicBitmap: IWICBitmap;
  iBmpSource: IWICBitmapSource;
  puiWidth, puiHeight: UINT;
  iConverter: IWICFormatConverter;
begin
  if cxImage1.Picture.Graphic is TWICImage then
  begin
    Screen.Cursor := crHourGlass;
    try
      wicImg := TWICImage( cxImage1.Picture.Graphic );
      wicImg.ImagingFactory.CreateFormatConverter( iConverter );
      iBmpSource := wicImg.Handle as IWICBitmapSource;
      iBmpSource.GetSize( puiWidth, puiHeight );
      iConverter.Initialize( iBmpSource, GUID_WICPixelFormat16bppBGR555, WICBitmapDitherTypeNone, nil, 0,
        WICBitmapPaletteTypeMedianCut );
      wicImg.ImagingFactory.CreateBitmapFromSourceRect( iConverter, 0, 0, puiWidth, puiHeight, wicBitmap );
      if Assigned( wicBitmap ) then
        wicImg.Handle := wicBitmap;
      cxImage1.Repaint;
      cxImage1.Update;
      cxImage1.Invalidate;
      dxStatusBar1.Panels[ 0 …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-2010

26
推荐指数
1
解决办法
1859
查看次数

如何设置FMX.Panel颜色?

FMX控件没有颜色属性.什么是FMX相当于VCL.TColor?

FMX.Panel1.Color:= clBlack

delphi firemonkey delphi-xe4

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

什么是.vrc文件,如何生成,是否可以使用IDE将其删除?

我正在尝试安装一个名为JamShellBrowser的商业组件,但它不会安装.

我联系了开发人员,但同时我想知道:

  1. 什么是vrc文件?
  2. 它是如何产生的?
  3. 可以使用Delphi XE4 IDE进行控制或修改吗?

我检查了IDE的帮助,但是我找不到任何关于vrc文件的内容,我搜索了Delphi vrc并没有找到任何可以帮助我的东西.

错误消息是:

检查项目依赖性......

编译JamShellDelphiXE4.dproj(Release,Win32)

"JamShellDelphiXE4.vrc"的brcc32命令行

c:\ program files(x86)\ embarcadero\rad studio\11.0\bin\cgrc.exe -c65001 JamShellDelphiXE4.vrc -foJamShellDelphiXE4.res

[BRCC32错误] JamShellDelphiXE4.vrc(2):找不到文件:JamShellDelphiXE2_Icon.ico

失败

经过时间:00:00:00.1

我在组件文件夹中搜索了一个ico文件,但没有...因此消息,但即使我MAINICON ICON "JamShellDelphiXE2_Icon.ico"从vrc文件中删除该行甚至删除vrc文件,它在我尝试安装时自动生成.

几个月前我从Delphi 2010转移到了XE4并注意到了新的vrc文件,但我不知道它是什么或如何处理这些文件.

delphi delphi-xe4

11
推荐指数
3
解决办法
1万
查看次数

确定exe文件是否已使用UPX压缩的方法

有没有一种方法来确定是否已使用UPX压缩了exe文件?

确定exe文件是否已被压缩的函数非常好,除了我发现代码有问题.如果调用函数IsUPXCompressed,则尝试运行upx,upx无法保存它修改的文件.在函数中没有正确共享权限的东西.我已经测试了几个小时.如果我不调用该方法,那么UPX可以毫无问题地编写文件.你调用它然后尝试运行UPX它不会保存文件.尝试写入文件时,UPX报告IOException权限被拒绝错误.

任何人都可以在代码中发现可能导致此问题的错误吗?

谢谢


确定exe文件是否已被压缩的函数非常好,除了我发现代码有问题.如果调用函数IsUPXCompressed,则尝试运行upx,upx无法保存它修改的文件.在函数中没有正确共享权限的东西.我已经测试了几个小时.如果我不调用该方法,那么UPX可以毫无问题地编写文件.你调用它然后尝试运行UPX它不会保存文件.尝试写入文件时,UPX报告IOException权限被拒绝错误.

任何人都可以在代码中发现可能导致此问题的错误吗?

谢谢

compression delphi exe upx

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

安装> 4 GB时获取总内存和可用内存

在Windows 7上使用Delphi 2010安装超过4 GB的内存时,有没有办法获得总内存和可用内存?

此代码的返回值不超过3.99 GB:

var
  Memory: TMemoryStatus;

Memory.dwLength := SizeOf( Memory );
GlobalMemoryStatus( Memory );
dwTotalPhys1.Caption := 'Total memory: ' + IntToStr( Memory.dwTotalPhys ) + ' Bytes ' + '(' + FormatByteSize
( Memory.dwTotalPhys ) + ')';
dwAvailPhys1.Caption := 'Available memory: ' + IntToStr( Memory.dwAvailPhys ) + ' Bytes ' + FormatByteSize
( Memory.dwAvailPhys ) + ')';
Run Code Online (Sandbox Code Playgroud)

delphi

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

删除和插入行时如何更新SynMemo撤消/重做列表

如果删除一行然后在TSynMemo中插入一个新行,如何更新UndoList和RedoList以便可以使用SynMemo.Undo撤消更改?

SynMemo1.BeginUpdate;
iLineIndex := SynMemo1.Lines.IndexOf( SynMemo1.LineText );
SynMemo1.Lines.Delete( iLineIndex );
iStartTag := SourceStyleComboBox1.CurText;
iEndTag := SourceStyleComboBox1.CurText;
System.Insert( '/', iEndTag, 2 );
iHTML := iStartTag + iElement + iEndTag;  
SynMemo1.Lines.Insert( iLineIndex, iHTML );
SynMemo1.EndUpdate;
Run Code Online (Sandbox Code Playgroud)

编辑 我试过这个,但撤消和重做不能正常工作......我的意思是这是在撤消后,线路没有恢复到行动之前的状态.

StartOfBlock.Line := SynMemo1.CaretY;
StartOfBlock.Char := 0;
EndOfBlock.Line := SynMemo1.CaretY;
EndOfBlock.Char := Length( iHTML );
SynMemo1.UndoList.BeginBlock;
SynMemo1.UndoList.AddChange(crInsert, StartOfBlock, EndOfBlock, iHTML, smNormal);
SynMemo1.UndoList.EndBlock;
SynMemo1.RedoList.BeginBlock;
SynMemo1.RedoList.AddChange(crInsert, StartOfBlock, EndOfBlock, iHTML, smNormal);
SynMemo1.RedoList.EndBlock;
Run Code Online (Sandbox Code Playgroud)

我找不到有关设置StartOfBlock和EdifOfBlock参数的任何指导.应该组合两个"动作",以便"组合"动作只有一个撤消和重做 - "插入和删除"选项eoGroupUndo = True.

delphi synedit

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

加载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
查看次数

如何使用TFileOpenDialog预览图像

有谁知道如何在TFileOpenDialog预览中显示图像?

我正在使用ImageEn显示图像信息并向对话框添加其他文件类型支持.例如......我可以加载有关jp2,j2k和其他不支持的文件类型的图像信息,但是如何使用ImageEn加载不支持的图像类型以进行预览.

我在对话框中显示图像信息,但是我无法找到有关如何将不支持的图像加载到PreviewHandler中的任何信息.我可以使用ImageEnIO来获取文件信息以及图像的位图.

TFileOpenDialog

TFileOpenDialog是否使用预览处理程序来显示图像或是否需要其他方式?

对不起,我没有显示图像的代码,但我不知道如何实现它.

Rodrigo评论了Delphi VCL应用程序中的托管预览处理程序.Windows资源管理器不使用预览处理程序来预览图像...所以我假设TFileOpenDialog使用与Windows资源管理器相同的API,但我甚至不确定这一点.http://theroadtodelphi.wordpress.com/2013/05/24/hosting-preview-handlers-in-delphi-vcl-applications/

如果这个问题过于宽泛而无法在此接受,我将删除该问题.

delphi delphi-2010

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

如何使用VCL.Styles获取表单背景颜色

即使使用vcl样式,某些组件也会使用Color属性设置绘制其颜色.因此,当使用Metro深色样式(接近黑色)并将组件颜色设置为clWindow时,组件颜色与样式不匹配.有没有办法在使用vcl.style时获取表单背景颜色,以便可以将组件的颜色属性设置为匹配表单样式的背景颜色?

可以通过在样式设计器中加载样式来获取颜色,但我想在运行时获取颜色值.

delphi vcl-styles delphi-xe4

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

可以在Synchronize中使用一个简单的循环吗?

procedure TGridThread.Execute;
var
  i: integer;
  iIEBitmap: TIEBitmap;
  iWidth: integer;
  iHeight: integer;
  iImageCount: integer;
  iArrayOfBitmaps: array of TBitmap;
begin
  inherited;
  { Free the thread onTerminate }
  FreeOnTerminate := True;
  if not Terminated then
    begin    
      if not Terminated then
      begin
        Synchronize(
         procedure
           begin
              iIEBitmap := TIEBitmap.Create(Form1.ImageEnView1.IEBitmap);
              iWidth := Form1.ImageEnMView1.ImageOriginalWidth[0];
              iHeight := (Form1.ImageEnMView1.ImageOriginalHeight[0] + iSpaceBetweenImages) *
              Form1.ImageEnMView1.ImageCount;
              iImageCount := Form1.ImageEnMView1.ImageCount;
            end);

           SetLength(iArrayOfBitmaps, iImageCount);

           Synchronize(
            procedure
            begin
              for i := 0 to iImageCount - 1 do // [DCC Error] Unit1.pas(334): E1019 For loop control …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-2010

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