From: <cyc...@us...> - 2007-06-30 13:06:34
|
Revision: 2057 http://svn.sourceforge.net/jcl/?rev=2057&view=rev Author: cycocrew Date: 2007-06-30 06:06:31 -0700 (Sat, 30 Jun 2007) Log Message: ----------- Added TWideStringList example (JclUnicode)in JCL\jcl\examples\windows\widestring Added Paths: ----------- trunk/jcl/examples/windows/widestring/ trunk/jcl/examples/windows/widestring/WideStringDemoMain.dfm trunk/jcl/examples/windows/widestring/WideStringDemoMain.pas trunk/jcl/examples/windows/widestring/WideStringExample.dpr trunk/jcl/examples/windows/widestring/WideStringExample.res Added: trunk/jcl/examples/windows/widestring/WideStringDemoMain.dfm =================================================================== --- trunk/jcl/examples/windows/widestring/WideStringDemoMain.dfm (rev 0) +++ trunk/jcl/examples/windows/widestring/WideStringDemoMain.dfm 2007-06-30 13:06:31 UTC (rev 2057) @@ -0,0 +1,159 @@ +object Form1: TForm1 + Left = 0 + Top = 0 + Caption = 'TWideStringList Example (JclUnicode)' + ClientHeight = 544 + ClientWidth = 791 + Color = clBtnFace + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -15 + Font.Name = 'Segoe UI' + Font.Style = [] + OldCreateOrder = False + OnCreate = FormCreate + OnDestroy = FormDestroy + PixelsPerInch = 120 + TextHeight = 20 + object FileListView: TListView + Left = 0 + Top = 177 + Width = 791 + Height = 342 + Align = alClient + Columns = < + item + Caption = 'Name' + Width = 200 + end + item + Caption = 'Location' + Width = 400 + end + item + Caption = 'Encoding' + Width = 150 + end> + RowSelect = True + PopupMenu = FilePopupMenu + TabOrder = 0 + ViewStyle = vsReport + OnColumnClick = FileListViewColumnClick + OnDblClick = OpenwithNotepad1Click + ExplicitWidth = 909 + ExplicitHeight = 343 + end + object Panel1: TPanel + Left = 0 + Top = 0 + Width = 791 + Height = 177 + Align = alTop + TabOrder = 1 + ExplicitWidth = 909 + object Label3: TLabel + Left = 216 + Top = 58 + Width = 106 + Height = 20 + Caption = 'Filter encoding :' + end + object Label2: TLabel + Left = 8 + Top = 58 + Width = 68 + Height = 20 + Caption = 'File mask :' + end + object Label1: TLabel + Left = 8 + Top = 4 + Width = 102 + Height = 20 + Caption = 'Root directory :' + end + object FilterEncodingComboBox: TComboBox + Left = 216 + Top = 79 + Width = 201 + Height = 28 + ItemHeight = 20 + TabOrder = 0 + Items.Strings = ( + '' + 'ANSI' + 'Unicode' + 'Unicode big endian' + 'UTF-8') + end + object IncludeSubDirectoriesCheckBox: TCheckBox + Left = 448 + Top = 84 + Width = 177 + Height = 17 + Caption = 'Include sub directories' + Checked = True + State = cbChecked + TabOrder = 1 + end + object ConvertButton: TButton + Left = 216 + Top = 120 + Width = 201 + Height = 41 + Caption = 'Convert UTF-8 to ANSI' + Enabled = False + TabOrder = 2 + OnClick = ConvertButtonClick + end + object SearchButton: TButton + Left = 8 + Top = 120 + Width = 202 + Height = 41 + Caption = 'Search' + TabOrder = 3 + OnClick = SearchButtonClick + end + object FileMaskEdit: TEdit + Left = 8 + Top = 79 + Width = 202 + Height = 28 + TabOrder = 4 + Text = '*.pas;*.dfm;*.xfm;*.dpr;*.dpk*' + end + object RootDirectoryEdit: TEdit + Left = 8 + Top = 24 + Width = 769 + Height = 28 + TabOrder = 5 + end + end + object StatusBar1: TStatusBar + Left = 0 + Top = 519 + Width = 791 + Height = 25 + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -15 + Font.Name = 'Segoe UI' + Font.Style = [] + Panels = <> + SimplePanel = True + UseSystemFont = False + ExplicitTop = 520 + ExplicitWidth = 909 + end + object FilePopupMenu: TPopupMenu + Left = 712 + Top = 96 + object OpenwithNotepad1: TMenuItem + Caption = 'Open with Notepad' + Default = True + OnClick = OpenwithNotepad1Click + end + end +end Property changes on: trunk/jcl/examples/windows/widestring/WideStringDemoMain.dfm ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Added: trunk/jcl/examples/windows/widestring/WideStringDemoMain.pas =================================================================== --- trunk/jcl/examples/windows/widestring/WideStringDemoMain.pas (rev 0) +++ trunk/jcl/examples/windows/widestring/WideStringDemoMain.pas 2007-06-30 13:06:31 UTC (rev 2057) @@ -0,0 +1,192 @@ +unit WideStringDemoMain; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, ComCtrls, StdCtrls, ExtCtrls, Menus, ShellAPI, + JclFileUtils, JclUnicode, JclSysInfo, JclFont; + +type + TForm1 = class(TForm) + FileListView: TListView; + Panel1: TPanel; + FilterEncodingComboBox: TComboBox; + IncludeSubDirectoriesCheckBox: TCheckBox; + ConvertButton: TButton; + SearchButton: TButton; + Label3: TLabel; + FileMaskEdit: TEdit; + Label2: TLabel; + RootDirectoryEdit: TEdit; + Label1: TLabel; + StatusBar1: TStatusBar; + FilePopupMenu: TPopupMenu; + OpenwithNotepad1: TMenuItem; + procedure FormCreate(Sender: TObject); + procedure FormDestroy(Sender: TObject); + procedure SearchButtonClick(Sender: TObject); + procedure AddFile(const Directory: string; const FileInfo: TSearchRec); + procedure TaskDone(const ID: TFileSearchTaskID; const Aborted: boolean); + procedure FileListViewColumnClick(Sender: TObject; Column: TListColumn); + procedure OpenwithNotepad1Click(Sender: TObject); + procedure ConvertButtonClick(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + FileListViewSortAscending: boolean; + UTF8FileCount: integer; + FFileEnumerator: TJclFileEnumerator; + FTaskID: TFileSearchTaskID; + FWideStringList: TWideStringList; + +const + SaveFormatValues: array[TSaveFormat] of string = + ('Unicode', 'Unicode big endian', 'UTF-8', 'ANSI'); + +implementation + +{$R *.dfm} + +function CustomSortByColumn(Item1, Item2: TListItem; iData: integer): integer; + stdcall; +var + Str1, Str2: string; +begin + if (Item1 = nil) or (Item2 = nil) then + begin + Result := 0; + exit; + end; + + try + if (iData = 0) then + begin + Str1 := Item1.Caption; + Str2 := Item2.Caption; + end + else + begin + if (iData >= 1) and (iData <= Item1.SubItems.Count) then + Str1 := Item1.SubItems[iData - 1] + else + Str1 := ''; + if (iData >= 1) and (iData <= Item2.SubItems.Count) then + Str2 := Item2.SubItems[iData - 1] + else + Str2 := ''; + end; + Result := AnsiCompareStr(Str1, Str2); + except + Result := 0; + end; + + if not FileListViewSortAscending then + Result := -Result; +end; + +procedure TForm1.AddFile(const Directory: string; const FileInfo: TSearchRec); +var + ListItem: TListItem; +begin + FWideStringList.LoadFromFile(Directory + FileInfo.Name); + + if (FilterEncodingComboBox.Text = '') or (FilterEncodingComboBox.Text = + SaveFormatValues[FWideStringList.SaveFormat]) then + begin + ListItem := FileListView.Items.Add; + with ListItem do + begin + Caption := FileInfo.Name; + SubItems.Add(Directory); + SubItems.Add(SaveFormatValues[FWideStringList.SaveFormat]); + if (FWideStringList.SaveFormat = sfUTF8) then + Inc(UTF8FileCount); + end; + end; +end; + +procedure TForm1.SearchButtonClick(Sender: TObject); +begin + FFileEnumerator.OnTerminateTask := TaskDone; + FFileEnumerator.RootDirectory := RootDirectoryEdit.Text; + FFileEnumerator.FileMask := FileMaskEdit.Text; + FFileEnumerator.IncludeSubDirectories := IncludeSubDirectoriesCheckBox.Checked; + + FileListView.Items.BeginUpdate; + FileListView.Items.Clear; + Screen.Cursor := crHourGlass; + UTF8FileCount := 0; + FTaskID := FFileEnumerator.ForEach(AddFile); +end; + +procedure TForm1.ConvertButtonClick(Sender: TObject); +var + i: integer; +begin + for i := 0 to FileListView.Items.Count - 1 do + begin + if (FileListView.Items[i].SubItems[1] = 'UTF-8') then + begin + FWideStringList.LoadFromFile(PChar(FileListView.Items[i].SubItems[0] + + FileListView.Items[i].Caption)); + if (FWideStringList.SaveFormat = sfUTF8) then + begin + FWideStringList.SaveFormat := sfAnsi; + FWideStringList.SaveToFile(PChar(FileListView.Items[i].SubItems[0] + + FileListView.Items[i].Caption)); + FileListView.Items[i].SubItems[1] := SaveFormatValues[FWideStringList.SaveFormat]; + Dec(UTF8FileCount); + end; + end; + end; + ConvertButton.Enabled := (UTF8FileCount > 0); +end; + +procedure TForm1.FileListViewColumnClick(Sender: TObject; Column: TListColumn); +begin + if (Column.Index = TListView(Sender).Tag) then + FileListViewSortAscending := not FileListViewSortAscending + else + TListView(Sender).Tag := Column.Index; + TListView(Sender).CustomSort(@CustomSortByColumn, Column.Index); +end; + +procedure TForm1.FormCreate(Sender: TObject); +begin + FFileEnumerator := TJclFileEnumerator.Create; + FWideStringList := TWideStringList.Create; + + SetObjectFontToSystemFont(Form1); + + RootDirectoryEdit.Text := ExtractFilePath(Application.ExeName); +end; + +procedure TForm1.FormDestroy(Sender: TObject); +begin + FWideStringList.Free; + FFileEnumerator.Free; +end; + +procedure TForm1.OpenwithNotepad1Click(Sender: TObject); +begin + if (FileListView.Selected <> nil) then + ShellExecute(Handle, 'open', PChar(GetWindowsFolder + '\notepad.exe'), + PChar(FileListView.Selected.SubItems[0] + FileListView.Selected.Caption), + nil, SW_SHOWNORMAL); +end; + +procedure TForm1.TaskDone(const ID: TFileSearchTaskID; const Aborted: boolean); +begin + FileListView.Items.EndUpdate; + Screen.Cursor := crDefault; + StatusBar1.SimpleText := Format('%d files', [FileListView.Items.Count]); + ConvertButton.Enabled := (UTF8FileCount > 0); +end; + +end. Property changes on: trunk/jcl/examples/windows/widestring/WideStringDemoMain.pas ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:keywords + Id LastChangedDate LastChangedBy LastChangedRevision URL Name: svn:eol-style + native Added: trunk/jcl/examples/windows/widestring/WideStringExample.dpr =================================================================== --- trunk/jcl/examples/windows/widestring/WideStringExample.dpr (rev 0) +++ trunk/jcl/examples/windows/widestring/WideStringExample.dpr 2007-06-30 13:06:31 UTC (rev 2057) @@ -0,0 +1,15 @@ +program WideStringExample; + +uses + Forms, + WideStringDemoMain in 'WideStringDemoMain.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.MainFormOnTaskbar := True; + Application.Title := 'TWideStringList Example (JclUnicode)'; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. Property changes on: trunk/jcl/examples/windows/widestring/WideStringExample.dpr ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:keywords + Id LastChangedDate LastChangedBy LastChangedRevision URL Name: svn:eol-style + native Added: trunk/jcl/examples/windows/widestring/WideStringExample.res =================================================================== (Binary files differ) Property changes on: trunk/jcl/examples/windows/widestring/WideStringExample.res ___________________________________________________________________ Name: svn:mime-type + application/octet-stream This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |