diff --git a/.gitattributes b/.gitattributes index 3897648787..c70a0b00f7 100644 --- a/.gitattributes +++ b/.gitattributes @@ -4262,6 +4262,7 @@ examples/imgviewer/imgview.dpr svneol=native#text/pascal examples/imgviewer/imgview.lpi svneol=native#text/plain examples/imgviewer/imgview.lpr svneol=native#text/pascal examples/imgviewer/imgview.res svneol=native#unset +examples/imgviewer/readme.txt svneol=native#text/plain examples/jpeg/jpegexample.lpi svneol=native#text/plain examples/jpeg/jpegexample.lpr svneol=native#text/pascal examples/jpeg/lazarus.jpg -text svneol=unset#image/jpeg diff --git a/examples/imgviewer/frmmain.lfm b/examples/imgviewer/frmmain.lfm index 10734c1720..1f90eee2f5 100644 --- a/examples/imgviewer/frmmain.lfm +++ b/examples/imgviewer/frmmain.lfm @@ -1,186 +1,166 @@ object MainForm: TMainForm + Left = 345 + Height = 640 + Top = 161 + Width = 870 + HorzScrollBar.Page = 871 + HorzScrollBar.Range = 165 + VertScrollBar.Page = 615 + VertScrollBar.Range = 23 ActiveControl = LBFiles Caption = 'Image viewer' - ClientHeight = 614 + ClientHeight = 620 ClientWidth = 870 Font.Height = -13 Font.Name = 'MS Sans Serif' Menu = MainMenu1 OnKeyDown = FormKeyDown OnShow = FormShow - HorzScrollBar.Page = 871 - HorzScrollBar.Range = 165 - VertScrollBar.Page = 615 - VertScrollBar.Range = 23 - Left = 345 - Height = 640 - Top = 161 - Width = 870 + LCLVersion = '1.1' object SPImage: TSplitter - Beveled = True - Cursor = 65522 - Height = 585 - ParentColor = True - ResizeStyle = rsUpdate - Width = 4 - Cursor = 65522 Left = 161 - Height = 585 + Height = 591 Top = 29 Width = 4 + Beveled = True end object ToolBar1: TToolBar + Left = 0 + Height = 29 + Top = 0 + Width = 870 ButtonHeight = 23 Caption = 'ToolBar1' - DragCursor = 65524 - Height = 29 Images = ILMain - ParentColor = True ParentShowHint = False ShowHint = True TabOrder = 0 - Height = 29 - Width = 870 object TBOPen: TToolButton - Action = AOpen - DragCursor = 65524 Left = 1 - Height = 23 + Hint = 'Open file' Top = 2 - Width = 23 + Action = AOpen end object TBOpenDir: TToolButton - Action = AOpenDir - DragCursor = 65524 Left = 24 - Height = 23 + Hint = 'Open directory' Top = 2 - Width = 23 + Action = AOpenDir end object TBOpenDirRec: TToolButton - Action = OpenDirRecursively - DragCursor = 65524 Left = 47 - Height = 23 + Hint = 'Open directory and subdirectories' Top = 2 - Width = 23 + Action = OpenDirRecursively end object ToolButton4: TToolButton + Left = 70 + Top = 2 + Width = 10 Caption = 'ToolButton4' - DragCursor = 65524 ImageIndex = 3 Style = tbsSeparator - Width = 8 - Left = 70 - Height = 23 - Top = 2 - Width = 8 end object TBPRev: TToolButton - Action = APreviousImage - DragCursor = 65524 - Left = 78 - Height = 23 + Left = 80 + Hint = 'Previous image' Top = 2 - Width = 23 + Action = APreviousImage end object TBNext: TToolButton - Action = ANextImage - DragCursor = 65524 - Left = 101 - Height = 23 + Left = 103 + Hint = 'Next image' Top = 2 - Width = 23 + Action = ANextImage end object TBPRevDir: TToolButton - Action = APrevImageDir - DragCursor = 65524 - Left = 124 - Height = 23 - Hint = 'Jump to last image of previous directory' + Left = 126 Top = 2 - Width = 23 + Action = APrevImageDir end object TBNextDir: TToolButton - Action = ANextImageDir - DragCursor = 65524 - Left = 147 - Height = 23 + Left = 149 + Hint = 'Jump to first image of next directory' Top = 2 - Width = 23 + Action = ANextImageDir end object TBDoubleSize: TToolButton - Action = ADoubleSize - DragCursor = 65524 - Left = 170 - Height = 23 + Left = 177 + Hint = 'Zoom 2x' Top = 2 - Width = 23 + Action = ADoubleSize + Caption = '&Zoom In (2x)' end object TBHalfSize: TToolButton - Action = AHalfSize - DragCursor = 65524 - Left = 193 - Height = 23 + Left = 200 + Hint = 'Zoom 0.5x' Top = 2 - Width = 23 + Action = AHalfSize + Caption = 'Zo&om Out (0.5x)' end object ToolButton3: TToolButton + Left = 223 + Top = 2 + Width = 10 Caption = 'ToolButton3' - DragCursor = 65524 ImageIndex = 10 Style = tbsSeparator - Width = 8 - Left = 216 - Height = 23 + end + object ToolButton1: TToolButton + Left = 172 Top = 2 - Width = 8 + Width = 5 + Caption = 'ToolButton1' + Style = tbsDivider end end object LBFiles: TListBox + Left = 0 + Height = 591 + Top = 29 + Width = 161 Align = alLeft ClickOnSelChange = False Font.Color = clBlack Font.Height = 15 Font.Name = 'Arial' Font.Pitch = fpVariable - ItemHeight = 15 + ItemHeight = 0 OnClick = LBFilesClick OnKeyDown = FormKeyDown + ParentFont = False TabOrder = 1 - TopIndex = -1 - Height = 585 - Top = 29 - Width = 161 end object PImage: TPanel + Left = 165 + Height = 591 + Top = 29 + Width = 705 Align = alClient - ClientHeight = 585 + ClientHeight = 591 ClientWidth = 705 FullRepaint = False TabOrder = 2 - Left = 165 - Height = 585 - Top = 29 - Width = 705 object ScrollBox1: TScrollBox - Align = alClient - AutoSize = False - BorderStyle = bsNone - DragCursor = 65524 - ParentColor = True - TabOrder = 0 - HorzScrollBar.Page = 700 - VertScrollBar.Page = 580 Left = 1 - Height = 583 + Height = 589 Top = 1 Width = 703 + HorzScrollBar.Page = 703 + VertScrollBar.Page = 589 + Align = alClient + BorderStyle = bsNone + ClientHeight = 589 + ClientWidth = 703 + TabOrder = 0 object IMain: TImage + Left = 0 + Height = 589 + Top = 0 + Width = 703 Align = alClient + Proportional = True Transparent = True - Height = 579 - Width = 699 end end end @@ -192,14 +172,122 @@ object MainForm: TMainForm Caption = '&File' object MIOpen: TMenuItem Action = AOpen + Bitmap.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF292429FF4A48 + 4AFF524C52FF4A4C4AFF524C52FF4A4C4AFF524C52FF4A484AFF4A444AFF4140 + 41FF393439FF202020FF808080FF808080FF808080FF808080FF18304AFFC5BE + C5FFA4A5A4FFACAEACFFACAEACFFB4B2B4FFACAAACFFACAAACFF9C999CFF9495 + 9CFF8B8D8BFF4A484AFF808080FF808080FF808080FF808080FF203452FF5255 + 5AFFD5D2D5FFBDBEC5FFCDC6CDFFCDC6CDFFCDC6CDFFC5C2C5FFB4B2B4FFA4A5 + ACFFA4A1A4FF737173FF181418FF808080FF808080FF808080FF18304AFF1830 + 4AFFCDCECDFFCDCECDFFD5D6D5FFDED6DEFFD5D2D5FFD5CED5FFBDBABDFFB4B2 + B4FFA4A1A4FF9C959CFF4A484AFF808080FF808080FF808080FF203452FF417D + BDFF52555AFFDEDADEFFE6DEE6FFE6E2E6FFE6E2E6FFDED6DEFFC5C6C5FFB4B6 + BDFFACAEB4FFA4A1A4FF6A696AFF202020FF808080FF808080FF18304AFF83C6 + FFFF18304AFF808080FFDEDEE6FFEEEAEEFFE6E6E6FFE6E2E6FFC5C6CDFFBDBE + BDFFACAEACFFA4A1A4FF949594FF4A484AFF808080FF808080FF203452FF83C2 + FFFF5289CDFF4A5052FFFFFAFFFFFFF6FFFFF6EEF6FFE6E6E6FFDED6DEFFCDCE + CDFFCDC6CDFFBDBEBDFFBDBABDFFB4B6B4FF313031FF808080FF18304AFF9CD6 + FFFF8BC6FFFF83C6FFFF62AEFFFF62AEFFFF62AEFFFF62AEFFFF62AEFFFF62AE + FFFF62AEFFFF000000FF808080FF808080FF808080FF808080FF203452FF6AA5 + E6FFA4D6FFFF8BC6FFFF6AAAEEFF183452FF203452FF183452FF203452FF1834 + 52FF203452FF808080FF808080FF808080FF808080FF808080FF808080FF2034 + 52FF18304AFF183452FF18304AFF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF0000 + 00FF000000FF000000FF000000FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF000000FF000000FF000000FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF000000FF808080FF808080FF808080FF808080FF0000 + 00FF000000FF000000FF000000FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF000000FF000000FF808080FF000000FF0000 + 00FF000000FF808080FF000000FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF000000FF000000FF000000FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF + } OnClick = AOpenExecute end object MIOPenDir: TMenuItem Action = AOpenDir + Bitmap.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF808080FF808080FF808080FF8080 + 80FF000000FF808080FF00FFFFFF808080FF00FFFFFF808080FF00FFFFFF8080 + 80FF00FFFFFF808080FF00FFFFFF000000FF808080FF808080FF808080FF8080 + 80FF000000FF00FFFFFF808080FF00FFFFFF830000FF00FFFFFF830000FF00FF + FFFF830000FF00FFFFFF808080FF000000FF808080FF808080FF808080FF8080 + 80FF000000FF808080FF00FFFFFF808080FF00FFFFFF830000FF830000FF8300 + 00FF00FFFFFF808080FF00FFFFFF000000FF808080FF808080FF808080FF8080 + 80FF000000FF00FFFFFF808080FF00FFFFFF830000FF830000FF00FFFFFF8300 + 00FF830000FF00FFFFFF808080FF000000FF808080FF808080FF808080FF8080 + 80FF000000FF808080FF00FFFFFF808080FF00FFFFFF830000FF830000FF8300 + 00FF00FFFFFF808080FF00FFFFFF000000FF808080FF808080FF808080FF8080 + 80FF000000FF00FFFFFF808080FF00FFFFFF830000FF00FFFFFF830000FF00FF + FFFF830000FF00FFFFFF808080FF000000FF808080FF808080FF808080FF8080 + 80FF000000FF808080FF00FFFFFF808080FF00FFFFFF808080FF00FFFFFF8080 + 80FF00FFFFFF808080FF00FFFFFF000000FF808080FF808080FF808080FF8080 + 80FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF808080FF808080FF808080FF8080 + 80FF808080FF000000FF00FFFFFF808080FF00FFFFFF808080FF000000FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF000000FF000000FF000000FF000000FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF + } OnClick = AOpenDirExecute end object MIOpenDirRec: TMenuItem Action = OpenDirRecursively + Bitmap.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000808080FF8385 + 83FF000808FF808080FF000000FF101010FF000000FF000408FF000000FF0004 + 08FF000000FF808080FF808080FF808080FF808080FF808080FF808080FF8B89 + 8BFF808080FFCDBEC5FFDECED5FFC5B2B4FFE6D2DEFFCDC6CDFFC5C2C5FFC5C6 + C5FF000000FF808080FF808080FF808080FF808080FF808080FF808080FF948D + 8BFFFFFAFFFFD5C6CDFFDECACDFFE6CED5FFD5BEBDFFD5C6CDFFCDC6C5FFDED2 + D5FF080000FF808080FF808080FF808080FF808080FF808080FF808080FF7B7D + 7BFF808080FFCDCECDFFD5CED5FFC5BABDFFDECED5FFDEC6CDFFE6CED5FFD5BE + C5FF100000FF080000FF201010FF808080FF808080FF808080FF808080FF838D + 8BFF808080FFC5C6C5FFC5CACDFFCDCACDFFCDCACDFFD5C2C5FFDECACDFFD5C2 + C5FF080000FFE6DADEFF000000FF808080FF808080FF808080FF808080FF7B85 + 83FF808080FFC5C6C5FFCDD2D5FFCDCECDFFCDC6CDFFCDCACDFFC5C2C5FFC5CA + C5FF000400FFB4BEBDFF000800FF808080FF808080FF808080FF808080FF8B89 + 8BFFFFFAFFFF808080FF808080FF808080FF808080FFFFFAFFFF808080FFFFFA + FFFF000000FFC5CECDFF000000FF000400FF000000FF808080FF808080FF9C81 + 83FF18008BFF10008BFF1800D5FF1000CDFF1800FFFF1000FFFF1800FFFF1000 + FFFF200808FFD5C6CDFF080000FFCDCACDFF000400FF808080FF808080FF9C81 + 83FF948983FF9C898BFF948983FF9C898BFF948983FF9C898BFF948983FF9C89 + 8BFF200000FFF6CED5FF100000FFD5CACDFF000000FF808080FF808080FF8080 + 80FF808080FFAC7D83FFFFFAFFFFFFF2FFFFFFFAFFFFFFF6FFFFFFFAFFFFFFFA + FFFF808080FFFFF2F6FF200000FFDEC2C5FF100008FF808080FF808080FF8080 + 80FF808080FFAC8D94FF10008BFF18008BFF1000CDFF1000D5FF1000FFFF1800 + FFFF1000FFFF1000FFFF180000FFD5C2C5FF080000FF808080FF808080FF8080 + 80FF808080FF83797BFF948183FF9C858BFF9C858BFF948983FF9C898BFF9485 + 83FF94898BFF837D7BFF080400FFDED6D5FF000400FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF94898BFFFFFAFFFF808080FF808080FFFFFA + F6FF808080FF808080FFFFFAF6FF808080FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF9C898BFF18008BFF10008BFF1800D5FF1000 + CDFF1800FFFF1000FFFF1800FFFF1000FFFF180000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF947D83FF9C8183FF9C898BFF948983FF9C89 + 8BFF948983FF9C898BFF948983FF9C898BFF100000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF + } OnClick = OpenDirRecursivelyExecute end object MIClear: TMenuItem @@ -218,10 +306,84 @@ object MainForm: TMainForm Caption = '&Image' object D1: TMenuItem Action = ADoubleSize + Caption = '&Zoom In (2x)' + Bitmap.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF000000FF000000FF000000FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF000000FF000000FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF000000FF000000FF000000FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF000000FF000000FF000000FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF838183FF000000FF000000FF000000FF838183FF808080FF00FF + FFFF838183FF000000FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF000000FF838183FF837D83FF838183FF7B7D7BFF838183FF000000FF0000 + 00FF00FFFFFF808080FF808080FF808080FF808080FF808080FF808080FF0000 + 00FF838183FF808080FFC5C2C5FF808080FFC5C2C5FF808080FF838183FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF7B7D7BFF8381 + 83FF808080FFC5C2C5FF808080FF0000FFFF808080FFC5C2C5FF808080FF8381 + 83FF837D83FF808080FF808080FF808080FF808080FF808080FF000000FF8381 + 83FFC5C2C5FF808080FFC5C2C5FF0000FFFFC5C2C5FF808080FFC5C2C5FF8381 + 83FF000000FF808080FF808080FF808080FF808080FF808080FF000000FF8381 + 83FF808080FF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF808080FF8381 + 83FF000000FF808080FF808080FF808080FF808080FF808080FF000000FF8381 + 83FFC5C2C5FF808080FFC5C2C5FF0000FFFFC5C2C5FF808080FFC5C2C5FF8381 + 83FF000000FF808080FF808080FF808080FF808080FF808080FF7B7D7BFF8381 + 83FF808080FFC5C2C5FF808080FF0000FFFF808080FFC5C2C5FF808080FF8381 + 83FF837D83FF808080FF808080FF808080FF808080FF808080FF808080FF0000 + 00FF838183FF808080FFC5C2C5FF808080FFC5C2C5FF808080FF838183FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF000000FF838183FF837D83FF838183FF7B7D7BFF838183FF000000FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF838183FF000000FF000000FF000000FF838183FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF + } OnClick = ADoubleSizeExecute end object MIHalfSize: TMenuItem Action = AHalfSize + Caption = 'Z&oom Out (0.5x)' + Bitmap.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF000000FF000000FF000000FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF000000FF000000FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF000000FF000000FF000000FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF000000FF000000FF000000FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF838183FF000000FF000000FF000000FF838183FF808080FF00FF + FFFF838183FF000000FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF000000FF838183FF837D83FF838183FF7B7D7BFF838183FF000000FF0000 + 00FF00FFFFFF808080FF808080FF808080FF808080FF808080FF808080FF0000 + 00FF838183FFC5C2C5FF808080FFC5C2C5FF808080FFC5C2C5FF838183FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF7B7D7BFF8381 + 83FFC5BEC5FF808080FFBDBEBDFF808080FFC5BEC5FF808080FFBDBEBDFF8381 + 83FF837D83FF808080FF808080FF808080FF808080FF808080FF000000FF8381 + 83FF808080FFC5C2C5FF808080FFC5C2C5FF808080FFC5C2C5FF808080FF8381 + 83FF000000FF808080FF808080FF808080FF808080FF808080FF000000FF8381 + 83FFBDBEBDFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFFC5BEC5FF8381 + 83FF000000FF808080FF808080FF808080FF808080FF808080FF000000FF8381 + 83FF808080FFC5C2C5FF808080FFC5C2C5FF808080FFC5C2C5FF808080FF8381 + 83FF000000FF808080FF808080FF808080FF808080FF808080FF7B7D7BFF8381 + 83FFC5BEC5FF808080FFBDBEBDFF808080FFC5BEC5FF808080FFBDBEBDFF8381 + 83FF837D83FF808080FF808080FF808080FF808080FF808080FF808080FF0000 + 00FF838183FFC5C2C5FF808080FFC5C2C5FF808080FFC5C2C5FF838183FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF000000FF838183FF837D83FF838183FF7B7D7BFF838183FF000000FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF838183FF000000FF000000FF000000FF838183FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF + } OnClick = AHalfSizeExecute end object N2: TMenuItem @@ -229,20 +391,164 @@ object MainForm: TMainForm end object MINextImage: TMenuItem Action = ANextImage + Bitmap.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF000000FF000000FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF000000FF0000FFFF000000FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF000000FF0000FFFF0000FFFF0000 + FFFF000000FF000000FF808080FF808080FF808080FF808080FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF0000FFFF0000FFFF0000 + FFFF0000FFFF0000FFFF000000FF000000FF808080FF808080FF000000FF0000 + FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 + FFFF0000FFFF0000FFFF0000FFFF0000FFFF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF0000FFFF0000FFFF0000 + FFFF0000FFFF0000FFFF000000FF000000FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF000000FF0000FFFF0000FFFF0000 + FFFF000000FF000000FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF000000FF0000FFFF000000FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF000000FF000000FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF + } ShortCut = 36882 OnClick = ANextImageExecute end object PreviousImage1: TMenuItem Action = APreviousImage + Bitmap.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF000000FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF000000FF000000FF0000FFFF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF000000FF000000FF0000FFFF0000FFFF0000FFFF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF000000FF000000FF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 + FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF000000FF808080FF8080 + 80FF000000FF000000FF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF808080FF8080 + 80FF808080FF808080FF000000FF000000FF0000FFFF0000FFFF0000FFFF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF000000FF000000FF0000FFFF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF000000FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF + } ShortCut = 36884 OnClick = APreviousImageExecute end object Nextimagedirectory1: TMenuItem Action = ANextImageDir + Bitmap.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FFFFFF00FFFFFF + 00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF + 00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF808080FFFFFF00FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF808080FF838183FF838183FF838183FF838183FF838183FF838183FF8381 + 83FF838183FF838183FF838183FF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF7B7D7BFF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF838183FF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF808080FF808080FF808080FF000000FF000000FF808080FF000000FF8080 + 80FF808080FF808080FF837D83FF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF808080FF808080FF808080FF000000FF000000FF808080FF000000FF0000 + 00FF808080FF808080FF838183FF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF808080FF808080FF808080FF000000FF000000FF808080FF000000FF0000 + 00FF000000FF808080FF7B7D7BFF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF808080FF808080FF808080FF000000FF000000FF808080FF000000FF0000 + 00FF808080FF808080FF838183FF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF808080FF808080FF808080FF000000FF000000FF808080FF000000FF8080 + 80FF808080FF808080FF837D83FF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF838183FF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF7B7D7BFF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FFFFFF00FF808080FFFFFF00FFFFFF + 00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF + 00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF808080FF + } OnClick = ANextImageDirExecute end object Previousimagedirectory1: TMenuItem Action = APrevImageDir + Bitmap.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FFFFFF00FFFFFF + 00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF + 00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF808080FFFFFF00FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF808080FF838183FF838183FF838183FF838183FF838183FF838183FF8381 + 83FF838183FF838183FF838183FF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF7B7D7BFF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF838183FF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF808080FF808080FF808080FF808080FF000000FF808080FF000000FF0000 + 00FF808080FF808080FF837D83FF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF808080FF808080FF808080FF000000FF000000FF808080FF000000FF0000 + 00FF808080FF808080FF838183FF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF808080FF808080FF000000FF000000FF000000FF808080FF000000FF0000 + 00FF808080FF808080FF7B7D7BFF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF808080FF808080FF808080FF000000FF000000FF808080FF000000FF0000 + 00FF808080FF808080FF838183FF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF808080FF808080FF808080FF808080FF000000FF808080FF000000FF0000 + 00FF808080FF808080FF837D83FF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF838183FF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF7B7D7BFF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF000000FFFFFF00FF808080FFFFFF00FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FFFFFF00FF808080FFFFFF00FFFFFF + 00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF + 00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF808080FF + } OnClick = APrevImageDirExecute end end @@ -289,7 +595,7 @@ object MainForm: TMainForm HelpType = htKeyword ImageIndex = 5 OnExecute = ADoubleSizeExecute - ShortCut = 16427 + ShortCut = 45 end object AHalfSize: TAction Caption = '&Half Size' @@ -330,217 +636,300 @@ object MainForm: TMainForm left = 32 top = 64 Bitmap = { - 6C69090000001000000010000000840500002F2A2058504D202A2F0A73746174 - 69632063686172202A66696C655B5D203D207B0A2F2A20636F6C756D6E732072 - 6F777320636F6C6F72732063686172732D7065722D706978656C202A2F0A2231 - 362031362036362031222C0A2220206320626C61636B222C0A222E2063202331 - 3831343138222C0A225820632023323032303230222C0A226F20632023323932 - 343239222C0A224F20632023333133303331222C0A222B206320233339333433 - 39222C0A224020632023344133303138222C0A22232063202335323334313822 - 2C0A222420632023353233343230222C0A222520632023343134303431222C0A - 222620632023344134343441222C0A222A20632023344134383441222C0A223D - 20632023344134433441222C0A222D20632023353234433532222C0A223B2063 - 2023353235303441222C0A223A20632023354135353532222C0A223E20632023 - 364136393641222C0A222C20632023373337313733222C0A223C206320234244 - 37443431222C0A223120632023434438393532222C0A22322063202345364135 - 3641222C0A223320632023454541413641222C0A223420632023464641453632 - 222C0A223520632023384238443842222C0A223620632023393439353934222C - 0A223720632023394339353934222C0A223820632023394339353943222C0A22 - 3920632023394339393943222C0A223020632023413441314134222C0A227120 - 632023413441354134222C0A227720632023414341354134222C0A2265206320 - 23414341414143222C0A227220632023414341454143222C0A22742063202342 - 3441454143222C0A227920632023423442324234222C0A227520632023423442 - 364234222C0A226920632023424442364234222C0A2270206320234244424142 - 44222C0A226120632023424442454244222C0A22732063202343354245424422 - 2C0A226420632023433542454335222C0A226620632023464643323833222C0A - 226720632023464643363833222C0A226820632023464643363842222C0A226A - 20632023464644363943222C0A226B20632023464644364134222C0A226C2063 - 2023433543324335222C0A227A20632023433543364335222C0A227820632023 - 434443364335222C0A226320632023434443364344222C0A2276206320234344 - 43454344222C0A226220632023443543454435222C0A226E2063202344354432 - 4435222C0A226D20632023443544364435222C0A224D20632023444544364445 - 222C0A224E20632023444544414445222C0A2242206320677261793837222C0A - 225620632023453644454445222C0A224320632023453644454536222C0A225A - 20632023453645324536222C0A224120632023453645364536222C0A22532063 - 2023454545414545222C0A224420632023463645454636222C0A224620632023 - 464646364646222C0A224720632023464646414646222C0A2248206320677261 - 79313030222C0A2F2A20706978656C73202A2F0A224848484848482020204848 - 4848484848222C0A2248484848482020482020204820484848222C0A22484848 - 48204848484820202020484848222C0A22484848484848484848482020204848 - 48222C0A2248484848484848484820202020484848222C0A2248244023404848 - 484848484848484848222C0A2224326B68332324232423244848484848222C0A - 22406A6867343434343434342048484848222C0A222466313B474644414D7663 - 6170754F48222C0A22406740425653415A78617230362A4848222C0A22243C3A - 4E435A5A4D7A6974303E584848222C0A22404076766D4D6E62707930382A4848 - 48222C0A22243A6E736363636C7977302C2E484848222C0A2240647172727965 - 653937352A48484848222C0A226F2A2D3D2D3D2D2A26252B5848484848222C0A - 2248484848484848484848484848484848220A7D3B0AE00100002F2A2058504D - 202A2F0A7374617469632063686172202A6469725B5D203D207B0A2F2A20636F - 6C756D6E7320726F777320636F6C6F72732063686172732D7065722D70697865 - 6C202A2F0A22313620313620342031222C0A2220206320626C61636B222C0A22 - 2E20632023303030303833222C0A225820632079656C6C6F77222C0A226F2063 - 2067726179313030222C0A2F2A20706978656C73202A2F0A226F6F6F6F6F6F6F - 6F6F6F6F6F6F6F6F6F222C0A226F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F222C0A - 226F6F6F6F202020206F6F6F6F6F6F6F6F222C0A226F6F6F20586F586F206F6F - 6F6F6F6F6F222C0A226F6F2020202020202020202020206F6F222C0A226F6F20 - 6F586F586F586F586F58206F6F222C0A226F6F20586F582E582E582E586F206F - 6F222C0A226F6F206F586F582E2E2E586F58206F6F222C0A226F6F20586F582E - 2E582E2E586F206F6F222C0A226F6F206F586F582E2E2E586F58206F6F222C0A - 226F6F20586F582E582E582E586F206F6F222C0A226F6F206F586F586F586F58 - 6F58206F6F222C0A226F6F2020202020202020202020206F6F222C0A226F6F6F - 6F6F6F6F6F6F6F6F6F6F6F6F6F222C0A226F6F6F6F6F6F6F6F6F6F6F6F6F6F6F - 6F222C0A226F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F220A7D3B0A1B0600002F2A - 2058504D202A2F0A7374617469632063686172202A6469727265635B5D203D20 - 7B0A2F2A20636F6C756D6E7320726F777320636F6C6F72732063686172732D70 - 65722D706978656C202A2F0A2231362031362037362031222C0A222020632062 - 6C61636B222C0A222E20632023303030343030222C0A22582063202330303030 - 3038222C0A226F20632023303030343038222C0A224F20632023303030383030 - 222C0A222B20632023303830343030222C0A224020632023303830383030222C - 0A22232063206772617933222C0A222420632023303030303130222C0A222520 - 632023303030303138222C0A222620632023303830303130222C0A222A206320 - 23313031303130222C0A223D20632023303030303230222C0A222D2063202330 - 3830383230222C0A223B20632023313031303230222C0A223A20632023374237 - 443742222C0A223E20632023374237393833222C0A222C206320233742374438 - 33222C0A223C20632023384230303130222C0A22312063202338423030313822 - 2C0A223220632023434430303130222C0A223320632023443530303130222C0A - 223420632023443530303138222C0A223520632023464630303130222C0A2236 - 20632023464630303138222C0A223720632023383337443934222C0A22382063 - 2023383337444143222C0A223920632023383338353742222C0A223020632023 - 383338353833222C0A227120632023384238443833222C0A2277206320233842 - 38393842222C0A226520632023383338313934222C0A22722063202338333835 - 3934222C0A227420632023383338313943222C0A227920632023383338393934 - 222C0A227520632023384238353943222C0A226920632023384238393934222C - 0A227020632023384238443934222C0A226120632023384238393943222C0A22 - 7320632023393438444143222C0A226420632023424442454234222C0A226620 - 632023423442324335222C0A226720632023424442414335222C0A2268206320 - 23424442454435222C0A226A20632023433542454344222C0A226B2063202343 - 3542454435222C0A226C20632023433543324335222C0A227A20632023433543 - 364335222C0A227820632023433543364344222C0A2263206320234335434143 - 35222C0A227620632023434443364344222C0A22622063202343444341433522 - 2C0A226E20632023434443454335222C0A226D20632023434443414344222C0A - 224D20632023434443454344222C0A224E20632023433543324435222C0A2242 - 20632023433543324445222C0A225620632023434443364435222C0A22432063 - 2023434443364445222C0A225A20632023434443414435222C0A224120632023 - 434443414445222C0A225320632023443543454435222C0A2244206320234435 - 43454445222C0A224620632023443544324344222C0A22472063202344354432 - 4445222C0A224820632023443544364445222C0A224A20632023443543454536 - 222C0A224B20632023443543454636222C0A224C20632023444544324536222C - 0A225020632023444544414536222C0A224920632023463646324646222C0A22 - 5520632023463646414646222C0A225920632023464646324646222C0A225420 - 632023464646364646222C0A225220632023464646414646222C0A2245206320 - 67726179313030222C0A2F2A20706978656C73202A2F0A224545454545454545 - 4545454545454545222C0A2245454545453774617961796179612445222C0A22 - 454545454561313C3432363536352545222C0A22454545454569524545554545 - 55452045222C0A224545453E657575796172692C6F482E45222C0A2245454573 - 3C31323335363535254E5845222C0A224545453852595254525245493D422645 - 222C0A22457479617961796179613D4B245A2045222C0A224574313C34323635 - 36352D56586D2E45222C0A2245775245454545524552206E202E2045222C0A22 - 4539457A464D766D6C632E644F454545222C0A224571457A626D6D4E414E5850 - 20454545222C0A22453A454D536744434A6B24583B454545222C0A2245705256 - 414A68567847584545454545222C0A224577456A44664C766C7A204545454545 - 222C0A2245304023202A202B202B204545454545220A7D3B0ACF0100002F2A20 - 58504D202A2F0A7374617469632063686172202A707265765B5D203D207B0A2F - 2A20636F6C756D6E7320726F777320636F6C6F72732063686172732D7065722D - 706978656C202A2F0A22313620313620332031222C0A2220206320626C61636B - 222C0A222E206320726564222C0A225820632067726179313030222C0A2F2A20 - 706978656C73202A2F0A2258585858585858585858585858585858222C0A2258 - 585858585858585858585858585858222C0A2258585858585858585858585858 - 585858222C0A2258585858585858585858585858585858222C0A225858585858 - 5858582020585858585858222C0A2258585858585820202E2058585858585822 - 2C0A225858585820202E2E2E20585858585858222C0A22585820202E2E2E2E2E - 20202020202020222C0A2220202E2E2E2E2E2E2E2E2E2E2E2E2E20222C0A2258 - 5820202E2E2E2E2E20202020202020222C0A225858585820202E2E2E20585858 - 585858222C0A2258585858585820202E20585858585858222C0A225858585858 - 5858582020585858585858222C0A225858585858585858585858585858585822 - 2C0A2258585858585858585858585858585858222C0A22585858585858585858 - 58585858585858220A7D3B0ACF0100002F2A2058504D202A2F0A737461746963 - 2063686172202A6E6578745B5D203D207B0A2F2A20636F6C756D6E7320726F77 - 7320636F6C6F72732063686172732D7065722D706978656C202A2F0A22313620 - 313620332031222C0A2220206320626C61636B222C0A222E206320726564222C - 0A225820632067726179313030222C0A2F2A20706978656C73202A2F0A225858 - 5858585858585858585858585858222C0A225858585858585858585858585858 - 5858222C0A2258585858585858585858585858585858222C0A22585858585858 - 20205858585858585858222C0A22585858585858202E2020585858585858222C - 0A22585858585858202E2E2E202058585858222C0A22202020202020202E2E2E - 2E2E20205858222C0A22202E2E2E2E2E2E2E2E2E2E2E2E2E2020222C0A222020 - 20202020202E2E2E2E2E20205858222C0A22585858585858202E2E2E20205858 - 5858222C0A22585858585858202E2020585858585858222C0A22585858585858 - 20205858585858585858222C0A2258585858585858585858585858585858222C - 0A2258585858585858585858585858585858222C0A2258585858585858585858 - 585858585858222C0A2258585858585858585858585858585858220A7D3B0A1B - 0200002F2A2058504D202A2F0A7374617469632063686172202A7A6F6F6D696E - 5B5D203D207B0A2F2A20636F6C756D6E7320726F777320636F6C6F7273206368 - 6172732D7065722D706978656C202A2F0A22313620313620382031222C0A2220 - 206320626C61636B222C0A222E20632023374237443742222C0A225820632072 - 6564222C0A226F20632023383337443833222C0A224F20632079656C6C6F7722 - 2C0A222B20632023383338313833222C0A224020632023433543324335222C0A - 222320632067726179313030222C0A2F2A20706978656C73202A2F0A22232323 - 2B2020202B2323232323232323222C0A222323202B6F2B2E2B20232323232323 - 23222C0A2223202B23402340232B20232323232323222C0A222E2B2340235823 - 40232B6F2323232323222C0A22202B402340584023402B202323232323222C0A - 22202B235858585858232B202323232323222C0A22202B402340584023402B20 - 2323232323222C0A222E2B234023582340232B6F2323232323222C0A2223202B - 23402340232B20232323232323222C0A222323202B6F2B2E2B20204F23232323 - 23222C0A222323232B2020202B234F2B2023232323222C0A2223232323232323 - 232323202020232323222C0A2223232323232323232323232020202323222C0A - 2223232323232323232323232320202023222C0A222323232323232323232323 - 2323202020222C0A2223232323232323232323232323232023220A7D3B0A3B02 - 00002F2A2058504D202A2F0A7374617469632063686172202A7A6F6F6D6F7574 - 5B5D203D207B0A2F2A20636F6C756D6E7320726F777320636F6C6F7273206368 - 6172732D7065722D706978656C202A2F0A2231362031362031302031222C0A22 - 20206320626C61636B222C0A222E20632023374237443742222C0A2258206320 - 726564222C0A226F20632023383337443833222C0A224F20632079656C6C6F77 - 222C0A222B20632023383338313833222C0A224020632023424442454244222C - 0A222320632023433542454335222C0A222420632023433543324335222C0A22 - 2520632067726179313030222C0A2F2A20706978656C73202A2F0A222525252B - 2020202B2525252525252525222C0A222525202B6F2B2E2B2025252525252525 - 222C0A2225202B24252425242B20252525252525222C0A222E2B232540252325 - 402B6F2525252525222C0A22202B252425242524252B202525252525222C0A22 - 202B405858585858232B202525252525222C0A22202B252425242524252B2025 - 25252525222C0A222E2B232540252325402B6F2525252525222C0A2225202B24 - 252425242B20252525252525222C0A222525202B6F2B2E2B20204F2525252525 - 222C0A222525252B2020202B254F2B2025252525222C0A222525252525252525 - 2525202020252525222C0A2225252525252525252525252020202525222C0A22 - 25252525252525252525252520202025222C0A22252525252525252525252525 - 25202020222C0A2225252525252525252525252525252025220A7D3B0A000200 - 002F2A2058504D202A2F0A7374617469632063686172202A707265766469725B - 5D203D207B0A2F2A20636F6C756D6E7320726F777320636F6C6F727320636861 - 72732D7065722D706978656C202A2F0A22313620313620362031222C0A222020 - 6320626C61636B222C0A222E20632023374237443742222C0A22582063206379 - 616E222C0A226F20632023383337443833222C0A224F20632023383338313833 - 222C0A222B20632067726179313030222C0A2F2A20706978656C73202A2F0A22 - 5858585858585858585858585858582B222C0A22582020202020202020202020 - 2020582B222C0A2258202B2B2B2B2B2B2B2B2B2B2B20582B222C0A2258202B2B - 2B2B2B2B2B2B2B2B2E20582B222C0A2258202B2B2B2B2B2B2B2B2B2B4F20582B - 222C0A2258202B2B2B2B202B20202B2B6F20582B222C0A2258202B2B2B20202B - 20202B2B4F20582B222C0A2258202B2B2020202B20202B2B2E20582B222C0A22 - 58202B2B2B20202B20202B2B4F20582B222C0A2258202B2B2B2B202B20202B2B - 6F20582B222C0A2258202B2B2B2B2B2B2B2B2B2B4F20582B222C0A2258202B2B - 2B2B2B2B2B2B2B2B2E20582B222C0A2258202B4F4F4F4F4F4F4F4F4F4F20582B - 222C0A225820202020202020202020202020582B222C0A225858585858585858 - 585858585858582B222C0A222B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B220A7D3B - 0A000200002F2A2058504D202A2F0A7374617469632063686172202A6E657874 - 6469725B5D203D207B0A2F2A20636F6C756D6E7320726F777320636F6C6F7273 - 2063686172732D7065722D706978656C202A2F0A22313620313620362031222C - 0A2220206320626C61636B222C0A222E20632023374237443742222C0A225820 - 63206379616E222C0A226F20632023383337443833222C0A224F206320233833 - 38313833222C0A222B20632067726179313030222C0A2F2A20706978656C7320 - 2A2F0A225858585858585858585858585858582B222C0A225820202020202020 - 202020202020582B222C0A2258202B2B2B2B2B2B2B2B2B2B2B20582B222C0A22 - 58202B2B2B2B2B2B2B2B2B2B2E20582B222C0A2258202B2B2B2B2B2B2B2B2B2B - 4F20582B222C0A2258202B2B2B20202B202B2B2B6F20582B222C0A2258202B2B - 2B20202B20202B2B4F20582B222C0A2258202B2B2B20202B2020202B2E20582B - 222C0A2258202B2B2B20202B20202B2B4F20582B222C0A2258202B2B2B20202B - 202B2B2B6F20582B222C0A2258202B2B2B2B2B2B2B2B2B2B4F20582B222C0A22 - 58202B2B2B2B2B2B2B2B2B2B2E20582B222C0A2258202B4F4F4F4F4F4F4F4F4F - 4F20582B222C0A225820202020202020202020202020582B222C0A2258585858 - 58585858585858585858582B222C0A222B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B - 220A7D3B0A + 4C69090000001000000010000000808080FF808080FF808080FF808080FF8080 + 80FF808080FF000000FF000000FF000000FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF000000FF000000FF808080FF000000FF000000FF000000FF808080FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF0000 + 00FF808080FF808080FF808080FF808080FF000000FF000000FF000000FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF000000FF000000FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF000000FF000000FF000000FF0000 + 00FF808080FF808080FF808080FF808080FF203452FF18304AFF183452FF1830 + 4AFF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF203452FF6AA5E6FFA4D6FFFF8BC6FFFF6AAA + EEFF183452FF203452FF183452FF203452FF183452FF203452FF808080FF8080 + 80FF808080FF808080FF808080FF18304AFF9CD6FFFF8BC6FFFF83C6FFFF62AE + FFFF62AEFFFF62AEFFFF62AEFFFF62AEFFFF62AEFFFF62AEFFFF000000FF8080 + 80FF808080FF808080FF808080FF203452FF83C2FFFF5289CDFF4A5052FFFFFA + FFFFFFF6FFFFF6EEF6FFE6E6E6FFDED6DEFFCDCECDFFCDC6CDFFBDBEBDFFBDBA + BDFFB4B6B4FF313031FF808080FF18304AFF83C6FFFF18304AFF808080FFDEDE + E6FFEEEAEEFFE6E6E6FFE6E2E6FFC5C6CDFFBDBEBDFFACAEACFFA4A1A4FF9495 + 94FF4A484AFF808080FF808080FF203452FF417DBDFF52555AFFDEDADEFFE6DE + E6FFE6E2E6FFE6E2E6FFDED6DEFFC5C6C5FFB4B6BDFFACAEB4FFA4A1A4FF6A69 + 6AFF202020FF808080FF808080FF18304AFF18304AFFCDCECDFFCDCECDFFD5D6 + D5FFDED6DEFFD5D2D5FFD5CED5FFBDBABDFFB4B2B4FFA4A1A4FF9C959CFF4A48 + 4AFF808080FF808080FF808080FF203452FF52555AFFD5D2D5FFBDBEC5FFCDC6 + CDFFCDC6CDFFCDC6CDFFC5C2C5FFB4B2B4FFA4A5ACFFA4A1A4FF737173FF1814 + 18FF808080FF808080FF808080FF18304AFFC5BEC5FFA4A5A4FFACAEACFFACAE + ACFFB4B2B4FFACAAACFFACAAACFF9C999CFF94959CFF8B8D8BFF4A484AFF8080 + 80FF808080FF808080FF808080FF292429FF4A484AFF524C52FF4A4C4AFF524C + 52FF4A4C4AFF524C52FF4A484AFF4A444AFF414041FF393439FF202020FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF0000 + 00FF000000FF000000FF000000FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF000000FF00FF + FFFF808080FF00FFFFFF808080FF000000FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF808080FF808080FF808080FF808080FF000000FF808080FF00FF + FFFF808080FF00FFFFFF808080FF00FFFFFF808080FF00FFFFFF808080FF00FF + FFFF000000FF808080FF808080FF808080FF808080FF000000FF00FFFFFF8080 + 80FF00FFFFFF830000FF00FFFFFF830000FF00FFFFFF830000FF00FFFFFF8080 + 80FF000000FF808080FF808080FF808080FF808080FF000000FF808080FF00FF + FFFF808080FF00FFFFFF830000FF830000FF830000FF00FFFFFF808080FF00FF + FFFF000000FF808080FF808080FF808080FF808080FF000000FF00FFFFFF8080 + 80FF00FFFFFF830000FF830000FF00FFFFFF830000FF830000FF00FFFFFF8080 + 80FF000000FF808080FF808080FF808080FF808080FF000000FF808080FF00FF + FFFF808080FF00FFFFFF830000FF830000FF830000FF00FFFFFF808080FF00FF + FFFF000000FF808080FF808080FF808080FF808080FF000000FF00FFFFFF8080 + 80FF00FFFFFF830000FF00FFFFFF830000FF00FFFFFF830000FF00FFFFFF8080 + 80FF000000FF808080FF808080FF808080FF808080FF000000FF808080FF00FF + FFFF808080FF00FFFFFF808080FF00FFFFFF808080FF00FFFFFF808080FF00FF + FFFF000000FF808080FF808080FF808080FF808080FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF947D83FF9C8183FF9C898BFF948983FF9C898BFF948983FF9C898BFF9489 + 83FF9C898BFF100000FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF9C898BFF18008BFF10008BFF1800D5FF1000CDFF1800FFFF1000FFFF1800 + FFFF1000FFFF180000FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF94898BFFFFFAFFFF808080FF808080FFFFFAF6FF808080FF808080FFFFFA + F6FF808080FF000000FF808080FF808080FF808080FF808080FF83797BFF9481 + 83FF9C858BFF9C858BFF948983FF9C898BFF948583FF94898BFF837D7BFF0804 + 00FFDED6D5FF000400FF808080FF808080FF808080FF808080FFAC8D94FF1000 + 8BFF18008BFF1000CDFF1000D5FF1000FFFF1800FFFF1000FFFF1000FFFF1800 + 00FFD5C2C5FF080000FF808080FF808080FF808080FF808080FFAC7D83FFFFFA + FFFFFFF2FFFFFFFAFFFFFFF6FFFFFFFAFFFFFFFAFFFF808080FFFFF2F6FF2000 + 00FFDEC2C5FF100008FF808080FF808080FF9C8183FF948983FF9C898BFF9489 + 83FF9C898BFF948983FF9C898BFF948983FF9C898BFF200000FFF6CED5FF1000 + 00FFD5CACDFF000000FF808080FF808080FF9C8183FF18008BFF10008BFF1800 + D5FF1000CDFF1800FFFF1000FFFF1800FFFF1000FFFF200808FFD5C6CDFF0800 + 00FFCDCACDFF000400FF808080FF808080FF8B898BFFFFFAFFFF808080FF8080 + 80FF808080FF808080FFFFFAFFFF808080FFFFFAFFFF000000FFC5CECDFF0000 + 00FF000400FF000000FF808080FF808080FF7B8583FF808080FFC5C6C5FFCDD2 + D5FFCDCECDFFCDC6CDFFCDCACDFFC5C2C5FFC5CAC5FF000400FFB4BEBDFF0008 + 00FF808080FF808080FF808080FF808080FF838D8BFF808080FFC5C6C5FFC5CA + CDFFCDCACDFFCDCACDFFD5C2C5FFDECACDFFD5C2C5FF080000FFE6DADEFF0000 + 00FF808080FF808080FF808080FF808080FF7B7D7BFF808080FFCDCECDFFD5CE + D5FFC5BABDFFDECED5FFDEC6CDFFE6CED5FFD5BEC5FF100000FF080000FF2010 + 10FF808080FF808080FF808080FF808080FF948D8BFFFFFAFFFFD5C6CDFFDECA + CDFFE6CED5FFD5BEBDFFD5C6CDFFCDC6C5FFDED2D5FF080000FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF8B898BFF808080FFCDBEC5FFDECE + D5FFC5B2B4FFE6D2DEFFCDC6CDFFC5C2C5FFC5C6C5FF000000FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF838583FF000808FF808080FF0000 + 00FF101010FF000000FF000408FF000000FF000408FF000000FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF000000FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF000000FF000000FF0000FFFF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF0000 + 00FF000000FF0000FFFF0000FFFF0000FFFF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF000000FF000000FF0000 + FFFF0000FFFF0000FFFF0000FFFF0000FFFF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF0000FFFF0000FFFF0000 + FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 + FFFF0000FFFF0000FFFF000000FF808080FF808080FF000000FF000000FF0000 + FFFF0000FFFF0000FFFF0000FFFF0000FFFF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF808080FF808080FF808080FF808080FF0000 + 00FF000000FF0000FFFF0000FFFF0000FFFF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF000000FF000000FF0000FFFF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF000000FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF000000FF000000FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF000000FF0000FFFF000000FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF000000FF0000FFFF0000FFFF0000FFFF000000FF000000FF8080 + 80FF808080FF808080FF808080FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 + 00FF000000FF808080FF808080FF000000FF0000FFFF0000FFFF0000FFFF0000 + FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 + FFFF0000FFFF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 + 00FF000000FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF000000FF0000FFFF0000FFFF0000FFFF000000FF000000FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF000000FF0000FFFF000000FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF000000FF000000FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF838183FF0000 + 00FF000000FF000000FF838183FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF000000FF838183FF837D + 83FF838183FF7B7D7BFF838183FF000000FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF000000FF838183FF808080FFC5C2 + C5FF808080FFC5C2C5FF808080FF838183FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF7B7D7BFF838183FF808080FFC5C2C5FF8080 + 80FF0000FFFF808080FFC5C2C5FF808080FF838183FF837D83FF808080FF8080 + 80FF808080FF808080FF808080FF000000FF838183FFC5C2C5FF808080FFC5C2 + C5FF0000FFFFC5C2C5FF808080FFC5C2C5FF838183FF000000FF808080FF8080 + 80FF808080FF808080FF808080FF000000FF838183FF808080FF0000FFFF0000 + FFFF0000FFFF0000FFFF0000FFFF808080FF838183FF000000FF808080FF8080 + 80FF808080FF808080FF808080FF000000FF838183FFC5C2C5FF808080FFC5C2 + C5FF0000FFFFC5C2C5FF808080FFC5C2C5FF838183FF000000FF808080FF8080 + 80FF808080FF808080FF808080FF7B7D7BFF838183FF808080FFC5C2C5FF8080 + 80FF0000FFFF808080FFC5C2C5FF808080FF838183FF837D83FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF000000FF838183FF808080FFC5C2 + C5FF808080FFC5C2C5FF808080FF838183FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF000000FF838183FF837D + 83FF838183FF7B7D7BFF838183FF000000FF000000FF00FFFFFF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF838183FF0000 + 00FF000000FF000000FF838183FF808080FF00FFFFFF838183FF000000FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF000000FF000000FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF000000FF0000 + 00FF000000FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF0000 + 00FF000000FF000000FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF000000FF000000FF000000FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF000000FF808080FF808080FF808080FF808080FF838183FF0000 + 00FF000000FF000000FF838183FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF000000FF838183FF837D + 83FF838183FF7B7D7BFF838183FF000000FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF000000FF838183FFC5C2C5FF8080 + 80FFC5C2C5FF808080FFC5C2C5FF838183FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF7B7D7BFF838183FFC5BEC5FF808080FFBDBE + BDFF808080FFC5BEC5FF808080FFBDBEBDFF838183FF837D83FF808080FF8080 + 80FF808080FF808080FF808080FF000000FF838183FF808080FFC5C2C5FF8080 + 80FFC5C2C5FF808080FFC5C2C5FF808080FF838183FF000000FF808080FF8080 + 80FF808080FF808080FF808080FF000000FF838183FFBDBEBDFF0000FFFF0000 + FFFF0000FFFF0000FFFF0000FFFFC5BEC5FF838183FF000000FF808080FF8080 + 80FF808080FF808080FF808080FF000000FF838183FF808080FFC5C2C5FF8080 + 80FFC5C2C5FF808080FFC5C2C5FF808080FF838183FF000000FF808080FF8080 + 80FF808080FF808080FF808080FF7B7D7BFF838183FFC5BEC5FF808080FFBDBE + BDFF808080FFC5BEC5FF808080FFBDBEBDFF838183FF837D83FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF000000FF838183FFC5C2C5FF8080 + 80FFC5C2C5FF808080FFC5C2C5FF838183FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF000000FF838183FF837D + 83FF838183FF7B7D7BFF838183FF000000FF000000FF00FFFFFF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF838183FF0000 + 00FF000000FF000000FF838183FF808080FF00FFFFFF838183FF000000FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF000000FF000000FF0000 + 00FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF000000FF0000 + 00FF000000FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF0000 + 00FF000000FF000000FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF000000FF000000FF000000FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF000000FF808080FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF + 00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF + 00FFFFFF00FFFFFF00FF808080FFFFFF00FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FFFFFF00FF808080FFFFFF00FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF000000FFFFFF00FF808080FFFFFF00FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF7B7D + 7BFF000000FFFFFF00FF808080FFFFFF00FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8381 + 83FF000000FFFFFF00FF808080FFFFFF00FF000000FF808080FF808080FF8080 + 80FF808080FF000000FF808080FF000000FF000000FF808080FF808080FF837D + 83FF000000FFFFFF00FF808080FFFFFF00FF000000FF808080FF808080FF8080 + 80FF000000FF000000FF808080FF000000FF000000FF808080FF808080FF8381 + 83FF000000FFFFFF00FF808080FFFFFF00FF000000FF808080FF808080FF0000 + 00FF000000FF000000FF808080FF000000FF000000FF808080FF808080FF7B7D + 7BFF000000FFFFFF00FF808080FFFFFF00FF000000FF808080FF808080FF8080 + 80FF000000FF000000FF808080FF000000FF000000FF808080FF808080FF8381 + 83FF000000FFFFFF00FF808080FFFFFF00FF000000FF808080FF808080FF8080 + 80FF808080FF000000FF808080FF000000FF000000FF808080FF808080FF837D + 83FF000000FFFFFF00FF808080FFFFFF00FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8381 + 83FF000000FFFFFF00FF808080FFFFFF00FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF7B7D + 7BFF000000FFFFFF00FF808080FFFFFF00FF000000FF808080FF838183FF8381 + 83FF838183FF838183FF838183FF838183FF838183FF838183FF838183FF8381 + 83FF000000FFFFFF00FF808080FFFFFF00FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FFFFFF00FF808080FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF + 00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF + 00FFFFFF00FFFFFF00FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF + 00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF + 00FFFFFF00FFFFFF00FF808080FFFFFF00FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FFFFFF00FF808080FFFFFF00FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF000000FFFFFF00FF808080FFFFFF00FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF7B7D + 7BFF000000FFFFFF00FF808080FFFFFF00FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8381 + 83FF000000FFFFFF00FF808080FFFFFF00FF000000FF808080FF808080FF8080 + 80FF000000FF000000FF808080FF000000FF808080FF808080FF808080FF837D + 83FF000000FFFFFF00FF808080FFFFFF00FF000000FF808080FF808080FF8080 + 80FF000000FF000000FF808080FF000000FF000000FF808080FF808080FF8381 + 83FF000000FFFFFF00FF808080FFFFFF00FF000000FF808080FF808080FF8080 + 80FF000000FF000000FF808080FF000000FF000000FF000000FF808080FF7B7D + 7BFF000000FFFFFF00FF808080FFFFFF00FF000000FF808080FF808080FF8080 + 80FF000000FF000000FF808080FF000000FF000000FF808080FF808080FF8381 + 83FF000000FFFFFF00FF808080FFFFFF00FF000000FF808080FF808080FF8080 + 80FF000000FF000000FF808080FF000000FF808080FF808080FF808080FF837D + 83FF000000FFFFFF00FF808080FFFFFF00FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8381 + 83FF000000FFFFFF00FF808080FFFFFF00FF000000FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF7B7D + 7BFF000000FFFFFF00FF808080FFFFFF00FF000000FF808080FF838183FF8381 + 83FF838183FF838183FF838183FF838183FF838183FF838183FF838183FF8381 + 83FF000000FFFFFF00FF808080FFFFFF00FF000000FF000000FF000000FF0000 + 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 + 00FF000000FFFFFF00FF808080FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF + 00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF + 00FFFFFF00FFFFFF00FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF808080FF808080FF808080FF808080FF8080 + 80FF808080FF808080FF808080FF } end object ODImage: TOpenDialog - Options = [ofAllowMultiSelect, ofEnableSizing, ofViewDetail] FilterIndex = 0 + Options = [ofAllowMultiSelect, ofEnableSizing, ofViewDetail] left = 72 top = 64 end diff --git a/examples/imgviewer/frmmain.pas b/examples/imgviewer/frmmain.pas index f3e10044f8..f4887802d2 100644 --- a/examples/imgviewer/frmmain.pas +++ b/examples/imgviewer/frmmain.pas @@ -25,11 +25,13 @@ unit frmmain; interface uses - LCLIntf,SysUtils, Classes, Graphics, Controls, Forms, FileUtil, - Dialogs, StdCtrls, ComCtrls, ExtCtrls, ActnList, Menus, - LResources, LCLType; + LCLIntf, SysUtils, Classes, Graphics, Controls, Forms, FileUtil, + Dialogs, StdCtrls, ComCtrls, ExtCtrls, ActnList, Menus, LCLType; type + + { TMainForm } + TMainForm = class(TForm) MainMenu1: TMainMenu; ToolBar1: TToolBar; @@ -69,6 +71,7 @@ type PreviousImage1: TMenuItem; Nextimagedirectory1: TMenuItem; Previousimagedirectory1: TMenuItem; + ToolButton1: TToolButton; ToolButton4: TToolButton; TBPRev: TToolButton; TBNext: TToolButton; @@ -87,27 +90,26 @@ type procedure AClearExecute(Sender: TObject); procedure ADoubleSizeExecute(Sender: TObject); procedure AHalfSizeExecute(Sender: TObject); - procedure FormKeyDown(Sender: TObject; var Key: Word; - Shift: TShiftState); + procedure FormKeyDown(Sender: TObject; var Key: word; Shift: TShiftState); procedure FormShow(Sender: TObject); procedure ANextImageExecute(Sender: TObject); procedure APreviousImageExecute(Sender: TObject); procedure ANextImageDirExecute(Sender: TObject); procedure APrevImageDirExecute(Sender: TObject); private - FImageScale : Double; - procedure AddFile(FileName: String; ShowFile: Boolean); - procedure ShowFile(Index: Integer); - procedure AddDir(Directory: String; Recurse: Boolean); - procedure RescaleImage(NewScale: Double); + FImageScale: double; + procedure AddFile(FileName: string; ShowFile: boolean); + procedure ShowFile(Index: integer); + procedure AddDir(Directory: string; Recurse: boolean); + procedure RescaleImage(NewScale: double); procedure NextImage; procedure PreviousImage; procedure NextImageDir; procedure PreviousImageDir; - Function NextDirIndex(Direction : Integer) : Integer; - procedure ShiftImageIndex(MoveBy: Integer); + function NextDirIndex(Direction: integer): integer; + procedure ShiftImageIndex(MoveBy: integer); procedure ProcessCommandLine; - procedure DoError(Msg: String; Args: array of const); + procedure DoError(Msg: string; Args: array of const); { Private declarations } public { Public declarations } @@ -120,77 +122,77 @@ implementation {$R *.lfm} -Const +const ImageTypes = '.jpg.jpeg.bmp.xpm.png'; resourcestring SSelectImageDir = 'Select directory to add images from'; SSelectImageDirRec = 'Select directory to recursively add images from'; SImageViewer = 'Image viewer'; - SErrNeedArgument = 'Option at position%d (%s) needs an argument'; + SErrNeedArgument = 'Option at position%d (%s) needs an argument'; { [] } procedure TMainForm.AOpenExecute(Sender: TObject); -Var - I : Integer; +var + I: integer; begin - With ODImage do - begin - If Execute then - for I:=0 to Files.Count-1 do - AddFile(Files[I],(I=0)) - end; + with ODImage do + begin + if Execute then + for I := 0 to Files.Count - 1 do + AddFile(Files[I], (I = 0)); + end; end; -procedure TMainForm.AddFile(FileName :String; ShowFile : Boolean); +procedure TMainForm.AddFile(FileName: string; ShowFile: boolean); -Var - Index : Integer; +var + Index: integer; begin - ShowFile:=ShowFile or (LBFiles.Items.Count=0); - Index:=LBFiles.Items.Add(FileName); - If ShowFile then + ShowFile := ShowFile or (LBFiles.Items.Count = 0); + Index := LBFiles.Items.Add(FileName); + if ShowFile then self.ShowFile(Index); end; -procedure TMainForm.ShowFile(Index : Integer); +procedure TMainForm.ShowFile(Index: integer); -Var - LoadOK : Boolean; +var + LoadOK: boolean; begin - If Index=-1 then - begin - IMain.Picture:=Nil; - Caption:=SImageViewer; - end + if Index = -1 then + begin + IMain.Picture := nil; + Caption := SImageViewer; + end else - Repeat - Try - LoadOK:=False; - IMain.Align:=AlClient; - Imain.Stretch:=False; - FImageScale:=1.0; + repeat + try + LoadOK := false; + IMain.Align := AlClient; + Imain.Stretch := false; + FImageScale := 1.0; IMain.Picture.LoadFromFile(LBFiles.Items[Index]); - Caption:=SImageViewer+'('+LBFiles.Items[Index]+')'; - LoadOK:=True; - Except - If IndexItemIndex then - LBFiles.Itemindex:=Index; + until LoadOK or (Index = -1); + with LBFiles do + begin + if Index <> ItemIndex then + LBFiles.ItemIndex := Index; { If Not ItemVisible(ItemIndex) then MakeCurrentVisible;} - end; + end; end; procedure TMainForm.LBFilesClick(Sender: TObject); @@ -199,50 +201,54 @@ begin end; procedure TMainForm.AOpenDirExecute(Sender: TObject); - -Var - Dir : String; - +// Open a single directory (non recursively) +var + Dir: string; + WasSorted: boolean; begin - if SelectDirectory(SSelectImageDir,'/',Dir) then - -// if SelectDirectory(SSelectImageDir,'/',Dir,True) then - AddDir(Dir,False); + if SelectDirectory(SSelectImageDir, '/', Dir, true) then + begin + Screen.Cursor := crHourglass; //Show user he may have to wait for big directories + try + LBFiles.Items.BeginUpdate; //Indicate to the listbox that we're doing a lengthy operation + WasSorted:=LBFiles.Sorted; + LBFiles.Sorted:=true; + AddDir(Dir, false); + LBFiles.Sorted:=WasSorted; + finally + LBFiles.Items.EndUpdate; + Screen.Cursor := crDefault; + end; + end; end; -procedure TMainForm.AddDir(Directory :String; Recurse : Boolean); +procedure TMainForm.AddDir(Directory: string; Recurse: boolean); -Var - Info : TSearchRec; - Ext : String; +var + Info: TSearchRec; + Ext: string; begin - LBFiles.Items.BeginUpdate; - Try - Directory:=IncludeTrailingBackslash(Directory); - if FindFirstUTF8(Directory+'*.*',0,Info)=0 then + Directory := IncludeTrailingBackslash(Directory); + if FindFirstUTF8(Directory + '*.*', 0, Info) = 0 then + try + repeat + Ext := ExtractFileExt(Info.Name); + if Pos(Ext, ImageTypes) <> 0 then + AddFile(Directory + Info.Name, false); + until (FindNextUTF8(Info) <> 0) + finally + FindCloseUTF8(Info); + end; + if Recurse then + if FindFirstUTF8(Directory + '*', faDirectory, Info) = 0 then try - Repeat - Ext:=ExtractFileExt(Info.Name); - If Pos(Ext,ImageTypes)<>0 then - AddFile(Directory+Info.Name,False); - until (FindNextUTF8(Info)<>0) - Finally + repeat + if (Info.Name <> '.') and (Info.Name <> '') and (info.Name <> '..') and ((Info.Attr and faDirectory) <> 0) then + AddDir(Directory + Info.Name, true); + until (FindNextUTF8(Info) <> 0) + finally FindCloseUTF8(Info); end; - If Recurse then - if FindFirstUTF8(Directory+'*',faDirectory,Info)=0 then - try - Repeat - If (Info.Name<>'.') and (Info.Name<>'') and (info.name<>'..') and - ((Info.Attr and faDirectory)<>0) then - AddDir(Directory+Info.name,True); - until (FindNextUTF8(Info)<>0) - finally - FindCloseUTF8(Info); - end; - Finally - LBFiles.Items.EndUpdate; - end; end; procedure TMainForm.AExitExecute(Sender: TObject); @@ -251,18 +257,30 @@ begin end; procedure TMainForm.OpenDirRecursivelyExecute(Sender: TObject); - -Var - Dir : String; - +// Open a directory recursively +var + Dir: string; + WasSorted: boolean; begin - if SelectDirectory(SSelectImageDirRec,'/',Dir) then - AddDir(Dir,True); + if SelectDirectory(SSelectImageDirRec, '/', Dir, true) then + begin + Screen.Cursor := crHourglass; //Show user he may have to wait for big directories + try + LBFiles.Items.BeginUpdate; //Indicate to the listbox that we're doing a lengthy operation + WasSorted:=LBFiles.Sorted; + LBFiles.Sorted:=true; + AddDir(Dir, true); + LBFiles.Sorted:=WasSorted; + finally + LBFiles.Items.EndUpdate; + Screen.Cursor := crDefault; + end; + end; end; procedure TMainForm.AClearExecute(Sender: TObject); begin - LBFiles.ItemIndex:=-1; + LBFiles.ItemIndex := -1; ShowFile(-1); LBFiles.Items.Clear; end; @@ -273,22 +291,22 @@ begin RescaleImage(2.0); end; -procedure TMainForm.RescaleImage(NewScale : Double); +procedure TMainForm.RescaleImage(NewScale: double); -Var - OrgWidth,OrgHeight : Integer; - Rect : TRect; +var + OrgWidth, OrgHeight: integer; + Rect: TRect; begin - OrgWidth:=IMain.Picture.Bitmap.Width; - OrgHeight:=IMain.Picture.Bitmap.Height; - FImageScale:=FImageScale*NewScale; - Rect:=IMain.BoundsRect; - Rect.Right:=Rect.Left+Round(OrgWidth*FImageScale); - Rect.Bottom:=Rect.Top+Round(OrgHeight*FImageScale); - Imain.Align:=AlNone; - IMain.BoundsRect:=Rect; - Imain.Stretch:=True; + OrgWidth := IMain.Picture.Bitmap.Width; + OrgHeight := IMain.Picture.Bitmap.Height; + FImageScale := FImageScale * NewScale; + Rect := IMain.BoundsRect; + Rect.Right := Rect.Left + Round(OrgWidth * FImageScale); + Rect.Bottom := Rect.Top + Round(OrgHeight * FImageScale); + Imain.Align := AlNone; + IMain.BoundsRect := Rect; + Imain.Stretch := true; end; procedure TMainForm.AHalfSizeExecute(Sender: TObject); @@ -308,128 +326,146 @@ begin ShiftImageIndex(-1); end; -procedure TMainForm.ShiftImageIndex(MoveBy : Integer); +procedure TMainForm.ShiftImageIndex(MoveBy: integer); -Var - ImageIndex : Integer; +var + ImageIndex: integer; begin - ImageIndex:=LBFiles.ItemIndex; - ImageIndex:=ImageIndex+MoveBy; - If ImageIndex<0 then - ImageIndex:=LBFiles.Items.Count-1; - If ImageIndex>=LBFiles.Items.Count then - begin - ImageIndex:=0; - If LBFiles.Items.Count=0 then - ImageIndex:=-1; - end; + ImageIndex := LBFiles.ItemIndex; + ImageIndex := ImageIndex + MoveBy; + if ImageIndex < 0 then + ImageIndex := LBFiles.Items.Count - 1; + if ImageIndex >= LBFiles.Items.Count then + begin + ImageIndex := 0; + if LBFiles.Items.Count = 0 then + ImageIndex := -1; + end; ShowFile(ImageIndex); end; -procedure TMainForm.FormKeyDown(Sender: TObject; var Key: Word; - Shift: TShiftState); +procedure TMainForm.FormKeyDown(Sender: TObject; var Key: word; Shift: TShiftState); begin - if (shift=[ssShift]) or (shift=[ssAlt]) then + // todo: write help about with at least key combinations! + if (shift = [ssShift]) or (shift = [ssAlt]) then + begin + if (key = VK_Prior) then begin - if (key=VK_Prior) then - begin + // Page Up RescaleImage(2.0); - Key:=0; - end - else if (key=VK_Next) then - begin - RescaleImage(0.5); - Key:=0; - end - else if (key=VK_Left) then - begin - PreviousImage; - Key:=0; - end - else if (key=VK_right) then - begin - NextImage; - Key:=0; - end + Key := 0; end - else if (shift=[]) then + else if (key = VK_Next) then begin - if Key=VK_UP then - Previousimage - else if Key=VK_DOWN then + // Page Down + RescaleImage(0.5); + Key := 0; + end + else if (key = VK_Left) then + begin + // Left + PreviousImage; + Key := 0; + end + else if (key = VK_right) then + begin + // Right NextImage; + Key := 0; end; + end + else if (shift = []) then + begin + if Key = VK_UP then + begin + // Up + Previousimage; + Key := 0; + end + else if Key = VK_DOWN then + begin + // Down + NextImage; + Key := 0; + end; + end; end; -procedure TMainForm.DoError(Msg : String; Args : Array Of const); + +procedure TMainForm.DoError(Msg: string; Args: array of const); begin - ShowMessage(Format(Msg,Args)); + ShowMessage(Format(Msg, Args)); end; procedure TMainForm.ProcessCommandLine; - Function CheckOption(Index : Integer;Short,Long : String): Boolean; + function CheckOption(Index: integer; Short, Long: string): boolean; var - O : String; + O: string; begin - O:=ParamStrUTF8(Index); - Result:=(O='-'+short) or (copy(O,1,Length(Long)+3)=('--'+long+'=')); + O := ParamStrUTF8(Index); + Result := (O = '-' + short) or (copy(O, 1, Length(Long) + 3) = ('--' + long + '=')); end; - Function OptionArg(Var Index : Integer) : String; + function OptionArg(var Index: integer): string; - Var - P : Integer; + var + P: integer; begin - if (Length(ParamStrUTF8(Index))>1) and (ParamStrUTF8(Index)[2]<>'-') then - begin - If Index2 then - begin - P:=Pos('=',ParamStrUTF8(Index)); - If (P=0) then - DoError(SErrNeedArgument,[Index,ParamStrUTF8(Index)]) - else - begin - Result:=ParamStrUTF8(Index); - Delete(Result,1,P); - end; - end; - end; - -Var - I : Integer; - S : String; - FRecursive : Boolean; - -begin - FRecursive:=False; - I:=0; - While (I 1) and (ParamStrUTF8(Index)[2] <> '-') then begin - Inc(I); - If CheckOption(I,'r','recursive') then - FRecursive:=True - else + if Index < ParamCount then begin - S:=ParamStrUTF8(I); - If DirectoryExistsUTF8(S) then - AddDir(ExpandFileNameUTF8(S),FRecursive) - else if FileExistsUTF8(S) then - AddFile(ExpandFileNameUTF8(S),LBFiles.Items.Count=0); + Inc(Index); + Result := ParamStrUTF8(Index); + end + else + DoError(SErrNeedArgument, [Index, ParamStrUTF8(Index)]); + end + else if length(ParamStrUTF8(Index)) > 2 then + begin + P := Pos('=', ParamStrUTF8(Index)); + if (P = 0) then + DoError(SErrNeedArgument, [Index, ParamStrUTF8(Index)]) + else + begin + Result := ParamStrUTF8(Index); + Delete(Result, 1, P); end; end; + end; + +var + I: integer; + S: string; + FRecursive: boolean; + +begin + FRecursive := false; + I := 0; + while (I < ParamCount) do + begin + Inc(I); + if CheckOption(I, 'r', 'recursive') then + FRecursive := true + else + begin + S := ParamStrUTF8(I); + Screen.Cursor := crHourglass; //Show user he may have to wait + try + if DirectoryExistsUTF8(S) then + AddDir(ExpandFileNameUTF8(S), FRecursive) + else if FileExistsUTF8(S) then + AddFile(ExpandFileNameUTF8(S), LBFiles.Items.Count = 0); + finally + Screen.Cursor := crDefault; + end; + end; + end; end; procedure TMainForm.FormShow(Sender: TObject); @@ -439,41 +475,39 @@ end; procedure TMainForm.NextImageDir; -Var - Index : Integer; +var + Index: integer; begin - Index:=NextDirIndex(1); - If (Index<>-1) then - ShowFile(Index); + Index := NextDirIndex(1); + ShowFile(Index); end; -Function TMainForm.NextDirIndex(Direction: Integer) : integer; +function TMainForm.NextDirIndex(Direction: integer): integer; -Var - Dir : String; +var + Dir: string; begin - Result:=-1; - If LBFiles.Itemindex=-1 then + Result := -1; + if LBFiles.ItemIndex = -1 then Exit; - Result:=LBFiles.Itemindex; - Dir:=ExtractFilePath(LBFiles.Items[Result]); - Repeat - Result:=Result+Direction; - Until ((Result=-1) or (Result>=LBFiles.Items.Count)) or (Dir<>ExtractFilePath(LBFiles.Items[Result])); - If Result>=LBFiles.Items.Count then - Result:=-1; + Result := LBFiles.ItemIndex; + Dir := ExtractFilePath(LBFiles.Items[Result]); + repeat + Result := Result + Direction; + until ((Result = -1) or (Result >= LBFiles.Items.Count)) or (Dir <> ExtractFilePath(LBFiles.Items[Result])); + if Result >= LBFiles.Items.Count then + Result := -1; end; procedure TMainForm.PreviousImageDir; -Var - Index : Integer; +var + Index: integer; begin - Index:=NextDirIndex(-1); - If (Index<>-1) then - ShowFile(Index); + Index := NextDirIndex(-1); + ShowFile(Index); end; procedure TMainForm.ANextImageExecute(Sender: TObject); @@ -483,7 +517,7 @@ end; procedure TMainForm.APreviousImageExecute(Sender: TObject); begin - PreviousImage + PreviousImage; end; procedure TMainForm.ANextImageDirExecute(Sender: TObject); diff --git a/examples/imgviewer/imgview.lpi b/examples/imgviewer/imgview.lpi index 1fc8e7e1d4..716cfc29d9 100644 --- a/examples/imgviewer/imgview.lpi +++ b/examples/imgviewer/imgview.lpi @@ -1,22 +1,38 @@ - + - + - + <ResourceType Value="res"/> <UseXPManifest Value="True"/> </General> - <VersionInfo> - <StringTable Comments="" CompanyName="" FileDescription="" FileVersion="0.0.0.0" InternalName="" LegalCopyright="" LegalTrademarks="" OriginalFilename="" ProductName="" ProductVersion="0.0.0.0"/> - </VersionInfo> + <BuildModes Count="2"> + <Item1 Name="default" Default="True"/> + <Item2 Name="debug"> + <CompilerOptions> + <Version Value="11"/> + <SearchPaths> + <SrcPath Value="$(LazarusDir)/lcl;$(LazarusDir)/lcl/interfaces/$(LCLWidgetType)"/> + </SearchPaths> + <Parsing> + <SyntaxOptions> + <UseAnsiStrings Value="False"/> + </SyntaxOptions> + </Parsing> + <Other> + <CompilerPath Value="$(CompPath)"/> + </Other> + </CompilerOptions> + </Item2> + </BuildModes> <PublishOptions> <Version Value="2"/> <IgnoreBinaries Value="False"/> @@ -45,15 +61,43 @@ <Filename Value="frmmain.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="MainForm"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> <UnitName Value="frmmain"/> </Unit1> </Units> </ProjectOptions> <CompilerOptions> - <Version Value="8"/> + <Version Value="11"/> + <Target> + <Filename Value="imgviewer"/> + </Target> <SearchPaths> - <SrcPath Value="$(LazarusDir)/lcl/;$(LazarusDir)/lcl/interfaces/$(LCLWidgetType)/"/> + <IncludeFiles Value="$(ProjOutDir)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> + <Parsing> + <SyntaxOptions> + <UseAnsiStrings Value="False"/> + </SyntaxOptions> + </Parsing> + <CodeGeneration> + <SmartLinkUnit Value="True"/> + <Optimizations> + <OptimizationLevel Value="3"/> + </Optimizations> + </CodeGeneration> + <Linking> + <Debugging> + <GenerateDebugInfo Value="False"/> + </Debugging> + <LinkSmart Value="True"/> + <Options> + <Win32> + <GraphicApplication Value="True"/> + </Win32> + </Options> + </Linking> <Other> <CompilerPath Value="$(CompPath)"/> </Other> diff --git a/examples/imgviewer/readme.txt b/examples/imgviewer/readme.txt new file mode 100644 index 0000000000..9ab83fc507 --- /dev/null +++ b/examples/imgviewer/readme.txt @@ -0,0 +1,16 @@ +Image viewer +============ + +This example application shows how to load and show image/graphical files. + +It also demonstrates +- scaling images +- using the Lazarus functions FindFirstUTF8 and FindNextUTF8 to recursively seek files and directories +- dealing with key presses using the KeyDown event +- using BeginUpdate and EndUpdate to improve processing speed of certain controls (a ListBox in this case) +- setting the cursor to hourglass and reset it to indicate a long-running operation is going on (e.g. when recursively loading directories with a large amount of images) + +Possible improvements: += add support for other file formats (e.g. tiff) +- add a setting that allows automatic scaling down if a picture is larger than the control +- use a cache in a different thread to preload images the user is likely to look at next \ No newline at end of file