摘要:
看看 Delphi XE2 为 VCL 提供的 14 种样式其实只提供了 13 个 vsf 样式文件, 还有默认的 Windows 样式, 共 14 种.在空白窗体上添加 ListBox1 等控件, 测试代码:uses IOUtils, Vcl.Styles, vcl.Themes;procedure TForm1.FormCreate(Sender: TObject);var dir, fileName, styleName: string;begin //VCL 的样式文件 *.vsf 在 X:\Program Files\Embarcadero\RAD Studio\9.0\Redist 阅读全文
摘要:
FireMonkey 绘图(1)FMX 的 Canvas 在不同的系统上会分别使用:WinVista、Win7: D2D (FMX.Canvas.D2D.pas)WinXP: GDI+ (FMX.Canvas.GDIP.pas)Mac 系列: Core Graphics (FMX.Canvas.Mac.pas)和 HTML5 中的 Canvas 非常类似, 现在的 Canvas 模糊了 Pen 的概念:之前的 Canvas.Pen 对应: Canvas.Stroke;之前的 Canvas.Brush 对应: Canvas.Fill.在 FMX 中, Canvas 无处不在, 其 Canvas. 阅读全文
摘要:
终于, Delphi XE2 携带 GDI+ 库了使用了较早的 http://www.progdigy.comuses Winapi.GDIPAPI, Winapi.GDIPOBJ{, Winapi.GDIPUTIL};procedure TForm1.FormPaint(Sender: TObject);var graphics: TGPGraphics; pen: TGPPen;begin graphics := TGPGraphics.Create(Canvas.Handle); pen := TGPPen.Create(MakeColor(255,0,0)); graphics.Dra 阅读全文
摘要:
关于禁止程序重复启动的另一种需要与实现手头的程序需要禁止重复启动, 但需要保留新的、关闭旧的.我想还是从主窗口的类名下手吧; 写了一个函数, 在 OnCreate 中调用即可:{ 函数 }procedure CloseSameClassNameWindow(ACurrentWindow: HWND; const AClassName: string);var h: HWND; buf: array[0..255] of Char;begin h := ACurrentWindow; while h > 0 do begin h := GetWindow(h, GW_HWNDNEXT); 阅读全文
摘要:
Delphi XE2 新增 System.Zip 单元, 可用一句话压缩整个文件夹了单元内主要就是 TZipFile 类, 最方便使用的是它的类方法:TZipFile.ExtractZipFile() //解压 Zip 文件到指定文件夹TZipFile.IsValid() //判断指定文件是否是有效的 Zip 文件TZipFile.ZipDirectoryContents() //压缩指定路径下的所有文件测试:uses System.Zip;{ 把 C:\Temp\TestDir 下的所有文件压缩到 C:\Temp\Test.zip }procedure TForm1.But... 阅读全文
摘要:
Delphi XE2 之 FireMonkey 入门(45Finally) - 结题与问题很喜欢 FMX 的一些新控件, 如: TExpander、TArcDial、TComboTrackBar、TPathLabel 等等, 没时间继续学习了.对 FMX 的整体感觉: 还不成熟, 但肯定有前景; 它的构架师有远见、了不起, 很难估计他开启的是多大一扇门!本将继续学习:1、TCanvas、TBrush、TApplication;2、FMX 中的 GDI+、D2D、DirectX;3、FMX 3D;4、XE2 中新增的其他内容(譬如新增的 TZipFile 类, 已测试过、下帖附上).又要忙其它事 阅读全文
摘要:
Delphi XE2 之 FireMonkey 入门(44) - 控件基础: TTreeView、TTreeViewItemTScrollBox -> TCustomTreeView -> TTreeView 子项类型是 TTreeViewItem.测试, 先在窗体上放一个 TTreeView, 并需要它的 OnChange 事件:unit Unit1;interfaceuses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Control 阅读全文
摘要:
Delphi XE2 之 FireMonkey 入门(43) - 控件基础: TStringGrid、TGridTStringGrid、TGrid 都是从 TCustomGrid 继承; 区别有:1、它们的列对象分别是: TStringColumn、TColumn;2、TStringGrid 比 TGrid 多出了 Cells[] 属性.因为 TGrid 没有 Cells[] 属性, 暂时不方便使用; 我尝试取其当前单元值时竟然用了这样的代码:(Grid1.Columns[Grid1.ColumnIndex].CellControlByRow(Grid1.Selected) as TTextC 阅读全文
摘要:
Delphi XE2 之 FireMonkey 入门(42) - 控件基础: TComboBox、TComboEditTListBox 有两个兄弟 TComboListBox、TComboEditListBox;TComboBox、TComboEdit 虽不是不是从它们继承, 但分别包含了它们, 所以使用起来都有点像 TListBox.TComboBox 更像 TListBox, 比 TComboEdit 多出了 Selected 等成员;TComboEdit 是从 TCustomEdit 继承, 和 TEdit 是兄弟, 比 TComboBox 多出了 Text 等成员. 它们的公共常用属性 阅读全文
摘要:
Delphi XE2 之 FireMonkey 入门(41) - 控件基础: TListBoxTScrollBox -> TCustomListBox -> TListBox; 其元素项是 TListBoxItem 类型.TListBox 的功能在 TCustomListBox 里就完成了.值得注意的变化是: 1、复选框(相关属性: ShowCheckboxes、TListBoxItem.IsChecked)2、交替背景(通过继承还可以调整交替的背景色)3、TListBoxItem 可调整大小、容纳其它对象.{ TCustomListBox }public constructor 阅读全文
摘要:
Delphi XE2 之 FireMonkey 入门(40) - 控件基础: TMemo值得注意的变化:1、其父类 TScrollBox 的许多特性也很有用处, 如: Memo1.UseSmallScrollBars := True;2、内部使用了一个栈列表管理动作, 现在可以执行多步撤销(UnDo).3、使用了一个新的结构体 TCaretPosition 来描述当前位置, 并为该结构提供了一个公用的快速构造函数 ComposeCaretPos(). TCaretPosition = record Line, Pos: Integer; end;4、提供枚举属性 CharCase 控... 阅读全文
摘要:
Delphi XE2 之 FireMonkey 入门(39) - 控件基础: TScrollBox、TVertScrollBox、TFramedScrollBox、TFramedVertScrollBoxTScrollBox 是不少控件(TMemo、TListBox、TStringGrid、TTreeView、TImageViewer 等)的基础, 所以先学.TVertScrollBox 只比 TScrollBox 少了竖滚动条.TFramedScrollBox、TFramedVertScrollBox 只是套用了不同的样式, 有可视的框架.{ TScrollBox }public const 阅读全文
摘要:
Delphi XE2 之 FireMonkey 入门(38) - 控件基础: TPopupMenu、TMenuItem、TMenuBar、TMainMenu相关控件: TMenuBar、TPopupMenu、TMainMenu; 它们都是要包含 TMenuItem; 在设计时添加 TMenuItem 很容易.其中的 TMainMenu 暂不能应用其他样式; TMenuBar 只有一个值得注意 UseOSMenu 属性.控件 PopupMenu 属性用于指定右键菜单.暂时无法直接为窗体指定右键菜单, 因为窗体现在没有 PopupMenu 属性; 我想到的办法是在窗体上覆盖一个 TPanel 或 阅读全文
摘要:
Delphi XE2 之 FireMonkey 入门(36) - 控件基础: TForm当我第一次读取 Form1.StyleLookup 并期待出现 "formstyle" 时, 给的确是 "backgroundstyle" ...现在明白了, 原来窗体上覆盖着一个 TRectangle 对象:uses FMX.Objects;procedure TForm1.Button1Click(Sender: TObject);begin (Self.Children[0] as TRectangle).Fill.Color := claRed; //默认情况 阅读全文
摘要:
Delphi XE2 之 FireMonkey 入门(37) - 控件基础: TControl 概览{ TControl }public constructor Create(...); override; // destructor Destroy; override; // procedure AddObject(...); override; //添加对象 procedure RemoveObject(...); override; //移除对象 procedure SetNewScene(...); virtual; //设置新场景 procedure SetBound... 阅读全文
摘要:
Delphi XE2 之 FireMonkey 入门(35) - 控件基础: TFmxObject: 其它TFmxObject 增加了 TagObject、TagFloat、TagString, 算上从 TComponent 继承的 Tag, 可以暂存多种类型的数据了.ChildrenCount、Children[] 代替了之前的 ControlCount、Controls[].有增删 Children 的几个方法: AddObject()、InsertObject()、RemoveObject()、Exchange()、DeleteChildren()Index 属性是控件在 Childre 阅读全文
摘要:
Delphi XE2 之 FireMonkey 入门(34) - 控件基础: TFmxObject: 克隆对象有两个和克隆相关的方法: Clone()、CloneChildFromStream().Clone() 很好用, 但 CloneChildFromStream() 的源码很明显地写错了(是小问题, 谁外语好去报一下).procedure TForm1.FormCreate(Sender: TObject);var i: Integer;begin for i := 0 to 9 do ListBox1.Items.Add('Item' + IntToStr(i));en 阅读全文
摘要:
Delphi XE2 之 FireMonkey 入门(33) - 控件基础: TFmxObject: SaveToStream、LoadFromStream、SaveToBinStream、LoadFromBinStreamSaveToStream()、LoadFromStream() 对应文本流;SaveToBinStream()、LoadFromBinStream() 对应二进制流; 相对文本流, 二进制流会小一些.有这几个方法, 控件数据与状态的序列化就太容易了.示例:1、控件: ListBox1、Button1、Button22、事件: Button1.OnClick、Button2. 阅读全文
摘要:
Delphi XE2 之 FireMonkey 入门(32) - 数据绑定: TBindingsList: TBindList、TBindPosition [未完成...]//待补... 阅读全文
摘要:
Delphi XE2 之 FireMonkey 入门(31) - 数据绑定: 绑定数据库一、全设计时操作:先在窗体上放置控件:DataSource1 : TDataSource;ClientDataSet1 : TClientDataSet;Label1 : TLabel;Edit1 : TEdit;Memo1 : TMemo;ImageControl1 : TImageControl;BindNavigator1 : TBindNavigator;{在连接过程中, 会自动添加下面部件}BindingsList1 : TBindingsList;Bind... 阅读全文