Changeset 167
- Timestamp:
- Aug 9, 2018, 3:43:27 PM (6 years ago)
- Location:
- branches/generator
- Files:
-
- 2 added
- 32 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/generator/Forms
- Property svn:ignore
-
old new 1 1 *.lrj 2 *.lrt
-
- Property svn:ignore
-
branches/generator/Forms/UFormGrammer.lfm
r136 r167 7 7 ClientHeight = 346 8 8 ClientWidth = 548 9 DesignTimePPI = 120 10 OnClose = FormClose 9 11 OnShow = FormShow 10 LCLVersion = '1.8. 0.4'12 LCLVersion = '1.8.2.0' 11 13 object Label1: TLabel 12 14 Left = 15 13 Height = 2 315 Height = 20 14 16 Top = 22 15 Width = 7517 Width = 63 16 18 Caption = 'Start rule:' 17 19 ParentColor = False … … 19 21 object ComboBoxStartRule: TComboBox 20 22 Left = 168 21 Height = 3723 Height = 28 22 24 Top = 22 23 25 Width = 272 24 ItemHeight = 026 ItemHeight = 20 25 27 Style = csDropDownList 26 28 TabOrder = 0 … … 48 50 object Label2: TLabel 49 51 Left = 16 50 Height = 2 352 Height = 20 51 53 Top = 80 52 Width = 1 3054 Width = 113 53 55 Caption = 'White space rule:' 54 56 ParentColor = False … … 56 58 object ComboBoxWhiteSpaceRule: TComboBox 57 59 Left = 168 58 Height = 3760 Height = 28 59 61 Top = 72 60 62 Width = 272 61 ItemHeight = 063 ItemHeight = 20 62 64 Style = csDropDownList 63 65 TabOrder = 3 -
branches/generator/Forms/UFormGrammer.pas
r136 r167 20 20 Label1: TLabel; 21 21 Label2: TLabel; 22 procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); 22 23 procedure FormShow(Sender: TObject); 23 24 private … … 36 37 {$R *.lfm} 37 38 39 uses 40 UCore; 41 38 42 { TFormGrammer } 39 43 40 44 procedure TFormGrammer.FormShow(Sender: TObject); 41 45 begin 46 Core.PersistentForm1.Load(Self); 47 end; 48 49 procedure TFormGrammer.FormClose(Sender: TObject; var CloseAction: TCloseAction 50 ); 51 begin 52 Core.PersistentForm1.Save(Self); 42 53 end; 43 54 -
branches/generator/Forms/UFormLookupTable.lfm
r137 r167 7 7 ClientHeight = 273 8 8 ClientWidth = 595 9 LCLVersion = '1.8.0.4' 9 DesignTimePPI = 120 10 OnClose = FormClose 11 OnShow = FormShow 12 LCLVersion = '1.8.2.0' 10 13 object Label1: TLabel 11 14 Left = 15 12 Height = 2 315 Height = 20 13 16 Top = 17 14 Width = 4 917 Width = 43 15 18 Caption = 'Name:' 16 19 ParentColor = False … … 18 21 object EditName: TEdit 19 22 Left = 120 20 Height = 3323 Height = 28 21 24 Top = 8 22 25 Width = 160 -
branches/generator/Forms/UFormLookupTable.pas
r137 r167 18 18 EditName: TEdit; 19 19 Label1: TLabel; 20 procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); 21 procedure FormShow(Sender: TObject); 20 22 private 21 23 … … 32 34 {$R *.lfm} 33 35 36 uses 37 UCore; 38 34 39 { TFormLookupTable } 40 41 procedure TFormLookupTable.FormClose(Sender: TObject; 42 var CloseAction: TCloseAction); 43 begin 44 Core.PersistentForm1.Save(Self); 45 end; 46 47 procedure TFormLookupTable.FormShow(Sender: TObject); 48 begin 49 Core.PersistentForm1.Load(Self); 50 end; 35 51 36 52 procedure TFormLookupTable.LoadData(LookupTable: TLookupTable); -
branches/generator/Forms/UFormMain.lfm
r137 r167 5 5 Width = 1050 6 6 Caption = 'Language generator' 7 ClientHeight = 6 477 ClientHeight = 653 8 8 ClientWidth = 1050 9 DesignTimePPI = 120 9 10 Menu = MainMenu1 10 11 OnClose = FormClose 11 12 OnCloseQuery = FormCloseQuery 12 13 OnShow = FormShow 13 LCLVersion = '1.8.0.4' 14 LCLVersion = '1.8.2.0' 15 WindowState = wsMaximized 14 16 object CoolBar1: TCoolBar 15 17 Left = 0 … … 83 85 object PageControl1: TPageControl 84 86 Left = 0 85 Height = 61 287 Height = 618 86 88 Top = 35 87 89 Width = 1050 … … 110 112 object TabSheetEbnf: TTabSheet 111 113 Caption = 'EBNF' 112 ClientHeight = 5 71113 ClientWidth = 104 4114 ClientHeight = 585 115 ClientWidth = 1042 114 116 object MemoEbnf: TMemo 115 117 Left = 0 116 Height = 5 71117 Top = 0 118 Width = 104 4118 Height = 585 119 Top = 0 120 Width = 1042 119 121 Align = alClient 120 122 ReadOnly = True -
branches/generator/Forms/UFormMain.pas
r162 r167 152 152 procedure TFormMain.FormShow(Sender: TObject); 153 153 begin 154 Core.PersistentForm1.Load(Self, True);155 154 Core.Initialize; 155 Core.PersistentForm1.Load(Self); 156 156 PageControl1.TabIndex := 0; 157 157 ReloadMemo; -
branches/generator/Forms/UFormRule.lfm
r131 r167 8 8 ClientHeight = 514 9 9 ClientWidth = 663 10 DesignTimePPI = 120 11 OnClose = FormClose 10 12 OnCreate = FormCreate 11 13 OnDestroy = FormDestroy 12 14 OnShow = FormShow 13 LCLVersion = '1.8. 0.4'15 LCLVersion = '1.8.2.0' 14 16 object ButtonOk: TButton 15 17 Left = 376 … … 34 36 object Label1: TLabel 35 37 Left = 16 36 Height = 2 338 Height = 20 37 39 Top = 16 38 Width = 4 940 Width = 43 39 41 Caption = 'Name:' 40 42 ParentColor = False … … 81 83 object EditName: TEdit 82 84 Left = 135 83 Height = 3385 Height = 28 84 86 Top = 11 85 87 Width = 433 … … 88 90 object CheckBoxCreateNode: TCheckBox 89 91 Left = 16 90 Height = 2 792 Height = 24 91 93 Top = 48 92 Width = 1 7394 Width = 152 93 95 Caption = 'Create source node' 94 96 TabOrder = 4 … … 96 98 object Label2: TLabel 97 99 Left = 312 98 Height = 2 3100 Height = 20 99 101 Top = 52 100 Width = 42102 Width = 37 101 103 Caption = 'Level:' 102 104 ParentColor = False … … 104 106 object ComboBoxLevel: TComboBox 105 107 Left = 376 106 Height = 37108 Height = 28 107 109 Top = 48 108 110 Width = 125 109 ItemHeight = 0111 ItemHeight = 20 110 112 Style = csDropDownList 111 113 TabOrder = 5 -
branches/generator/Forms/UFormRule.pas
r129 r167 26 26 TabSheet2: TTabSheet; 27 27 TabSheetUsedBy: TTabSheet; 28 procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); 28 29 procedure FormCreate(Sender: TObject); 29 30 procedure FormDestroy(Sender: TObject); … … 48 49 {$R *.lfm} 49 50 51 uses 52 UCore; 53 50 54 { TFormRule } 51 55 … … 54 58 EditName.SetFocus; 55 59 PageControl1.TabIndex := 0; // Select first tab by default 60 Core.PersistentForm1.Load(Self); 56 61 end; 57 62 … … 85 90 end; 86 91 92 procedure TFormRule.FormClose(Sender: TObject; var CloseAction: TCloseAction); 93 begin 94 Core.PersistentForm1.Save(Self); 95 end; 96 87 97 procedure TFormRule.FormDestroy(Sender: TObject); 88 98 begin -
branches/generator/Forms/UFormRuleItem.lfm
r137 r167 1 1 object FormRuleItem: TFormRuleItem 2 2 Left = 474 3 Height = 4003 Height = 517 4 4 Top = 386 5 Width = 6565 Width = 719 6 6 Caption = 'Rule item' 7 ClientHeight = 400 8 ClientWidth = 656 7 ClientHeight = 517 8 ClientWidth = 719 9 DesignTimePPI = 120 9 10 OnClose = FormClose 10 11 OnCreate = FormCreate 11 12 OnDestroy = FormDestroy 12 13 OnShow = FormShow 13 LCLVersion = '1.8. 0.4'14 LCLVersion = '1.8.2.0' 14 15 object ButtonCancel: TButton 15 16 Left = 176 16 17 Height = 25 17 Top = 36218 Top = 479 18 19 Width = 75 19 20 Anchors = [akLeft, akBottom] … … 25 26 Left = 352 26 27 Height = 25 27 Top = 36228 Top = 479 28 29 Width = 75 29 30 Anchors = [akLeft, akBottom] … … 34 35 object ComboBoxType: TComboBox 35 36 Left = 160 36 Height = 3337 Height = 28 37 38 Top = 16 38 39 Width = 400 39 ItemHeight = 040 ItemHeight = 20 40 41 Items.Strings = ( 41 42 'Terminal' … … 50 51 object Label2: TLabel 51 52 Left = 16 52 Height = 2 353 Height = 20 53 54 Top = 24 54 Width = 4055 Width = 35 55 56 Caption = 'Type:' 56 57 ParentColor = False … … 58 59 object PageControl1: TPageControl 59 60 Left = 16 60 Height = 26661 Height = 383 61 62 Top = 88 62 Width = 6 3263 Width = 695 63 64 ActivePage = TabSheetNonTerminal 64 65 Anchors = [akTop, akLeft, akRight, akBottom] … … 89 90 object TabSheetNonTerminal: TTabSheet 90 91 Caption = 'NonTerminal' 91 ClientHeight = 26092 ClientWidth = 6 2692 ClientHeight = 375 93 ClientWidth = 687 93 94 object LabelNonTerminal: TLabel 94 95 Left = 8 95 Height = 2 396 Height = 20 96 97 Top = 8 97 Width = 10598 Width = 92 98 99 Caption = 'Non-terminal:' 99 100 ParentColor = False … … 101 102 object ListBoxNonTerminals: TListBox 102 103 Left = 8 103 Height = 210104 Height = 325 104 105 Top = 40 105 Width = 3 04106 Anchors = [akTop, akLeft, ak Right, akBottom]106 Width = 328 107 Anchors = [akTop, akLeft, akBottom] 107 108 ItemHeight = 0 108 109 ScrollWidth = 302 109 110 TabOrder = 0 110 TopIndex = -1111 111 end 112 112 object CheckBoxLookupTable: TCheckBox 113 113 Left = 352 114 Height = 2 7114 Height = 24 115 115 Top = 8 116 Width = 1 52116 Width = 136 117 117 Caption = 'Use lookup table' 118 118 OnChange = CheckBoxLookupTableChange … … 121 121 object ListBoxLookupTable: TListBox 122 122 Left = 352 123 Height = 176123 Height = 291 124 124 Top = 40 125 Width = 248125 Width = 309 126 126 Anchors = [akTop, akLeft, akRight, akBottom] 127 127 ItemHeight = 0 128 128 ScrollWidth = 246 129 129 TabOrder = 2 130 TopIndex = -1131 130 end 132 131 object Label1: TLabel 133 132 Left = 352 134 Height = 23 135 Top = 224 136 Width = 90 133 Height = 20 134 Top = 341 135 Width = 78 136 Anchors = [akLeft, akBottom] 137 137 Caption = 'Item action:' 138 138 ParentColor = False … … 140 140 object ComboBoxLookupTableAction: TComboBox 141 141 Left = 464 142 Height = 35143 Top = 224142 Height = 28 143 Top = 341 144 144 Width = 134 145 ItemHeight = 0 145 Anchors = [akLeft, akBottom] 146 ItemHeight = 20 146 147 ItemIndex = 0 147 148 Items.Strings = ( … … 197 198 object CheckBoxOptional: TCheckBox 198 199 Left = 16 199 Height = 2 7200 Top = 56 201 Width = 90200 Height = 24 201 Top = 56 202 Width = 82 202 203 Caption = 'Optional' 203 204 TabOrder = 4 … … 205 206 object CheckBoxRepetitive: TCheckBox 206 207 Left = 184 207 Height = 2 7208 Top = 56 209 Width = 9 9208 Height = 24 209 Top = 56 210 Width = 91 210 211 Caption = 'Repetitive' 211 212 TabOrder = 5 … … 213 214 object CheckBoxAnyExcept: TCheckBox 214 215 Left = 344 215 Height = 2 7216 Top = 56 217 Width = 106216 Height = 24 217 Top = 56 218 Width = 97 218 219 Caption = 'Any except' 219 220 TabOrder = 6 … … 221 222 object CheckBoxEscapedString: TCheckBox 222 223 Left = 488 223 Height = 2 7224 Top = 56 225 Width = 1 44224 Height = 24 225 Top = 56 226 Width = 126 226 227 Caption = 'Escaped strings' 227 228 TabOrder = 7 -
branches/generator/Packages/Common/Common.lpk
r114 r167 11 11 <PathDelim Value="\"/> 12 12 <SearchPaths> 13 <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS) "/>13 <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)-$(BuildMode)"/> 14 14 </SearchPaths> 15 <Parsing> 16 <SyntaxOptions> 17 <SyntaxMode Value="Delphi"/> 18 <CStyleOperator Value="False"/> 19 <AllowLabel Value="False"/> 20 <CPPInline Value="False"/> 21 </SyntaxOptions> 22 </Parsing> 23 <CodeGeneration> 24 <Optimizations> 25 <OptimizationLevel Value="0"/> 26 </Optimizations> 27 </CodeGeneration> 28 <Linking> 29 <Debugging> 30 <GenerateDebugInfo Value="False"/> 31 </Debugging> 32 </Linking> 33 <Other> 34 <CompilerMessages> 35 <IgnoredMessages idx5024="True"/> 36 </CompilerMessages> 37 </Other> 15 38 </CompilerOptions> 16 39 <Description Value="Various libraries"/> 17 40 <License Value="GNU/GPL"/> 18 41 <Version Minor="7"/> 19 <Files Count="2 0">42 <Files Count="22"> 20 43 <Item1> 21 44 <Filename Value="StopWatch.pas"/> … … 106 129 <UnitName Value="UScaleDPI"/> 107 130 </Item20> 131 <Item21> 132 <Filename Value="UTheme.pas"/> 133 <HasRegisterProc Value="True"/> 134 <UnitName Value="UTheme"/> 135 </Item21> 136 <Item22> 137 <Filename Value="UStringTable.pas"/> 138 <UnitName Value="UStringTable"/> 139 </Item22> 108 140 </Files> 109 141 <i18n> -
branches/generator/Packages/Common/Common.pas
r114 r167 5 5 unit Common; 6 6 7 {$warn 5023 off : no warning about unused units} 7 8 interface 8 9 … … 11 12 UMemory, UResetableThread, UPool, ULastOpenedList, URegistry, 12 13 UJobProgressView, UXMLUtils, UApplicationInfo, USyncCounter, UListViewSort, 13 UPersistentForm, UFindFile, UScaleDPI, LazarusPackageIntf; 14 UPersistentForm, UFindFile, UScaleDPI, UTheme, UStringTable, 15 LazarusPackageIntf; 14 16 15 17 implementation … … 25 27 RegisterUnit('UFindFile', @UFindFile.Register); 26 28 RegisterUnit('UScaleDPI', @UScaleDPI.Register); 29 RegisterUnit('UTheme', @UTheme.Register); 27 30 end; 28 31 -
branches/generator/Packages/Common/Languages/UJobProgressView.cs.po
r126 r167 25 25 26 26 #: ujobprogressview.soperations 27 msgid "Operations" 27 #, fuzzy 28 #| msgid "Operations" 29 msgid "Operations:" 28 30 msgstr "Operace" 29 31 -
branches/generator/Packages/Common/Languages/UJobProgressView.po
r114 r167 15 15 16 16 #: ujobprogressview.soperations 17 msgid "Operations "17 msgid "Operations:" 18 18 msgstr "" 19 19 -
branches/generator/Packages/Common/UApplicationInfo.pas
r114 r167 6 6 7 7 uses 8 SysUtils, Registry, Classes, Forms, URegistry;8 SysUtils, Classes, Forms, URegistry, Controls; 9 9 10 10 type … … 14 14 TApplicationInfo = class(TComponent) 15 15 private 16 FDescription: TCaption; 16 17 FIdentification: Byte; 17 18 FLicense: string; … … 33 34 constructor Create(AOwner: TComponent); override; 34 35 property Version: string read GetVersion; 36 function GetRegistryContext: TRegistryContext; 35 37 published 36 38 property Identification: Byte read FIdentification write FIdentification; … … 45 47 property EmailContact: string read FEmailContact write FEmailContact; 46 48 property AppName: string read FAppName write FAppName; 49 property Description: string read FDescription write FDescription; 47 50 property ReleaseDate: TDateTime read FReleaseDate write FReleaseDate; 48 51 property RegistryKey: string read FRegistryKey write FRegistryKey; … … 54 57 55 58 implementation 56 59 57 60 procedure Register; 58 61 begin … … 79 82 end; 80 83 84 function TApplicationInfo.GetRegistryContext: TRegistryContext; 85 begin 86 Result := TRegistryContext.Create(RegistryRoot, RegistryKey); 87 end; 88 81 89 end. -
branches/generator/Packages/Common/UCommon.pas
r114 r167 28 28 unfDNSDomainName = 11); 29 29 30 TFilterMethodMethod = function (FileName: string): Boolean of object; 30 31 var 31 32 ExceptionHandler: TExceptionEvent; … … 63 64 procedure OpenWebPage(URL: string); 64 65 procedure OpenFileInShell(FileName: string); 65 procedure ExecuteProgram( CommandLine:string);66 procedure ExecuteProgram(Executable: string; Parameters: array of string); 66 67 procedure FreeThenNil(var Obj); 67 68 function RemoveQuotes(Text: string): string; … … 71 72 function MergeArray(A, B: array of string): TArrayOfString; 72 73 function LoadFileToStr(const FileName: TFileName): AnsiString; 74 procedure SearchFiles(AList: TStrings; Dir: string; 75 FilterMethod: TFilterMethodMethod = nil); 76 function GetStringPart(var Text: string; Separator: string): string; 77 function PosFromIndex(SubStr: string; Text: string; 78 StartIndex: Integer): Integer; 79 function PosFromIndexReverse(SubStr: string; Text: string; 80 StartIndex: Integer): Integer; 73 81 74 82 … … 112 120 Path := IncludeTrailingPathDelimiter(APath); 113 121 114 Find := FindFirst( UTF8Decode(Path + AFileSpec), faAnyFile xor faDirectory, SearchRec);122 Find := FindFirst(Path + AFileSpec, faAnyFile xor faDirectory, SearchRec); 115 123 while Find = 0 do begin 116 DeleteFile(Path + UTF8Encode(SearchRec.Name));124 DeleteFile(Path + SearchRec.Name); 117 125 118 126 Find := SysUtils.FindNext(SearchRec); … … 429 437 end; 430 438 431 procedure ExecuteProgram( CommandLine:string);439 procedure ExecuteProgram(Executable: string; Parameters: array of string); 432 440 var 433 441 Process: TProcess; 442 I: Integer; 434 443 begin 435 444 try 436 445 Process := TProcess.Create(nil); 437 Process.CommandLine := CommandLine; 446 Process.Executable := Executable; 447 for I := 0 to Length(Parameters) - 1 do 448 Process.Parameters.Add(Parameters[I]); 438 449 Process.Options := [poNoConsole]; 439 450 Process.Execute; … … 456 467 procedure OpenFileInShell(FileName: string); 457 468 begin 458 ExecuteProgram('cmd.exe /c start "' + FileName + '"');469 ExecuteProgram('cmd.exe', ['/c', 'start', FileName]); 459 470 end; 460 471 … … 511 522 end; 512 523 513 524 function DefaultSearchFilter(const FileName: string): Boolean; 525 begin 526 Result := True; 527 end; 528 529 procedure SearchFiles(AList: TStrings; Dir: string; 530 FilterMethod: TFilterMethodMethod = nil); 531 var 532 SR: TSearchRec; 533 begin 534 Dir := IncludeTrailingPathDelimiter(Dir); 535 if FindFirst(Dir + '*', faAnyFile, SR) = 0 then 536 try 537 repeat 538 if (SR.Name = '.') or (SR.Name = '..') or (Assigned(FilterMethod) and (not FilterMethod(SR.Name) or 539 not FilterMethod(Copy(Dir, 3, Length(Dir)) + SR.Name))) then Continue; 540 AList.Add(Dir + SR.Name); 541 if (SR.Attr and faDirectory) <> 0 then 542 SearchFiles(AList, Dir + SR.Name, FilterMethod); 543 until FindNext(SR) <> 0; 544 finally 545 FindClose(SR); 546 end; 547 end; 548 549 function GetStringPart(var Text: string; Separator: string): string; 550 var 551 P: Integer; 552 begin 553 P := Pos(Separator, Text); 554 if P > 0 then begin 555 Result := Copy(Text, 1, P - 1); 556 Delete(Text, 1, P - 1 + Length(Separator)); 557 end else begin 558 Result := Text; 559 Text := ''; 560 end; 561 Result := Trim(Result); 562 Text := Trim(Text); 563 end; 564 565 function PosFromIndex(SubStr: string; Text: string; 566 StartIndex: Integer): Integer; 567 var 568 I, MaxLen: SizeInt; 569 Ptr: PAnsiChar; 570 begin 571 Result := 0; 572 if (StartIndex < 1) or (StartIndex > Length(Text) - Length(SubStr)) then Exit; 573 if Length(SubStr) > 0 then begin 574 MaxLen := Length(Text) - Length(SubStr) + 1; 575 I := StartIndex; 576 Ptr := @Text[StartIndex]; 577 while (I <= MaxLen) do begin 578 if (SubStr[1] = Ptr^) and (CompareByte(Substr[1], Ptr^, Length(SubStr)) = 0) then begin 579 Result := I; 580 Exit; 581 end; 582 Inc(I); 583 Inc(Ptr); 584 end; 585 end; 586 end; 587 588 function PosFromIndexReverse(SubStr: string; Text: string; 589 StartIndex: Integer): Integer; 590 var 591 I: SizeInt; 592 Ptr: PAnsiChar; 593 begin 594 Result := 0; 595 if (StartIndex < 1) or (StartIndex > Length(Text)) then Exit; 596 if Length(SubStr) > 0 then begin 597 I := StartIndex; 598 Ptr := @Text[StartIndex]; 599 while (I > 0) do begin 600 if (SubStr[1] = Ptr^) and (CompareByte(Substr[1], Ptr^, Length(SubStr)) = 0) then begin 601 Result := I; 602 Exit; 603 end; 604 Dec(I); 605 Dec(Ptr); 606 end; 607 end; 608 end; 514 609 515 610 initialization -
branches/generator/Packages/Common/UDebugLog.pas
r114 r167 104 104 if ExtractFileDir(FileName) <> '' then 105 105 ForceDirectories(ExtractFileDir(FileName)); 106 if FileExists(FileName) then LogFile := TFileStream.Create( UTF8Decode(FileName), fmOpenWrite)107 else LogFile := TFileStream.Create( UTF8Decode(FileName), fmCreate);106 if FileExists(FileName) then LogFile := TFileStream.Create(FileName, fmOpenWrite) 107 else LogFile := TFileStream.Create(FileName, fmCreate); 108 108 LogFile.Seek(0, soFromEnd); 109 109 Text := FormatDateTime('hh:nn:ss.zzz', Now) + ': ' + Text + LineEnding; -
branches/generator/Packages/Common/UFindFile.pas
r114 r167 24 24 25 25 uses 26 SysUtils, Classes, Graphics, Controls, Forms, Dialogs , FileCtrl;26 SysUtils, Classes, Graphics, Controls, Forms, Dialogs; 27 27 28 28 type … … 117 117 Attr := 0; 118 118 if ffaReadOnly in FileAttr then Attr := Attr + faReadOnly; 119 if ffaHidden in FileAttr then Attr := Attr + faHidden;120 if ffaSysFile in FileAttr then Attr := Attr + faSysFile;121 if ffaVolumeID in FileAttr then Attr := Attr + faVolumeID;119 if ffaHidden in FileAttr then Attr := Attr + 2; //faHidden; use constant to avoid platform warning 120 if ffaSysFile in FileAttr then Attr := Attr + 4; //faSysFile; use constant to avoid platform warning 121 // Deprecated: if ffaVolumeID in FileAttr then Attr := Attr + faVolumeID; 122 122 if ffaDirectory in FileAttr then Attr := Attr + faDirectory; 123 123 if ffaArchive in FileAttr then Attr := Attr + faArchive; 124 124 if ffaAnyFile in FileAttr then Attr := Attr + faAnyFile; 125 125 126 if SysUtils.FindFirst( UTF8Decode(inPath + FileMask), Attr, Rec) = 0 then126 if SysUtils.FindFirst(inPath + FileMask, Attr, Rec) = 0 then 127 127 try 128 128 repeat 129 s.Add(inPath + UTF8Encode(Rec.Name));129 s.Add(inPath + Rec.Name); 130 130 until SysUtils.FindNext(Rec) <> 0; 131 131 finally … … 135 135 If not InSubFolders then Exit; 136 136 137 if SysUtils.FindFirst( UTF8Decode(inPath + FilterAll), faDirectory, Rec) = 0 then137 if SysUtils.FindFirst(inPath + FilterAll, faDirectory, Rec) = 0 then 138 138 try 139 139 repeat 140 140 if ((Rec.Attr and faDirectory) > 0) and (Rec.Name <> '.') 141 141 and (Rec.Name <> '..') then 142 FileSearch(IncludeTrailingBackslash(inPath + UTF8Encode(Rec.Name)));142 FileSearch(IncludeTrailingBackslash(inPath + Rec.Name)); 143 143 until SysUtils.FindNext(Rec) <> 0; 144 144 finally -
branches/generator/Packages/Common/UJobProgressView.lfm
r114 r167 1 1 object FormJobProgressView: TFormJobProgressView 2 2 Left = 467 3 Height = 2463 Height = 345 4 4 Top = 252 5 Width = 3285 Width = 539 6 6 BorderIcons = [biSystemMenu] 7 ClientHeight = 246 8 ClientWidth = 328 9 Font.Height = -11 10 Font.Name = 'MS Sans Serif' 7 ClientHeight = 345 8 ClientWidth = 539 9 DesignTimePPI = 120 11 10 OnClose = FormClose 12 11 OnCloseQuery = FormCloseQuery 13 12 OnCreate = FormCreate 14 13 OnDestroy = FormDestroy 14 OnHide = FormHide 15 OnShow = FormShow 15 16 Position = poScreenCenter 16 LCLVersion = '1. 6.0.4'17 LCLVersion = '1.8.2.0' 17 18 object PanelOperationsTitle: TPanel 18 19 Left = 0 19 Height = 2420 Height = 32 20 21 Top = 0 21 Width = 32822 Align = alTop 23 BevelOuter = bvNone 24 ClientHeight = 2425 ClientWidth = 32822 Width = 539 23 Align = alTop 24 BevelOuter = bvNone 25 ClientHeight = 32 26 ClientWidth = 539 26 27 FullRepaint = False 27 28 TabOrder = 0 28 29 object LabelOperation: TLabel 29 30 Left = 8 30 Height = 1331 Height = 20 31 32 Top = 8 32 Width = 6633 Width = 76 33 34 Caption = 'Operations:' 34 Font.Height = -1135 Font.Name = 'MS Sans Serif'36 Font.Style = [fsBold]37 35 ParentColor = False 38 36 ParentFont = False … … 41 39 object PanelLog: TPanel 42 40 Left = 0 43 Height = 1 2244 Top = 12445 Width = 32841 Height = 133 42 Top = 212 43 Width = 539 46 44 Align = alClient 47 45 BevelOuter = bvSpace 48 ClientHeight = 1 2249 ClientWidth = 32846 ClientHeight = 133 47 ClientWidth = 539 50 48 TabOrder = 1 51 49 object MemoLog: TMemo 52 50 Left = 8 53 Height = 1 0651 Height = 117 54 52 Top = 8 55 Width = 31253 Width = 523 56 54 Anchors = [akTop, akLeft, akRight, akBottom] 57 55 ReadOnly = True … … 62 60 object PanelProgress: TPanel 63 61 Left = 0 64 Height = 3865 Top = 5066 Width = 32867 Align = alTop 68 BevelOuter = bvNone 69 ClientHeight = 3870 ClientWidth = 32862 Height = 54 63 Top = 106 64 Width = 539 65 Align = alTop 66 BevelOuter = bvNone 67 ClientHeight = 54 68 ClientWidth = 539 71 69 TabOrder = 2 72 70 object ProgressBarPart: TProgressBar 73 Left = 874 Height = 1775 Top = 1676 Width = 31271 Left = 10 72 Height = 24 73 Top = 24 74 Width = 523 77 75 Anchors = [akTop, akLeft, akRight] 78 76 TabOrder = 0 … … 80 78 object LabelEstimatedTimePart: TLabel 81 79 Left = 8 82 Height = 1380 Height = 20 83 81 Top = -2 84 Width = 7182 Width = 103 85 83 Caption = 'Estimated time:' 86 84 ParentColor = False … … 89 87 object PanelOperations: TPanel 90 88 Left = 0 91 Height = 2692 Top = 2493 Width = 32894 Align = alTop 95 BevelOuter = bvNone 96 ClientHeight = 2697 ClientWidth = 32889 Height = 42 90 Top = 64 91 Width = 539 92 Align = alTop 93 BevelOuter = bvNone 94 ClientHeight = 42 95 ClientWidth = 539 98 96 FullRepaint = False 99 97 TabOrder = 3 100 98 object ListViewJobs: TListView 101 99 Left = 8 102 Height = 16100 Height = 32 103 101 Top = 5 104 Width = 312102 Width = 523 105 103 Anchors = [akTop, akLeft, akRight, akBottom] 106 104 AutoWidthLastColumn = True … … 109 107 Columns = < 110 108 item 111 Width = 312109 Width = 523 112 110 end> 113 111 OwnerData = True … … 122 120 object PanelProgressTotal: TPanel 123 121 Left = 0 124 Height = 36125 Top = 88126 Width = 328127 Align = alTop 128 BevelOuter = bvNone 129 ClientHeight = 36130 ClientWidth = 328122 Height = 52 123 Top = 160 124 Width = 539 125 Align = alTop 126 BevelOuter = bvNone 127 ClientHeight = 52 128 ClientWidth = 539 131 129 TabOrder = 4 132 130 object LabelEstimatedTimeTotal: TLabel 133 131 Left = 8 134 Height = 13132 Height = 20 135 133 Top = 0 136 Width = 97134 Width = 141 137 135 Caption = 'Total estimated time:' 138 136 ParentColor = False … … 140 138 object ProgressBarTotal: TProgressBar 141 139 Left = 8 142 Height = 16143 Top = 16144 Width = 312140 Height = 24 141 Top = 24 142 Width = 523 145 143 Anchors = [akTop, akLeft, akRight] 146 144 TabOrder = 0 145 end 146 end 147 object PanelText: TPanel 148 Left = 0 149 Height = 32 150 Top = 32 151 Width = 539 152 Align = alTop 153 BevelOuter = bvNone 154 ClientHeight = 32 155 ClientWidth = 539 156 TabOrder = 5 157 object LabelText: TLabel 158 Left = 8 159 Height = 24 160 Top = 8 161 Width = 525 162 Anchors = [akTop, akLeft, akRight] 163 AutoSize = False 164 ParentColor = False 147 165 end 148 166 end -
branches/generator/Packages/Common/UJobProgressView.pas
r114 r167 7 7 uses 8 8 SysUtils, Variants, Classes, Graphics, Controls, Forms, Syncobjs, 9 Dialogs, ComCtrls, StdCtrls, ExtCtrls, Contnrs, UThreading, 9 Dialogs, ComCtrls, StdCtrls, ExtCtrls, Contnrs, UThreading, Math, 10 10 DateUtils; 11 11 … … 13 13 EstimatedTimeShowTreshold = 4; 14 14 EstimatedTimeShowTresholdTotal = 1; 15 MemoLogHeight = 200;16 15 UpdateInterval = 100; // ms 17 16 … … 24 23 FLock: TCriticalSection; 25 24 FOnChange: TNotifyEvent; 25 FText: string; 26 26 FValue: Integer; 27 27 FMax: Integer; 28 28 procedure SetMax(const AValue: Integer); 29 procedure SetText(AValue: string); 29 30 procedure SetValue(const AValue: Integer); 30 31 public … … 35 36 property Value: Integer read FValue write SetValue; 36 37 property Max: Integer read FMax write SetMax; 38 property Text: string read FText write SetText; 37 39 property OnChange: TNotifyEvent read FOnChange write FOnChange; 38 40 end; … … 69 71 end; 70 72 73 TJobs = class(TObjectList) 74 end; 75 71 76 TJobThread = class(TListedThread) 72 77 procedure Execute; override; … … 80 85 TFormJobProgressView = class(TForm) 81 86 ImageList1: TImageList; 87 LabelText: TLabel; 82 88 Label2: TLabel; 83 89 LabelOperation: TLabel; … … 86 92 ListViewJobs: TListView; 87 93 MemoLog: TMemo; 94 PanelText: TPanel; 88 95 PanelProgressTotal: TPanel; 89 96 PanelOperationsTitle: TPanel; … … 94 101 ProgressBarTotal: TProgressBar; 95 102 TimerUpdate: TTimer; 103 procedure FormHide(Sender: TObject); 104 procedure FormShow(Sender: TObject); 105 procedure ReloadJobList; 96 106 procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); 97 107 procedure FormDestroy(Sender: TObject); … … 100 110 procedure FormCreate(Sender: TObject); 101 111 procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); 112 procedure UpdateHeight; 102 113 public 103 114 JobProgressView: TJobProgressView; … … 118 129 TotalStartTime: TDateTime; 119 130 Log: TStringList; 131 FForm: TFormJobProgressView; 120 132 procedure SetTerminate(const AValue: Boolean); 121 133 procedure UpdateProgress; 122 procedure ReloadJobList;123 procedure StartJobs;124 procedure UpdateHeight;125 134 procedure JobProgressChange(Sender: TObject); 126 135 public 127 Form: TFormJobProgressView; 128 Jobs: TObjectList; // TListObject<TJob> 136 Jobs: TJobs; 129 137 CurrentJob: TJob; 130 138 CurrentJobIndex: Integer; … … 132 140 destructor Destroy; override; 133 141 procedure Clear; 134 procedureAddJob(Title: string; Method: TJobProgressViewMethod;135 NoThreaded: Boolean = False; WaitFor: Boolean = False) ;136 procedure Start (AAutoClose: Boolean = True);142 function AddJob(Title: string; Method: TJobProgressViewMethod; 143 NoThreaded: Boolean = False; WaitFor: Boolean = False): TJob; 144 procedure Start; 137 145 procedure Stop; 138 146 procedure TermSleep(Delay: Integer); 147 property Form: TFormJobProgressView read FForm; 139 148 property Terminate: Boolean read FTerminate write SetTerminate; 140 149 published … … 166 175 STotalEstimatedTime = 'Total estimated time: %s'; 167 176 SFinished = 'Finished'; 168 SOperations = 'Operations ';177 SOperations = 'Operations:'; 169 178 170 179 procedure Register; … … 172 181 RegisterComponents('Common', [TJobProgressView]); 173 182 end; 183 184 { TJobThread } 174 185 175 186 procedure TJobThread.Execute; … … 190 201 end; 191 202 192 procedure TJobProgressView.AddJob(Title: string; Method: TJobProgressViewMethod; 193 NoThreaded: Boolean = False; WaitFor: Boolean = False); 203 { TFormJobProgressView } 204 205 procedure TFormJobProgressView.UpdateHeight; 194 206 var 195 NewJob: TJob; 196 begin 197 NewJob := TJob.Create; 198 NewJob.ProgressView := Self; 199 NewJob.Title := Title; 200 NewJob.Method := Method; 201 NewJob.NoThreaded := NoThreaded; 202 NewJob.WaitFor := WaitFor; 203 NewJob.Progress.Max := 100; 204 NewJob.Progress.Reset; 205 NewJob.Progress.OnChange := JobProgressChange; 206 Jobs.Add(NewJob); 207 H: Integer; 208 PanelOperationsVisible: Boolean; 209 PanelOperationsHeight: Integer; 210 PanelProgressVisible: Boolean; 211 PanelProgressTotalVisible: Boolean; 212 PanelLogVisible: Boolean; 213 MemoLogHeight: Integer = 200; 214 I: Integer; 215 ItemRect: TRect; 216 MaxH: Integer; 217 begin 218 H := PanelOperationsTitle.Height; 219 PanelOperationsVisible := JobProgressView.Jobs.Count > 0; 220 if PanelOperationsVisible <> PanelOperations.Visible then 221 PanelOperations.Visible := PanelOperationsVisible; 222 if ListViewJobs.Items.Count > 0 then begin 223 Maxh := 0; 224 for I := 0 to ListViewJobs.Items.Count - 1 do 225 begin 226 ItemRect := ListViewJobs.Items[i].DisplayRect(drBounds); 227 Maxh := Max(Maxh, ItemRect.Top + (ItemRect.Bottom - ItemRect.Top)); 228 end; 229 PanelOperationsHeight := Scale96ToScreen(12) + Maxh; 230 end else PanelOperationsHeight := Scale96ToScreen(8); 231 if PanelOperationsHeight <> PanelOperations.Height then 232 PanelOperations.Height := PanelOperationsHeight; 233 if PanelOperationsVisible then 234 H := H + PanelOperations.Height; 235 236 PanelProgressVisible := (JobProgressView.Jobs.Count > 0) and not JobProgressView.Finished; 237 if PanelProgressVisible <> PanelProgress.Visible then 238 PanelProgress.Visible := PanelProgressVisible; 239 if PanelProgressVisible then 240 H := H + PanelProgress.Height; 241 PanelProgressTotalVisible := (JobProgressView.Jobs.Count > 1) and not JobProgressView.Finished; 242 if PanelProgressTotalVisible <> PanelProgressTotal.Visible then 243 PanelProgressTotal.Visible := PanelProgressTotalVisible; 244 if PanelProgressTotalVisible then 245 H := H + PanelProgressTotal.Height; 246 Constraints.MinHeight := H; 247 PanelLogVisible := MemoLog.Lines.Count > 0; 248 if PanelLogVisible <> PanelLog.Visible then 249 PanelLog.Visible := PanelLogVisible; 250 if PanelLogVisible then 251 H := H + Scale96ToScreen(MemoLogHeight); 252 if PanelText.Visible then 253 H := H + PanelText.Height; 254 if Height <> H then begin 255 Height := H; 256 Top := (Screen.Height - H) div 2; 257 end; 258 end; 259 260 procedure TFormJobProgressView.TimerUpdateTimer(Sender: TObject); 261 var 262 ProgressBarPartVisible: Boolean; 263 ProgressBarTotalVisible: Boolean; 264 begin 265 JobProgressView.UpdateProgress; 266 if Visible and (not ProgressBarPart.Visible) and 267 Assigned(JobProgressView.CurrentJob) and 268 (JobProgressView.CurrentJob.Progress.Value > 0) then begin 269 ProgressBarPartVisible := True; 270 if ProgressBarPartVisible <> ProgressBarPart.Visible then 271 ProgressBarPart.Visible := ProgressBarPartVisible; 272 ProgressBarTotalVisible := True; 273 if ProgressBarTotalVisible <> ProgressBarTotal.Visible then 274 ProgressBarTotal.Visible := ProgressBarTotalVisible; 275 end; 276 if not Visible then begin 277 TimerUpdate.Interval := UpdateInterval; 278 if not JobProgressView.OwnerDraw then Show; 279 end; 280 if Assigned(JobProgressView.CurrentJob) then begin 281 LabelText.Caption := JobProgressView.CurrentJob.Progress.Text; 282 if LabelText.Caption <> '' then begin 283 PanelText.Visible := True; 284 UpdateHeight; 285 end; 286 end; 287 end; 288 289 procedure TFormJobProgressView.FormDestroy(Sender:TObject); 290 begin 291 end; 292 293 procedure TFormJobProgressView.ListViewJobsData(Sender: TObject; Item: TListItem); 294 begin 295 if (Item.Index >= 0) and (Item.Index < JobProgressView.Jobs.Count) then 296 with TJob(JobProgressView.Jobs[Item.Index]) do begin 297 Item.Caption := Title; 298 if Item.Index = JobProgressView.CurrentJobIndex then Item.ImageIndex := 1 299 else if Finished then Item.ImageIndex := 0 300 else Item.ImageIndex := 2; 301 Item.Data := JobProgressView.Jobs[Item.Index]; 302 end; 303 end; 304 305 procedure TFormJobProgressView.FormClose(Sender: TObject; 306 var CloseAction: TCloseAction); 307 begin 308 end; 309 310 procedure TFormJobProgressView.FormCreate(Sender: TObject); 311 begin 312 Caption := SPleaseWait; 313 try 314 //Animate1.FileName := ExtractFileDir(UTF8Encode(Application.ExeName)) + 315 // DirectorySeparator + 'horse.avi'; 316 //Animate1.Active := True; 317 except 318 319 end; 320 end; 321 322 procedure TFormJobProgressView.ReloadJobList; 323 begin 324 // Workaround for not showing first line 325 //Form.ListViewJobs.Items.Count := Jobs.Count + 1; 326 //Form.ListViewJobs.Refresh; 327 328 if ListViewJobs.Items.Count <> JobProgressView.Jobs.Count then 329 ListViewJobs.Items.Count := JobProgressView.Jobs.Count; 330 ListViewJobs.Refresh; 331 Application.ProcessMessages; 332 UpdateHeight; 333 end; 334 335 procedure TFormJobProgressView.FormShow(Sender: TObject); 336 begin 337 ReloadJobList; 338 end; 339 340 procedure TFormJobProgressView.FormHide(Sender: TObject); 341 begin 342 JobProgressView.Jobs.Clear; 343 ReloadJobList; 344 end; 345 346 procedure TFormJobProgressView.FormCloseQuery(Sender: TObject; var CanClose: Boolean); 347 begin 348 CanClose := JobProgressView.Finished; 349 JobProgressView.Terminate := True; 350 Caption := SPleaseWait + STerminate; 351 end; 352 353 354 { TJobProgressView } 355 356 function TJobProgressView.AddJob(Title: string; Method: TJobProgressViewMethod; 357 NoThreaded: Boolean = False; WaitFor: Boolean = False): TJob; 358 begin 359 Result := TJob.Create; 360 Result.ProgressView := Self; 361 Result.Title := Title; 362 Result.Method := Method; 363 Result.NoThreaded := NoThreaded; 364 Result.WaitFor := WaitFor; 365 Result.Progress.Max := 100; 366 Result.Progress.Reset; 367 Result.Progress.OnChange := JobProgressChange; 368 Jobs.Add(Result); 207 369 //ReloadJobList; 208 370 end; 209 371 210 procedure TJobProgressView.Start(AAutoClose: Boolean = True); 211 begin 212 AutoClose := AAutoClose; 213 StartJobs; 214 end; 215 216 procedure TJobProgressView.StartJobs; 372 procedure TJobProgressView.Start; 217 373 var 218 374 I: Integer; … … 229 385 Form.MemoLog.Clear; 230 386 387 Form.PanelText.Visible := False; 231 388 Form.LabelEstimatedTimePart.Visible := False; 232 389 Form.LabelEstimatedTimeTotal.Visible := False; … … 258 415 Form.ProgressBarPart.Visible := False; 259 416 //Show; 260 ReloadJobList;417 Form.ReloadJobList; 261 418 Application.ProcessMessages; 262 419 if NoThreaded then begin … … 296 453 //if Visible then Hide; 297 454 Form.MemoLog.Lines.Assign(Log); 298 if (Form.MemoLog.Lines.Count = 0) and AutoClose then begin455 if (Form.MemoLog.Lines.Count = 0) and FAutoClose then begin 299 456 Form.Hide; 300 457 end; 301 Clear;458 if not Form.Visible then Clear; 302 459 Form.Caption := SFinished; 303 460 //LabelEstimatedTimePart.Visible := False; 304 461 Finished := True; 305 462 CurrentJobIndex := -1; 306 ReloadJobList; 307 end; 308 end; 309 310 procedure TJobProgressView.UpdateHeight; 311 var 312 H: Integer; 313 PanelOperationsVisible: Boolean; 314 PanelOperationsHeight: Integer; 315 PanelProgressVisible: Boolean; 316 PanelProgressTotalVisible: Boolean; 317 PanelLogVisible: Boolean; 318 begin 319 with Form do begin 320 H := PanelOperationsTitle.Height; 321 PanelOperationsVisible := Jobs.Count > 0; 322 if PanelOperationsVisible <> PanelOperations.Visible then 323 PanelOperations.Visible := PanelOperationsVisible; 324 PanelOperationsHeight := 8 + 18 * Jobs.Count; 325 if PanelOperationsHeight <> PanelOperations.Height then 326 PanelOperations.Height := PanelOperationsHeight; 327 if PanelOperationsVisible then 328 H := H + PanelOperations.Height; 329 330 PanelProgressVisible := (Jobs.Count > 0) and not Finished; 331 if PanelProgressVisible <> PanelProgress.Visible then 332 PanelProgress.Visible := PanelProgressVisible; 333 if PanelProgressVisible then 334 H := H + PanelProgress.Height; 335 PanelProgressTotalVisible := (Jobs.Count > 1) and not Finished; 336 if PanelProgressTotalVisible <> PanelProgressTotal.Visible then 337 PanelProgressTotal.Visible := PanelProgressTotalVisible; 338 if PanelProgressTotalVisible then 339 H := H + PanelProgressTotal.Height; 340 Constraints.MinHeight := H; 341 PanelLogVisible := MemoLog.Lines.Count > 0; 342 if PanelLogVisible <> PanelLog.Visible then 343 PanelLog.Visible := PanelLogVisible; 344 if PanelLogVisible then 345 H := H + MemoLogHeight; 346 if Height <> H then Height := H; 463 Form.ReloadJobList; 347 464 end; 348 465 end; … … 352 469 if Assigned(FOnOwnerDraw) then 353 470 FOnOwnerDraw(Self); 354 end;355 356 procedure TFormJobProgressView.TimerUpdateTimer(Sender: TObject);357 var358 ProgressBarPartVisible: Boolean;359 ProgressBarTotalVisible: Boolean;360 begin361 JobProgressView.UpdateProgress;362 if Visible and (not ProgressBarPart.Visible) and363 Assigned(JobProgressView.CurrentJob) and364 (JobProgressView.CurrentJob.Progress.Value > 0) then begin365 ProgressBarPartVisible := True;366 if ProgressBarPartVisible <> ProgressBarPart.Visible then367 ProgressBarPart.Visible := ProgressBarPartVisible;368 ProgressBarTotalVisible := True;369 if ProgressBarTotalVisible <> ProgressBarTotal.Visible then370 ProgressBarTotal.Visible := ProgressBarTotalVisible;371 end;372 if not Visible then begin373 TimerUpdate.Interval := UpdateInterval;374 if not JobProgressView.OwnerDraw then Show;375 end;376 end;377 378 procedure TFormJobProgressView.FormDestroy(Sender:TObject);379 begin380 end;381 382 procedure TFormJobProgressView.ListViewJobsData(Sender: TObject; Item: TListItem);383 begin384 if (Item.Index >= 0) and (Item.Index < JobProgressView.Jobs.Count) then385 with TJob(JobProgressView.Jobs[Item.Index]) do begin386 Item.Caption := Title;387 if Item.Index = JobProgressView.CurrentJobIndex then Item.ImageIndex := 1388 else if Finished then Item.ImageIndex := 0389 else Item.ImageIndex := 2;390 Item.Data := JobProgressView.Jobs[Item.Index];391 end;392 end;393 394 procedure TFormJobProgressView.FormClose(Sender: TObject;395 var CloseAction: TCloseAction);396 begin397 ListViewJobs.Clear;398 end;399 400 procedure TFormJobProgressView.FormCreate(Sender: TObject);401 begin402 Caption := SPleaseWait;403 try404 //Animate1.FileName := ExtractFileDir(UTF8Encode(Application.ExeName)) +405 // DirectorySeparator + 'horse.avi';406 //Animate1.Active := True;407 except408 409 end;410 471 end; 411 472 … … 426 487 Sleep(Quantum); 427 488 end; 428 end;429 430 procedure TFormJobProgressView.FormCloseQuery(Sender: TObject; var CanClose: Boolean);431 begin432 CanClose := JobProgressView.Finished;433 JobProgressView.Terminate := True;434 Caption := SPleaseWait + STerminate;435 489 end; 436 490 … … 490 544 end; 491 545 492 procedure TJobProgressView.ReloadJobList;493 begin494 UpdateHeight;495 // Workaround for not showing first line496 Form.ListViewJobs.Items.Count := Jobs.Count + 1;497 Form.ListViewJobs.Refresh;498 499 if Form.ListViewJobs.Items.Count <> Jobs.Count then500 Form.ListViewJobs.Items.Count := Jobs.Count;501 Form.ListViewJobs.Refresh;502 //Application.ProcessMessages;503 end;504 505 546 constructor TJobProgressView.Create(TheOwner: TComponent); 506 547 begin 507 548 inherited; 508 549 if not (csDesigning in ComponentState) then begin 509 F orm := TFormJobProgressView.Create(Self);510 F orm.JobProgressView := Self;511 end; 512 Jobs := T ObjectList.Create;550 FForm := TFormJobProgressView.Create(Self); 551 FForm.JobProgressView := Self; 552 end; 553 Jobs := TJobs.Create; 513 554 Log := TStringList.Create; 514 555 //PanelOperationsTitle.Height := 80; 515 ShowDelay := 0; //1000; // ms 556 AutoClose := True; 557 ShowDelay := 0; 516 558 end; 517 559 … … 519 561 begin 520 562 Jobs.Clear; 563 Log.Clear; 521 564 //ReloadJobList; 522 565 end; … … 528 571 inherited; 529 572 end; 573 574 { TProgress } 530 575 531 576 procedure TProgress.SetMax(const AValue: Integer); … … 536 581 if FMax < 1 then FMax := 1; 537 582 if FValue >= FMax then FValue := FMax; 583 finally 584 FLock.Release; 585 end; 586 end; 587 588 procedure TProgress.SetText(AValue: string); 589 begin 590 try 591 FLock.Acquire; 592 if FText = AValue then Exit; 593 FText := AValue; 538 594 finally 539 595 FLock.Release; … … 563 619 end; 564 620 565 { TProgress }566 567 621 procedure TProgress.Increment; 568 622 begin -
branches/generator/Packages/Common/UListViewSort.pas
r114 r167 81 81 FOnChange: TNotifyEvent; 82 82 FStringGrid1: TStringGrid; 83 procedure DoOnKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);84 procedure DoOnResize(Sender: TObject);83 procedure GridDoOnKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); 84 procedure GridDoOnResize(Sender: TObject); 85 85 public 86 86 constructor Create(AOwner: TComponent); override; … … 110 110 { TListViewFilter } 111 111 112 procedure TListViewFilter. DoOnKeyUp(Sender: TObject; var Key: Word;112 procedure TListViewFilter.GridDoOnKeyUp(Sender: TObject; var Key: Word; 113 113 Shift: TShiftState); 114 114 begin … … 117 117 end; 118 118 119 procedure TListViewFilter. DoOnResize(Sender: TObject);119 procedure TListViewFilter.GridDoOnResize(Sender: TObject); 120 120 begin 121 121 FStringGrid1.DefaultRowHeight := FStringGrid1.Height; … … 135 135 FStringGrid1.Options := [goFixedHorzLine, goFixedVertLine, goVertLine, 136 136 goHorzLine, goRangeSelect, goEditing, goAlwaysShowEditor, goSmoothScroll]; 137 FStringGrid1.OnKeyUp := DoOnKeyUp;138 FStringGrid1.OnResize := DoOnResize;137 FStringGrid1.OnKeyUp := GridDoOnKeyUp; 138 FStringGrid1.OnResize := GridDoOnResize; 139 139 end; 140 140 … … 142 142 var 143 143 I: Integer; 144 R: TRect; 144 145 begin 145 146 with FStringGrid1 do begin 146 //Columns.Clear;147 147 while Columns.Count > ListView.Columns.Count do Columns.Delete(Columns.Count - 1); 148 148 while Columns.Count < ListView.Columns.Count do Columns.Add; 149 149 for I := 0 to ListView.Columns.Count - 1 do begin 150 150 Columns[I].Width := ListView.Columns[I].Width; 151 if Selection.Left = I then begin 152 R := CellRect(I, 0); 153 Editor.Left := R.Left + 2; 154 Editor.Width := R.Width - 4; 155 end; 151 156 end; 152 157 end; … … 197 202 if AMsg.Msg = WM_NOTIFY then 198 203 begin 199 Code := PHDNotify(vMsgNotify.NMHdr)^.Hdr.Code;204 Code := NMHDR(PHDNotify(vMsgNotify.NMHdr)^.Hdr).Code; 200 205 case Code of 201 206 HDN_ENDTRACKA, HDN_ENDTRACKW: … … 353 358 TP1: TPoint; 354 359 XBias, YBias: Integer; 355 OldColor: TColor; 360 PenColor: TColor; 361 BrushColor: TColor; 356 362 BiasTop, BiasLeft: Integer; 357 363 Rect1: TRect; … … 365 371 Item.Left := 0; 366 372 GetCheckBias(XBias, YBias, BiasTop, BiasLeft, ListView); 367 OldColor := ListView.Canvas.Pen.Color; 373 PenColor := ListView.Canvas.Pen.Color; 374 BrushColor := ListView.Canvas.Brush.Color; 368 375 //TP1 := Item.GetPosition; 369 376 lRect := Item.DisplayRect(drBounds); // Windows 7 workaround … … 377 384 ItemLeft := Item.Left; 378 385 ItemLeft := 23; // Windows 7 workaround 379 386 380 387 Rect1.Left := ItemLeft - CheckWidth - BiasLeft + 1 + XBias; 381 388 //ShowMessage(IntToStr(Tp1.Y) + ', ' + IntToStr(BiasTop) + ', ' + IntToStr(XBias)); … … 408 415 end; 409 416 //ListView.Canvas.Brush.Color := ListView.Color; 410 ListView.Canvas.Brush.Color := clWindow;411 ListView.Canvas.Pen.Color := OldColor;417 ListView.Canvas.Brush.Color := BrushColor; 418 ListView.Canvas.Pen.Color := PenColor; 412 419 end; 413 420 … … 476 483 FHeaderHandle := ListView_GetHeader(FListView.Handle); 477 484 for I := 0 to FListView.Columns.Count - 1 do begin 485 {$push}{$warn 5057 off} 478 486 FillChar(Item, SizeOf(THDItem), 0); 487 {$pop} 479 488 Item.Mask := HDI_FORMAT; 480 489 Header_GetItem(FHeaderHandle, I, Item); -
branches/generator/Packages/Common/UMemory.pas
r114 r167 24 24 constructor Create; 25 25 destructor Destroy; override; 26 procedure WriteMemory(Position: Integer; Memory: TMemory); 27 procedure ReadMemory(Position: Integer; Memory: TMemory); 26 28 property Data: PByte read FData; 27 29 property Size: Integer read FSize write SetSize; … … 108 110 end; 109 111 112 procedure TMemory.WriteMemory(Position: Integer; Memory: TMemory); 113 begin 114 Move(Memory.FData, PByte(@FData + Position)^, Memory.Size); 115 end; 116 117 procedure TMemory.ReadMemory(Position: Integer; Memory: TMemory); 118 begin 119 Move(PByte(@FData + Position)^, Memory.FData, Memory.Size); 120 end; 121 110 122 end. 111 123 -
branches/generator/Packages/Common/UPersistentForm.pas
r114 r167 8 8 9 9 uses 10 Classes, SysUtils, Forms, URegistry, LCLIntf, Registry, Controls, ComCtrls; 10 Classes, SysUtils, Forms, URegistry, LCLIntf, Registry, Controls, ComCtrls, 11 ExtCtrls; 11 12 12 13 type … … 56 57 I: Integer; 57 58 WinControl: TWinControl; 58 Count: Integer;59 59 begin 60 60 if Control is TListView then begin … … 72 72 end; 73 73 74 if (Control is TPanel) then begin 75 with Form, TRegistryEx.Create do 76 try 77 RootKey := RegistryContext.RootKey; 78 OpenKey(RegistryContext.Key + '\Forms\' + Form.Name + '\' + Control.Name, True); 79 if (TPanel(Control).Align = alRight) or (TPanel(Control).Align = alLeft) then begin 80 if ValueExists('Width') then 81 TPanel(Control).Width := ReadInteger('Width'); 82 end; 83 if (TPanel(Control).Align = alTop) or (TPanel(Control).Align = alBottom) then begin 84 if ValueExists('Height') then 85 TPanel(Control).Height := ReadInteger('Height'); 86 end; 87 finally 88 Free; 89 end; 90 end; 91 74 92 if Control is TWinControl then begin 75 93 WinControl := TWinControl(Control); … … 96 114 for I := 0 to TListView(Control).Columns.Count - 1 do begin 97 115 WriteInteger('ColWidth' + IntToStr(I), TListView(Control).Columns[I].Width); 116 end; 117 finally 118 Free; 119 end; 120 end; 121 122 if (Control is TPanel) then begin 123 with Form, TRegistryEx.Create do 124 try 125 RootKey := RegistryContext.RootKey; 126 OpenKey(RegistryContext.Key + '\Forms\' + Form.Name + '\' + Control.Name, True); 127 if (TPanel(Control).Align = alRight) or (TPanel(Control).Align = alLeft) then begin 128 WriteInteger('Width', TPanel(Control).Width); 129 end; 130 if (TPanel(Control).Align = alTop) or (TPanel(Control).Align = alBottom) then begin 131 WriteInteger('Height', TPanel(Control).Height); 98 132 end; 99 133 finally … … 217 251 218 252 procedure TPersistentForm.Load(Form: TForm; DefaultMaximized: Boolean = False); 219 var220 LoadDefaults: Boolean;221 253 begin 222 254 Self.Form := Form; … … 230 262 231 263 if not EqualRect(FormNormalSize, FormRestoredSize) or 232 (LoadDefaults and DefaultMaximized)then begin264 DefaultMaximized then begin 233 265 // Restore to maximized state 234 266 Form.WindowState := wsNormal; -
branches/generator/Packages/Common/URegistry.pas
r114 r167 9 9 10 10 type 11 TRegistryRoot = (rrKeyClassesRoot = HKEY($80000000), 12 rrKeyCurrentUser = HKEY($80000001), 13 rrKeyLocalMachine = HKEY($80000002), 14 rrKeyUsers = HKEY($80000003), 15 rrKeyPerformanceData = HKEY($80000004), 16 rrKeyCurrentConfig = HKEY($80000005), 17 rrKeyDynData = HKEY($80000006)); 11 TRegistryRoot = (rrKeyClassesRoot, rrKeyCurrentUser, rrKeyLocalMachine, 12 rrKeyUsers, rrKeyPerformanceData, rrKeyCurrentConfig, rrKeyDynData); 18 13 19 14 { TRegistryContext } … … 23 18 Key: string; 24 19 class operator Equal(A, B: TRegistryContext): Boolean; 20 function Create(RootKey: TRegistryRoot; Key: string): TRegistryContext; overload; 21 function Create(RootKey: HKEY; Key: string): TRegistryContext; overload; 25 22 end; 26 23 … … 43 40 end; 44 41 45 function RegContext(RootKey: HKEY; Key: string): TRegistryContext; 46 42 const 43 RegistryRootHKEY: array[TRegistryRoot] of HKEY = (HKEY_CLASSES_ROOT, 44 HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_PERFORMANCE_DATA, 45 HKEY_CURRENT_CONFIG, HKEY_DYN_DATA); 47 46 48 47 implementation 49 48 50 function RegContext(RootKey: HKEY; Key: string): TRegistryContext;51 begin52 Result.RootKey := RootKey;53 Result.Key := Key;54 end;55 49 56 50 { TRegistryContext } … … 59 53 begin 60 54 Result := (A.Key = B.Key) and (A.RootKey = B.RootKey); 55 end; 56 57 function TRegistryContext.Create(RootKey: TRegistryRoot; Key: string): TRegistryContext; 58 begin 59 Result.RootKey := RegistryRootHKEY[RootKey]; 60 Result.Key := Key; 61 end; 62 63 function TRegistryContext.Create(RootKey: HKEY; Key: string): TRegistryContext; 64 begin 65 Result.RootKey := RootKey; 66 Result.Key := Key; 61 67 end; 62 68 -
branches/generator/Packages/Common/UResetableThread.pas
r114 r167 156 156 FThread.Name := 'ResetableThread'; 157 157 FThread.Parent := Self; 158 FThread. Resume;158 FThread.Start; 159 159 end; 160 160 -
branches/generator/Packages/Common/UScaleDPI.pas
r114 r167 215 215 I: Integer; 216 216 begin 217 ImgList.BeginUpdate; 217 218 NewWidth := ScaleX(ImgList.Width, FromDPI.X); 218 219 NewHeight := ScaleY(ImgList.Height, FromDPI.Y); … … 248 249 Temp[i].Free; 249 250 end; 251 ImgList.EndUpdate; 250 252 end; 251 253 … … 284 286 WinControl: TWinControl; 285 287 ToolBarControl: TToolBar; 286 OldAnchors: TAnchors;287 OldAutoSize: Boolean;288 //OldAnchors: TAnchors; 289 //OldAutoSize: Boolean; 288 290 begin 289 291 //if Control is TMemo then Exit; … … 316 318 MinWidth := ScaleX(MinWidth, FromDPI.X); 317 319 MinHeight := ScaleY(MinHeight, FromDPI.Y); 318 Width := ScaleX(Width, FromDPI.X); 320 // Workaround to bad band width auto sizing 321 //Width := ScaleX(Width, FromDPI.X); 322 Width := ScaleX(Control.Width + 28, FromDPI.X); 319 323 //Control.Invalidate; 320 324 end; 325 // Workaround for bad autosizing of coolbar 326 if AutoSize then begin 327 AutoSize := False; 328 Height := ScaleY(Height, FromDPI.Y); 329 AutoSize := True; 330 end; 321 331 EndUpdate; 322 332 end; -
branches/generator/Packages/Common/UThreading.pas
r114 r167 30 30 Name: string; 31 31 procedure Execute; virtual; abstract; 32 procedure Resume; virtual; abstract;33 procedure Suspend; virtual; abstract;34 32 procedure Start; virtual; abstract; 35 33 procedure Terminate; virtual; abstract; … … 81 79 procedure Sleep(Delay: Integer); override; 82 80 procedure Execute; override; 83 procedure Resume; override;84 procedure Suspend; override;85 81 procedure Start; override; 86 82 procedure Terminate; override; … … 134 130 Thread.FreeOnTerminate := False; 135 131 Thread.Method := Method; 136 Thread. Resume;132 Thread.Start; 137 133 while (Thread.State = ttsRunning) or (Thread.State = ttsReady) do begin 138 134 if MainThreadID = ThreadID then Application.ProcessMessages; … … 155 151 Thread.Method := Method; 156 152 Thread.OnFinished := CallBack; 157 Thread. Resume;153 Thread.Start; 158 154 //if Thread.State = ttsExceptionOccured then 159 155 // raise Exception.Create(Thread.ExceptionMessage); … … 313 309 procedure TListedThread.Execute; 314 310 begin 315 end;316 317 procedure TListedThread.Resume;318 begin319 FThread.Resume;320 end;321 322 procedure TListedThread.Suspend;323 begin324 FThread.Suspend;325 311 end; 326 312 -
branches/generator/Packages/Common/UURI.pas
r114 r167 89 89 function LeftCutString(var Source: string; out Output: string; Delimiter: string; Allowed: string = ''): Boolean; 90 90 var 91 I , J: Integer;91 I: Integer; 92 92 Matched: Boolean; 93 93 begin … … 113 113 function RightCutString(var Source: string; out Output: string; Delimiter: string; Allowed: string = ''): Boolean; 114 114 var 115 I , J: Integer;115 I: Integer; 116 116 Matched: Boolean; 117 117 begin … … 202 202 203 203 procedure TURI.SetAsString(Value: string); 204 var205 HostAddr: string;206 HostPort: string;207 204 begin 208 205 LeftCutString(Value, Scheme, ':'); -
branches/generator/Packages/Common/UXMLUtils.pas
r136 r167 7 7 uses 8 8 {$IFDEF WINDOWS}Windows,{$ENDIF} 9 Classes, SysUtils, DateUtils, XMLRead, DOM;9 Classes, SysUtils, DateUtils, DOM, XMLRead; 10 10 11 11 function XMLTimeToDateTime(XMLDateTime: string): TDateTime; 12 function DateTimeToXMLTime(Value: TDateTime; ApplyLocalBias: Boolean = True): WideString;12 function DateTimeToXMLTime(Value: TDateTime; ApplyLocalBias: Boolean = True): string; 13 13 procedure WriteInteger(Node: TDOMNode; Name: string; Value: Integer); 14 14 procedure WriteInt64(Node: TDOMNode; Name: string; Value: Int64); … … 50 50 TimeZoneInfo: TTimeZoneInformation; 51 51 begin 52 {$push}{$warn 5057 off} 52 53 case GetTimeZoneInformation(TimeZoneInfo) of 53 TIME_ZONE_ID_STANDARD: Result := TimeZoneInfo.Bias + TimeZoneInfo.StandardBias;54 TIME_ZONE_ID_DAYLIGHT: Result := TimeZoneInfo.Bias + TimeZoneInfo.DaylightBias;54 TIME_ZONE_ID_STANDARD: Result := TimeZoneInfo.Bias + TimeZoneInfo.StandardBias; 55 TIME_ZONE_ID_DAYLIGHT: Result := TimeZoneInfo.Bias + TimeZoneInfo.DaylightBias; 55 56 else 56 57 Result := 0; 57 58 end; 59 {$pop} 58 60 end; 59 61 {$ELSE} … … 65 67 function LeftCutString(var Source: string; out Output: string; Delimiter: string; Allowed: string = ''): Boolean; 66 68 var 67 I , J: Integer;69 I: Integer; 68 70 Matched: Boolean; 69 71 begin … … 119 121 if Pos('Z', XMLDateTime) > 0 then 120 122 LeftCutString(XMLDateTime, Part, 'Z'); 121 SecondFraction := StrToFloat('0' + De cimalSeparator + Part);123 SecondFraction := StrToFloat('0' + DefaultFormatSettings.DecimalSeparator + Part); 122 124 Millisecond := Trunc(SecondFraction * 1000); 123 125 end else begin … … 138 140 end; 139 141 140 function DateTimeToXMLTime(Value: TDateTime; ApplyLocalBias: Boolean = True): WideString;142 function DateTimeToXMLTime(Value: TDateTime; ApplyLocalBias: Boolean = True): string; 141 143 const 142 144 Neg: array[Boolean] of string = ('+', '-'); … … 159 161 NewNode: TDOMNode; 160 162 begin 161 NewNode := Node.OwnerDocument.CreateElement( Name);162 NewNode.TextContent := IntToStr(Value);163 NewNode := Node.OwnerDocument.CreateElement(DOMString(Name)); 164 NewNode.TextContent := DOMString(IntToStr(Value)); 163 165 Node.AppendChild(NewNode); 164 166 end; … … 168 170 NewNode: TDOMNode; 169 171 begin 170 NewNode := Node.OwnerDocument.CreateElement( Name);171 NewNode.TextContent := IntToStr(Value);172 NewNode := Node.OwnerDocument.CreateElement(DOMString(Name)); 173 NewNode.TextContent := DOMString(IntToStr(Value)); 172 174 Node.AppendChild(NewNode); 173 175 end; … … 177 179 NewNode: TDOMNode; 178 180 begin 179 NewNode := Node.OwnerDocument.CreateElement( Name);180 NewNode.TextContent := BoolToStr(Value);181 NewNode := Node.OwnerDocument.CreateElement(DOMString(Name)); 182 NewNode.TextContent := DOMString(BoolToStr(Value)); 181 183 Node.AppendChild(NewNode); 182 184 end; … … 186 188 NewNode: TDOMNode; 187 189 begin 188 NewNode := Node.OwnerDocument.CreateElement( Name);189 NewNode.TextContent := Value;190 NewNode := Node.OwnerDocument.CreateElement(DOMString(Name)); 191 NewNode.TextContent := DOMString(Value); 190 192 Node.AppendChild(NewNode); 191 193 end; … … 195 197 NewNode: TDOMNode; 196 198 begin 197 NewNode := Node.OwnerDocument.CreateElement( Name);198 NewNode.TextContent := D ateTimeToXMLTime(Value);199 NewNode := Node.OwnerDocument.CreateElement(DOMString(Name)); 200 NewNode.TextContent := DOMString(DateTimeToXMLTime(Value)); 199 201 Node.AppendChild(NewNode); 200 202 end; … … 205 207 begin 206 208 Result := DefaultValue; 207 NewNode := Node.FindNode( Name);208 if Assigned(NewNode) then 209 Result := StrToInt( NewNode.TextContent);209 NewNode := Node.FindNode(DOMString(Name)); 210 if Assigned(NewNode) then 211 Result := StrToInt(string(NewNode.TextContent)); 210 212 end; 211 213 … … 215 217 begin 216 218 Result := DefaultValue; 217 NewNode := Node.FindNode( Name);218 if Assigned(NewNode) then 219 Result := StrToInt64( NewNode.TextContent);219 NewNode := Node.FindNode(DOMString(Name)); 220 if Assigned(NewNode) then 221 Result := StrToInt64(string(NewNode.TextContent)); 220 222 end; 221 223 … … 225 227 begin 226 228 Result := DefaultValue; 227 NewNode := Node.FindNode( Name);228 if Assigned(NewNode) then 229 Result := StrToBool( NewNode.TextContent);229 NewNode := Node.FindNode(DOMString(Name)); 230 if Assigned(NewNode) then 231 Result := StrToBool(string(NewNode.TextContent)); 230 232 end; 231 233 … … 235 237 begin 236 238 Result := DefaultValue; 237 NewNode := Node.FindNode( Name);238 if Assigned(NewNode) then 239 Result := NewNode.TextContent;239 NewNode := Node.FindNode(DOMString(Name)); 240 if Assigned(NewNode) then 241 Result := string(NewNode.TextContent); 240 242 end; 241 243 … … 246 248 begin 247 249 Result := DefaultValue; 248 NewNode := Node.FindNode( Name);249 if Assigned(NewNode) then 250 Result := XMLTimeToDateTime( NewNode.TextContent);250 NewNode := Node.FindNode(DOMString(Name)); 251 if Assigned(NewNode) then 252 Result := XMLTimeToDateTime(string(NewNode.TextContent)); 251 253 end; 252 254 -
branches/generator/UCore.lfm
r131 r167 3 3 OnDestroy = DataModuleDestroy 4 4 OldCreateOrder = False 5 Height = 733 6 HorizontalOffset = 491 7 VerticalOffset = 287 8 Width = 1180 5 Height = 562 6 HorizontalOffset = 384 7 VerticalOffset = 276 8 Width = 865 9 PPI = 120 9 10 object ImageList1: TImageList 10 left = 54011 top = 30411 left = 256 12 top = 136 12 13 Bitmap = { 13 14 4C690B0000001000000010000000000000000000000000000000000000000000 … … 369 370 MinVisiblePart = 50 370 371 EntireVisible = False 371 left = 341372 top = 1 54372 left = 408 373 top = 144 373 374 end 374 375 object XMLConfig1: TXMLConfig … … 376 377 RootName = 'CONFIG' 377 378 ReadOnly = False 378 left = 251 379 top = 328 379 left = 96 380 top = 128 381 end 382 object ApplicationInfo1: TApplicationInfo 383 Identification = 1 384 VersionMajor = 1 385 VersionMinor = 0 386 VersionBugFix = 0 387 AppName = 'Generator' 388 ReleaseDate = 0 389 RegistryKey = '\Software\Chronosoft\Generator' 390 RegistryRoot = rrKeyCurrentUser 391 License = 'CC)' 392 left = 192 393 top = 259 380 394 end 381 395 end -
branches/generator/UCore.pas
r131 r167 7 7 uses 8 8 Classes, SysUtils, XMLConf, FileUtil, Controls, ActnList, UGrammer, 9 UPersistentForm, ULastOpenedList ;9 UPersistentForm, ULastOpenedList, UApplicationInfo; 10 10 11 11 type … … 14 14 15 15 TCore = class(TDataModule) 16 ApplicationInfo1: TApplicationInfo; 16 17 ImageList1: TImageList; 17 18 PersistentForm1: TPersistentForm; … … 69 70 procedure TCore.Initialize; 70 71 begin 72 PersistentForm1.RegistryContext := ApplicationInfo1.GetRegistryContext; 71 73 LoadConfig; 72 74 FormMain.LoadConfig(XMLConfig1); -
branches/generator/generator.lpi
r137 r167 151 151 <IsPartOfProject Value="True"/> 152 152 <ComponentName Value="FormLookupTables"/> 153 <HasResources Value="True"/> 153 154 <ResourceBaseClass Value="Form"/> 154 155 </Unit10> … … 157 158 <IsPartOfProject Value="True"/> 158 159 <ComponentName Value="FormLookupTable"/> 160 <HasResources Value="True"/> 159 161 <ResourceBaseClass Value="Form"/> 160 162 </Unit11>
Note:
See TracChangeset
for help on using the changeset viewer.