Delphi的高手请进,请教一个关于窗体创建的问题!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Delphi的高手请进,请教一个关于窗体创建的问题!相关的知识,希望对你有一定的参考价值。

我在一个窗体放了大量的控件并且用了VCLSKIN,因此窗体在第一次SHOW的时候会出现一个从Delphi最原始的风格到所使用的皮肤的渐变的过程,不爽。因此我将窗体的宽高设为0再SHOW再Hide,再还原窗体大小,在SHOW。这个蠢办法是把问题解决了,可各位大侠可有什么更好的方法呢,希望不吝赐教啊!
我已经加入了 加载窗体
可是如何在加载窗体中 实现主窗体的show 而且还悄悄的进行

真没什么好办法可以解决,由于VCLSKIN没有提供源码,不知道它是在那一个事件后开始重画的。以前也没有大量的控件在窗口上,不过你也一说,倒也感觉到VCLSKIN是在窗口画好的情况下再来实现界面的,所以真不好解决。我也想了一个笨法子,不知道能不能达到你想要的效果。
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, SkinCaption, WinSkinStore, WinSkinData, SpTBXControls,
SpTBXItem, TntStdCtrls, StdCtrls, TntMenus, TBXDkPanels, Menus, TB2Item,
TBXSwitcher, TBX, TB2Dock, TB2Toolbar, ComCtrls, ToolWin, ExtCtrls,
Grids, Mask, Buttons;

type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Label1: TLabel;
ListBox1: TListBox;
ComboBox1: TComboBox;
RadioGroup1: TRadioGroup;
SpeedButton1: TSpeedButton;
MaskEdit1: TMaskEdit;
StringGrid1: TStringGrid;
Image1: TImage;
ScrollBox1: TScrollBox;
ControlBar1: TControlBar;
StaticText1: TStaticText;
ColorBox1: TColorBox;
RichEdit1: TRichEdit;
ListView1: TListView;
ToolBar1: TToolBar;
StatusBar1: TStatusBar;
TBXDockablePanel1: TTBXDockablePanel;
TBXToolbar1: TTBXToolbar;
TBXMultiDock1: TTBXMultiDock;
TBXDock1: TTBXDock;
TBXSwitcher1: TTBXSwitcher;
TBPopupMenu1: TTBPopupMenu;
TBXButton1: TTBXButton;
TntGroupBox1: TTntGroupBox;
TntEdit1: TTntEdit;
TntPopupMenu1: TTntPopupMenu;
TntMemo1: TTntMemo;
TntCheckBox1: TTntCheckBox;
TntListBox1: TTntListBox;
SpTBXToolbar1: TSpTBXToolbar;
SpTBXSpeedButton1: TSpTBXSpeedButton;
SpTBXButton1: TSpTBXButton;
SkinData1: TSkinData;
SkinStore1: TSkinStore;
SkinCaption1: TSkinCaption;
procedure FormCreate(Sender: TObject);
procedure SkinData1AfterSkinForm(Sender: TObject; ahwnd: HWND;
aName: String);
private
Private declarations
public
Public declarations
end;

var
Form1: TForm1;

implementation

$R *.dfm

procedure TForm1.FormCreate(Sender: TObject);
begin
form1.AlphaBlend:=true;
form1.AlphaBlendValue:=0;

end;

procedure TForm1.SkinData1AfterSkinForm(Sender: TObject; ahwnd: HWND;
aName: String);
begin
form1.AlphaBlend:=false;
form1.AlphaBlendValue:=255;

end;

end.
参考技术A 君不见众软件打开的时候都喜欢一个欢迎界面?
加它的理由很简单
1.版权
2.美观
3.暗地里把事情忙完了(加载组件,皮肤等初始化参数)
参考技术B 嘿嘿,仔细考虑了下
你这个还是不错的方法
嘿嘿

请教rdlc报表制作!特别是关于如何在reportview中传递参数给rcld报表,然后报表按参数查询,请高手赐教!

