高手请进,FastReport的一个难题,300大元奉送!(300分)

  • 主题发起人 主题发起人 geng7758
  • 开始时间 开始时间
G

geng7758

Unregistered / Unconfirmed
GUEST, unregistred user!
各位兄弟:
我想在FastReport预览报表时,响应鼠标的动作,突出显示选定的当前报表区域,
就是某一行或几行,因为我做的报表比较宽,一屏幕不够宽,客户说左右拖来拖去,
看不清楚哪行是那行。
其实就类似于在FastReport里查找一个字符串,查到后突出显示那样,我找过源代码,
好像看不太懂。
 
那就进行自定义打印。
所有的用程序来写一个打印预览界面
 
to humanc2d4:
我用了frPreview,如果全部自己写程序来预览的话,工作量实在太大了,
况且难以实现所见即所得,自己来分组汇总,程序也较麻烦。
 
to geng7758:
不会麻烦!
我的死客户,要求:
1。自定义窗口(界面上的所有空件)
2。自定义报表
3。自定义网格(DBGrid的显示)
我都做出来了,不会很烦,还可以!!
大概思路:([red]弄一点代码给你,可能有一点启示[/red])
if (Components is TLabel) then
begin
ls_Insert := 'INSERT INTO T_PUB_FORM VALUES (';
ls_Insert := ls_Insert + #39 + ComboBox1.Text + #39 + ',';//著录表名称
ls_Insert := ls_Insert + #39 + '0' + #39 + ',';//是否默认
ls_Insert := ls_Insert + #39 + (Components as TLabel).Name + #39 + ',';//控件名称
if (Components as TLabel).Visible then
ls_Insert := ls_Insert + #39 + '1' + #39 + ','//是否可见(可见--1,不可见--0)
else
ls_Insert := ls_Insert + #39 + '0' + #39 + ',';
ls_Insert := ls_Insert + #39 + (Components as TLabel).Font.Name + #39 + ',';//字体名称
ls_Insert := ls_Insert + #39 + IntToStr((Components as TLabel).Font.Size) + #39 + ',';//字体大小
//判断字体的效果
if fsBold in ((Components as TLabel).Font.Style) then
ls_Font_Style := '粗体'
else
if fsItalic in ((Components as TLabel).Font.Style) then
ls_Font_Style := '斜体'
else
if fsUnderline in ((Components as TLabel).Font.Style) then
ls_Font_Style := '下划线'
else
if fsStrikeOut in ((Components as TLabel).Font.Style) then
ls_Font_Style := '删除线'
else
ls_Font_Style := '常规';
ls_Insert := ls_Insert + #39 + ls_Font_Style + #39 + ',';//字体效果
ls_Insert := ls_Insert + #39 + IntToStr((Components as TLabel).Font.Color) + #39 + ',';//字体颜色
ls_Insert := ls_Insert + #39 + IntToStr((Components as TLabel).Color) + #39 + ',';//控件颜色
ls_Insert := ls_Insert + #39 + (Components as TLabel).Caption + #39 + ',';//控件内容
ls_Insert := ls_Insert + #39 + #39 + ',';//数据源(用的是Hint属性)
ls_Insert := ls_Insert + #39 + #39 + ',';//TAB_ORDER;
ls_Insert := ls_Insert + #39 + IntToStr((Components as TLabel).Width) + #39 + ',';//控件长度
ls_Insert := ls_Insert + #39 + IntToStr((Components as TLabel).Height) + #39 + ',';//控件宽度
ls_Insert := ls_Insert + #39 + IntToStr((Components as TLabel).Left) + #39 + ',';//控件x
ls_Insert := ls_Insert + #39 + IntToStr((Components as TLabel).Top) + #39 + ')';//控件y
if ls_Insert <> '' then
begin
With Pub_Connection.ADOQ_Maindo
begin
Close;
SQL.Clear;
SQL.ADD(ls_Insert);
ExecSQL;
end;
end;
end;
[blue]试一试!![/blue]
 
to geng7758:
实在需要帮助
e-mail:fu_long_tian@163.com
 
to knmfkr:
Thanks!
这样是很灵活了,不过自定义窗口还可以,自定义报表估计很麻烦吧,您的代码一定要写不少啊~
 
FR自定义报表。。我也做过,也不是很难的,就是很烦琐,要写的代码挺多呀[:D]
 
自定义报表可以来这里看看.
www.dlling.com
下载Framer,看说明书的第五章《自由式报表》
 
to txm:
可否再多点提示?或给个例子?谢谢!
to driver:
Thanks!
不过我现在项目急只能用FastReport,
 
你这个可不是简单的查找问题!
你看一下fr的查找就知道了!查找到了以后你最小化、最大化一下窗口就没有选种的区域了!
其实fr也是很简单的实现了这个问题!把当前的区域屏幕画黑!并不是通常意义上的“选中”
我以前改过fr的查找、替换遍历fr上的控件的!当时是向whf请教的!
向你这样选种某段区域、找到该区域的frmemo、然后再处理,你问问他可不可以!
 
To:knmfkr
我想自定議報表程序,但不知從何下手.能否指教一二!
kycheung@yeah.net
 
预览之前做一个窗口,加一个如DBGrid之类的列表,让用户浏览,
要打印了再点一下打印按钮,(加一个打印按钮)
这样实现起来也不复杂!又直观!
 
Thanks vmao,lxiy!
还有更好的方案吗?
 
如果仅仅是报表太宽分不清行的话我建议你做成格形的报表
把frmemo的四周框线加上!然后对齐位置不就分清行了吗?
 
to vmao:
框线已有了,但客户说还是看得眼花:-<
 
要不在颜色或者其它方面想想办法!比如格行变颜色或增加单列的宽度或者给一点
其它视觉上的差异,再和客户商量一下找个折中的办法!---我不建议你改控件!
或换其它的!、一个成熟的控件不是那么容易改出来的!
 
留下你的E_M,我发给你一个例子
 
to txm:
Thank you very much!
hradish@163.com
 
后退
顶部