Changeset 126 for CoolStreaming/Demo/DynNumber/UMainForm.pas
- Timestamp:
- Jan 15, 2011, 10:03:27 PM (14 years ago)
- Location:
- CoolStreaming/Demo/DynNumber
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
CoolStreaming/Demo/DynNumber
- Property svn:ignore
-
old new 1 1 DynNumberDemo.exe 2 2 lib 3 heaptrclog.trc 4 DynNumberDemo
-
- Property svn:ignore
-
CoolStreaming/Demo/DynNumber/UMainForm.pas
r125 r126 7 7 uses 8 8 Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, 9 UDynNumber;9 ComCtrls, UDynNumber, Math; 10 10 11 11 type … … 15 15 TMainForm = class(TForm) 16 16 Button1: TButton; 17 Button2: TButton; 17 18 Edit1: TEdit; 18 Memo1: TMemo;19 ListView1: TListView; 19 20 procedure Button1Click(Sender: TObject); 21 procedure Button2Click(Sender: TObject); 20 22 procedure FormCreate(Sender: TObject); 21 23 procedure FormDestroy(Sender: TObject); … … 43 45 N: TDynamicNumber; 44 46 Line: string; 47 NewItem: TListItem; 45 48 begin 46 Memo1.Clear;47 49 try 48 50 N := TDynamicNumber.Create; 51 ListView1.BeginUpdate; 52 ListView1.Clear; 49 53 for I := 0 to 16 do begin 50 54 N.Stream.Size := 0; … … 54 58 for J := 0 to N.Stream.Size - 1 do 55 59 Line := Line + IntToStr(Integer(N.Stream.ReadBit)); 56 Memo1.Lines.Add(Line); 60 NewItem := ListView1.Items.Add; 61 NewItem.Caption := IntToStr(I); 62 NewItem.SubItems.Add(''); 63 NewItem.SubItems.Add(Line); 57 64 end; 58 65 finally 66 ListView1.EndUpdate; 67 N.Free; 68 end; 69 end; 70 71 procedure TMainForm.Button2Click(Sender: TObject); 72 var 73 I: Integer; 74 Count: Integer; 75 Parts: array of Integer; 76 PartIndex: Integer; 77 MaxValue: Integer; 78 J: Integer; 79 Line: string; 80 NewItem: TListItem; 81 N: TDynamicNumber; 82 begin 83 Count := 1; 84 SetLength(Parts, Count); 85 try 86 N := TDynamicNumber.Create; 87 ListView1.BeginUpdate; 88 ListView1.Clear; 89 for I := 0 to 1000 do begin 90 91 // Write 92 N.Stream.Size := 0; 93 for J := 0 to Count - 2 do 94 N.Stream.WriteNumber(1, 1); 95 N.Stream.WriteNumber(0, 1); 96 for PartIndex := 0 to Count - 1 do begin 97 if PartIndex > 0 then MaxValue := Parts[PartIndex - 1] + 1 98 else MaxValue := 1; 99 for J := MaxValue - 1 downto 0 do 100 if ((Parts[PartIndex] shr J) and 1) = 1 then N.Stream.WriteNumber(1, 1) 101 else N.Stream.WriteNumber(0, 1); 102 end; 103 NewItem := ListView1.Items.Add; 104 NewItem.Caption := IntToStr(I); 105 J := Floor(Log2(I)) + 1; 106 NewItem.SubItems.Add(FloatToStr(1 - (J / N.Stream.Size))); 107 Line := ''; 108 N.Stream.Position := 0; 109 for J := 0 to N.Stream.Size - 1 do 110 Line := Line + IntToStr(Integer(N.Stream.ReadBit)); 111 NewItem.SubItems.Add(Line); 112 113 // Increment value 114 PartIndex := Count - 1; 115 repeat 116 Parts[PartIndex] := Parts[PartIndex] + 1; 117 if PartIndex > 0 then MaxValue := 1 shl (Parts[PartIndex - 1] + 1) 118 else MaxValue := 2; 119 if Parts[PartIndex] >= MaxValue then begin 120 Parts[PartIndex] := 0; 121 PartIndex := PartIndex - 1; 122 if PartIndex < 0 then begin 123 Count := Count + 1; 124 SetLength(Parts, Count); 125 for PartIndex := 0 to Count - 1 do 126 Parts[PartIndex] := 0; 127 Break; 128 end; 129 end else Break; 130 until False; 131 end; 132 finally 133 ListView1.EndUpdate; 59 134 N.Free; 60 135 end;
Note:
See TracChangeset
for help on using the changeset viewer.