请教rdlc报表制作问题!特别是关于如何在reportview中传递参数给rcld报表,然后报表按参数查询显示数据,即如果我在reportview那个页面添加了一个文本框,如何把文本框的内容传递给报表数据源,然后根据这个传递的参数作为查询条件查询数据库,最后把查询结果显示在报表上??请高手赐教!
方法越简单越好,谢谢!

  使用RDLC报表(1) -(4) 收藏
  使用RDLC报表(一)

  1 建立数据源
  启动VS2005新建一个窗体项目,命名为TestProj

  在左边的窗体内选择“添加新数据源”或在菜单上操作“添加新数据源”:

  选择后出现对话窗体,选择“数据库”,进入“下一步”:

  本数据源以SqlServer2000所提供的Northwind数据库为例,因此在数据库内选择驱动程序为SqlServer,具体操作视所用数据库而定(如果连接为Oracle,建议用Oracle所提供的ODP for .NET,地址:http://www.oracle.com/technology/global/cn/software/tech/windows/odpnet/index.html)。

  选择数据源后,指定数据库文件,并进行测试,如果连接不通,请检查你的软件设置。

  进行下一步,至显示出库文件内的表及视图,然后打开表,并选择其中的Employees,选择完成。

  在数据源窗口中显示出所选择表及表内的字段,以备使用。

  同时在资源管理器中,也可以看到新增加的数据文件。

  2 报表浏览器
  在新建的窗体内,放入报表浏览控件:

  此报表浏览控件集成了报表查看及打印预览的功能,可直接输出至打印机,也可直接输出至Excel文件或PDF文件,对于喜欢看Excel表格的客户来说,这个报表控件非常不错。关于此报表的来源及台前幕后的各种说法,请自己查询相关的网站。

  3 建立报表文件
  选中报表浏览器控件后,在控件的右上角会出现一个小三角,点击后,出现一个菜单,选择“设计新报表”或在解决方案资源管理器中添加一个新的报表文件:

  双击“报表项”内的“表”,则设计空白表内生成一个表格,我们可以在表格内添加数据项。

  此报表的设计方式类似于MS以前的VB下报表设计环境。在报表设计器中,我将一份报表分为五个部分,从上至下为:报表标题区、列标题区、数据显示区、合计及页脚。如果将报表的设计形式显示出页眉及页脚,报表的形式会看得更清楚些:

  选择页眉及页脚:

  显示结果:

  现在开始设计报表:

  在“页眉”区内放入一个文本框,将内容更改为“测试报表”,居中,字体放大加粗:

  从数据源窗口中选择合适的列,用鼠标拖到报表内的“详细信息”表格上,数据会自动填入:

  将设计的报表保存后,返回报表浏览窗口,并为报表浏览器选择我们设计的报表:

  选中报表文件后,菜单也有所改变:

  再为此报表文件指定数据源,选择数据源:

  确定,保存文件并运行测试文件。

  4 预览
  报表生成后预览如下:

  是不是很简单?我们也可以对这个简单的报表进行美化,当然,我加上美化的一些功能后,可能效果更差,但此处只是为了演示用法。

  Ø 为数据加表格。

  在报表设计器中,选择需要加表格框的区域

  然后在工具栏中选择边框工具

  加什么样的框线根据需要,此处我选择“所有框线”。

  看上去比原来的灰线能稍黑一些,在预览时就能看出来了。

  Ø 加打印时间显示

  加入一个显示打印时间的文本框,在上面按右键,选属性:

  在“文件框属性”内,选择“值”后面的表达式生成:

  在表达式中选择时间:

  不要忘记表达式的前面一定要有一个“=”,如果没有,手工加上一个。为了更符合我们的习惯,前面可以加个说明,如打印时间等,表达式的写法就要稍做改变:还是以“=”开头,后面加上“打印时间:”,再以“&”连接生成的Now函数即可得到我们想要的样子。

  Ø 为行加序号

  为了演示,我将序号列加在了表格了最后列

  加入一个新的列:

  在显示序号的列中输入相关的值:

  在此表达式的后面是Nothing,不是null,不要搞错。

  三项功能已经完成,预览:

  比原来漂亮吗?至少实用了一些。

  使用RDLC报表(二)--使用自定义数据集
  <!--[if !supportLists]-->1<!--[endif]-->新建窗体

  <!--[if !supportLists]-->2<!--[endif]-->建立数据源

  3<!--[endif]-->建立报表

  新的数据报表已经生成,下面开始对数据源进行设置。

  <!--[if !supportLists]-->4<!--[endif]-->对报表自动生成的数据源进行设置
  选择工具栏 à 报表 à 数据源,选中所要修改的数据源后,用“重命名”对其进行修改,如myds。

  修改完成后,确定退出此窗口。

  选中报表设计器内的表格,显示属性。将表格的数据集名称更改为上面修改的名称。

  如果一个报表文件内只有一个数据源,则表格内的数据值可直接写为“=Fields!字段.Value”的格式,如果包含多个数据源,则要对此字段的取值进行指定,如“=(Fields!字段.value,“数据集名称””。

  <!--[if !supportLists]-->5<!--[endif]-->手动生成数据源
  手动生成的数据集内必须包含报表文件内设计的字段名称,否则会运行出现错误。

  生成数据集:

  /// <summary>

  /// 报表执行操作

  /// </summary>

  /// <param name="sender"></param>

  /// <param name="e"></param>

  private void button1_Click(object sender, EventArgs e)

  

  //取得数据集

  string connstring = "Data Source=.;Initial Catalog=Northwind;Integrated Security=True";

  System.Data.SqlClient.SqlConnection conn1 = new System.Data.SqlClient.SqlConnection(connstring);

  System.Data.SqlClient.SqlCommand command1 = new System.Data.SqlClient.SqlCommand("select * from customers", conn1);

  System.Data.SqlClient.SqlDataAdapter ada1 = new System.Data.SqlClient.SqlDataAdapter(command1);

  DataSet c_ds = new DataSet();

  try

  

  conn1.Open();

  ada1.Fill(c_ds);

  

  finally

  

  conn1.Close();

  command1.Dispose();

  conn1.Dispose();

  

  //为报表浏览器指定报表文件

  this.reportViewer1.LocalReport.ReportEmbeddedResource = "report.Report1.rdlc";

  //指定数据集,数据集名称后为表,不是DataSet类型的数据集

  this.reportViewer1.LocalReport.DataSources.Clear();

  this.reportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WinForms.ReportDataSource("myds", c_ds.Tables[0]));

  //显示报表

  this.reportViewer1.RefreshReport();

  

  运行后的数据显示:

  posted on 2006-04-21 19:42 龙少爷 阅读(1189) 评论(8) 编辑 收藏 引用 网摘 所属分类: RDLC报表使用

  使用RDLC报表(三)--向RDLC报表传入参数
  在使用报表向客户展示结果数据时,实时的在报表中显示某些特定的数据是必需的,如:显示的部门、打印的日期等。本文只简单的演示向报表内传入一个字符值。如有其它问题,欢迎讨论。

  1、新建一个工程TestReport,一个Form窗体,放入一个TextBox、一个Button按钮,再放入一个ReportViewer控件。
  2、在ReportViewer上选择新建一个报表
  3、在打开的报表设计器中,选择工具栏的“报表”中的“报表参数”,新加一个参数,名称为content,数据类型为string,确定。
  4、在报表设计器的页面上放入一个文本框,在文本框上按鼠标右键->属性,在“文本框属性”窗口中,选择“常规”选项卡内下部的“值”后面的“编辑表达式”按钮(就是那个Fx),在此窗口内,左下框内选择参数,在右下框将会出现在上一步中设置的参数,双击此参数,在上面的框内将出现所需要的表达式:=Parameters!content.Value。保存此报表。报表默认名称为Report1.rdlc。
  5、在Form窗体内双击按钮,编写如下代码:

  this.reportViewer1.LocalReport.ReportEmbeddedResource = "TestReport.Report1.rdlc";
  ReportParameter rp = new ReportParameter("content", this.textBox1.Text);
  this.reportViewer1.LocalReport.SetParameters(new ReportParameter[] rp );
  this.reportViewer1.RefreshReport();

  6、运行工程,在文本输入框内输入数据,按下按钮,数据是不是已经传入报表了?

  posted on 2007-03-06 14:41 龙少爷 阅读(393) 评论(8) 编辑 收藏 引用 网摘 所属分类: RDLC报表使用

  使用RDLC报表(四)--钻取式报表
  本文内以MSServer自带Northwind库文件内的Customers及Orders这两个表为例,建立两个报表文件,在查询得出Customers的表数据后,点击此表内的CustomerID数据,报表将转入至下一个报表,并显示与之相关的Orders的数据,即VS中所谓的钻取式报表。

  1、打开一个工程,并新建一个From,放入一个Button及一个ReportViewer控件。
  2、在工程内新建一个数据源,连接到Northwind库文件,显示Customers及Orders这两个表
  3、新建一个报表文件,并以表格的形式来显示数据,将Customers表内的CustomerID、CompanyName及Address三个字段放入,形成一份有表头及数据的简单报表,并将此报表保存命名为customerReport
  4、再建一个报表文件,与customerReport相同,也以表格的形式来显示报表,将Orders内的OrderID、CustomerID、ShipName及OrderDate四个字段放入表格内,报表保存为orderReport
  5、orderReport的数据源根据主报表customerReport的数据来确定数据源的数据,查看表格的数据集名称,我的显示为NorthwindDataSet_Orders,也可以自己另建一个,具体方法见我的《RDLC报表(二)》
  6、再打开customerReport报表,将CustomerID设置成为可点击的索引字段,以便转入下一个报表。选择CustomerID字段,按鼠标右键,在”文本框属性“窗口中,选择”导航“选项卡,在下面的”超链接“中选择”跳至报表“,在报表名称中选择”orderReport“,再按下后面的”参数...“按钮,输入一个参数名称,如customerid,参数值选择=Fields!CustomerID.Value。为了与其它数据相区分,可以将此列数据根据自己的习惯改变颜色或加下划线
  7、在orderReport中,设置一个报表参数,与CurtomerReprot中的名称相同,以接收父表中传入的参数
  8、新建两个取得数据的方法,一个从Customers中取得数据集,另一个从Orders中取得数据集,且带参数。此两个方法可以自己编写类库来实现,也可以在VS的数据集内添加。为了演示方便,我直接使用了Customers的GetData(),并编写了一个Orders的GetDataByCustomerID(@cid)的方法。
  9、在From的Button中编写如下代码:
  private void button2_Click(object sender, EventArgs e)
  
  NorthwindDataSet.CustomersDataTable dt1 = new NorthwindDataSetTableAdapters.CustomersTableAdapter().GetData();
  this.reportViewer1.LocalReport.ReportEmbeddedResource = "TestReport.customerReport.rdlc";
  this.reportViewer1.LocalReport.DataSources.Clear();
  this.reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("NorthwindDataSet_Customers", dt1));
  this.reportViewer1.RefreshReport();
  

  10、使用报表的Drillthrough事件,当选择了钻取项时会发生此事件,给下一个报表取值,代码如下:
  private void reportViewer1_Drillthrough(object sender, DrillthroughEventArgs e)
  
  LocalReport lp = (LocalReport)e.Report;
  string customerid = lp.GetParameters()["customerid"].Values[0].Trim();

  lp.DataSources.Clear();
  lp.DataSources.Add(new ReportDataSource("NorthwindDataSet_Orders",
  new NorthwindDataSetTableAdapters.OrdersTableAdapter().GetDataByCustomerID(customerid)));
  
  运到结果:
  运行第一份报表:

  钻取后运行第二份报表:

  本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/keisuoy/archive/2007/08/08/1731528.aspx

  本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/keisuoy/archive/2007/08/08/1731528.aspx
参考技术A 我用的是FineReport报表,有POST和GET两种传参方式:POST方式向服务器传送数据,用户端利用邮寄信息数据字段将数据传送到服务器,服务器端用Request.Form获取提交的数据;GET方式从服务器上获取数据,将输入的数据加在action设定的url地址后面,传送到服务器。服务器端用Request .QueryString获取变量的值。
导入文本文件作为数据源,要先定义数据连接,然后在设计器里点服务器>服务器数据集,选择添加文本,定义好目录,点确定,刚刚定义好的数据集就会出现在左侧控制面板数据区,服务器数据集面板上,可以作为数据源来设计报表。
不知道能不能帮到你~
参考技术B 及那么几句代码而已。
不知道你是手动配的数据源还是自动拖上去的。
两种方法各有所不同。
+409637790吧.
那样说的比较清楚
参考技术C rdlc报表 自带参数面板,添加你的过滤条件就行啦。 找资料看下吧 都是基础

以上是关于Delphi的高手请进,请教一个关于窗体创建的问题!的主要内容,如果未能解决你的问题,请参考以下文章

请教点简单的Makefile文件语法,高手请进

MySQL高手请进!

delphi7的问题

请教DELPHI中截图位置的问题,请高手们指点一下.谢谢啦

请教rdlc报表制作!特别是关于如何在reportview中传递参数给rcld报表,然后报表按参数查询,请高手赐教!

VB里窗体嵌套的问题,请教高手!