我之前使用过TJcl7zCompressArchive/TJcl7zDecompressArchive进行存档操作.
现在我想直接压缩/解压缩内存流而无需文件操作.但是,当看到在网上搜索JCL演示的示例时,我找不到使用该lib的方法.我确实找到了其他工具,但压缩比似乎不如7zip.
任何人都可以提供一些指示或示例代码,说明如何实现这一目标 非常感谢!
我使用FastReport,我需要预览/打印超过1000行的网格,我有一些性能问题.通常我使用TfrxCrossObject来准备我的网格,因为最终用户可能会更改网格显示(使用的列,列的名称,大小),所以我需要有一个动态打印.我测试了一个简单的网格(16列x2000行),它需要超过10秒才能显示第一个预览页面.有什么想提高表现吗?
编辑: 正如在一些答案中所说,问题是:如何在FastReport中创建'dynamicaly'网格(在屏幕上具有相同的列名称和大小),而不使用TFrxCrossObject,这似乎不是很有效.我可能会承认所有解决方案,比如使用DataSet或增强TfrxCrossObject.
测试代码:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
frxClass, StdCtrls, Grids, frxCross;
type
TForm1 = class(TForm)
Button1: TButton;
StringGrid1: TStringGrid;
frxCrossObject1: TfrxCrossObject;
frxReport1: TfrxReport;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure frxReport1BeforePrint(c: TfrxReportComponent);
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
var
i, j: Integer;
begin
for i := 1 to 16 do
for j := 1 to 2000 do
StringGrid1.Cells[i - 1, j - 1] := IntToStr(i * j); …Run Code Online (Sandbox Code Playgroud) 通过长按,我的意思是按下按钮/面板并保持一段时间(比如2秒)而不释放或拖动.它在手机和触摸设备中很常见.
我曾尝试使用Gesture,在TabletOptions中检查了PressAndHold并在InteractiveGestureOptions中检查了所有内容,但是长时间按下不会导致OnGesture调用.
我能想到的另一种实现增加一个计时器,在开始的MouseDown,并结束它在任何计时器所触发,的startDrag,的MouseUp或鼠标离开.然而,正如我希望这个行为添加到几个不同的按键和面板组件,我将不得不重写程序的早午餐每个类和各地复制代码为每个组件.
有没有更好的方法来实现这一目标?
编辑:
致NGLN
哇,伟大的工作!结合您对这些滚动效果的回答,VCL几乎可以实现移动操作系统的外观和感觉!
您的代码与常用控件完美配合,但在我的案例中我遇到了2个问题
我有一些自定义按钮,它有一些禁用的HTML标签(标题,标题,页脚)覆盖标签原始表面,使用你的代码,FChild将是其中一个标签,但它不会得到MouseCapture.我添加以下行来克服它:
而不是TControlAccess(FChild).Enabled做FChild:= FChild.Parent;
最后,对于一些更复杂的控件,如TCategoryButtons或TListBox,事件的用户可能需要检查不是针对整个控件而是检查控件中的指定项.所以我认为我们需要保存原来的CursorPos并在定时器触发时触发另一个事件,以便手动确定它是否符合长按条件.如果是或未分配事件,则使用您的默认代码进行确定.
总而言之,我们可以创建一个支持LongPress的表单/面板来托管所有其他控件.这比使用Component by Component实现LongPress功能要容易得多!十分感谢!
编辑2:
致NGLN
再次感谢您的组件版本,这是一种很好的方法,不需要对现有组件进行任何修改,并且可以检测到长按!
为了您的信息,我做了一些修改,以满足自己的需要.
再次感谢您的出色工作.
我正在尝试从Delphi向Microsoft访问数据库写入一些代码.我从TStringGrid获取数据.第一列具有ItemID,第二列具有Quantity.我希望它循环遍历TStringGrid并将每一行保存为我的数据库中的重复行,并在每一列上保存订单ID(每个订单的订单ID保持不变,因此不需要更改).
我跑步时遇到错误
"Project Heatmat.exe引发了一个异常类EVarientInvalidArgError,并显示消息'Invalid Argument'.进程已停止."
我无法弄清楚为什么它会给我这个错误,因为你可能会看到我不是很擅长编码.任何帮助,将不胜感激!
谢谢.
procedure TCreateNewOrder.btnSaveClick(Sender: TObject);
var
intNumber, count : integer;
begin
Count:= 0;
if messagedlg ('Are you sure?', mtWarning, [mbyes, mbno], 0) = mryes then
begin
with HeatmatConnection.HeatmatDatabase do
begin
intNumber:= TBLOrder.RecordCount;
TBLOrder.Append;
TBLOrder['CustomerID']:= CompanyName.ItemIndex+1;
TBLOrder['OrderID']:= intNumber +1;
for count:= 1 to StringGrid1.RowCount-1 do
begin
TBLOrderedItem.Append;
TBLOrderedItem['OrderID']:= intNumber+1;
TBLOrderedItem['ItemID']:= StringGrid1.Cells[1, count];
TBLOrderedItem['Quantity']:= StringGrid1.Cells[2, count];
TBLOrderedItem.Post;
end;
end;
end;
end;
Run Code Online (Sandbox Code Playgroud) 我看到yahoo yql可以在Web服务中获得许多信息,这些信息非常有用.但是,当我在谷歌搜索"Delphi yql"时.没有返回有用的信息.是否有任何帮助和示例如何使用Delphi发送请求并从yql获取结果?非常感谢.
delphi ×5
7zip ×1
database ×1
delphi-2010 ×1
fastreport ×1
grid ×1
mouseevent ×1
ms-access ×1
yql ×1