home *** CD-ROM | disk | FTP | other *** search
/ Mastering Visual Basic 6 / mastvb6.iso / leadtools / ocx32.lt / Main.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1998-07-02  |  87.5 KB  |  2,605 lines

  1. unit Main;
  2. interface
  3.  
  4. uses Windows, SysUtils, Classes, Graphics, Forms, Controls, Menus, Printers,
  5.   StdCtrls, Dialogs, Buttons, Messages, ExtCtrls, ComCtrls, LEAD, LEADDef,
  6.   OleCtrls, Twain, Info, Gauges, About, List, LTDLGOCX, OLEAuto,
  7.   LTISIOCX, ISIS, LEADDlg, LEADISIS;
  8.  
  9. const
  10.    MAX_STRING_LIST = 8;
  11.  
  12. type
  13.   TStringArray = array[1..MAX_STRING_LIST] of string;
  14.  
  15.   TMainForm = class(TForm)
  16.     MainMenu1: TMainMenu;
  17.     File1: TMenuItem;
  18.     FileOpenItem: TMenuItem;
  19.     FileCloseItem: TMenuItem;
  20.     Window1: TMenuItem;
  21.     Help1: TMenuItem;
  22.     N1: TMenuItem;
  23.     FileExitItem: TMenuItem;
  24.     WindowCascadeItem: TMenuItem;
  25.     WindowTileItem: TMenuItem;
  26.     WindowArrangeItem: TMenuItem;
  27.     HelpAboutItem: TMenuItem;
  28.     FileSaveAsItem: TMenuItem;
  29.     Edit1: TMenuItem;
  30.     CopyItem: TMenuItem;
  31.     PasteItem: TMenuItem;
  32.     WindowMinimizeItem: TMenuItem;
  33.     SpeedPanel: TPanel;
  34.     StatusBar: TStatusBar;
  35.     CloseAll: TMenuItem;
  36.     Print: TMenuItem;
  37.     Preferences1: TMenuItem;
  38.     Palette: TMenuItem;
  39.     Dithering1: TMenuItem;
  40.     BitonalScaling1: TMenuItem;
  41.     StatusBarItem: TMenuItem;
  42.     View1: TMenuItem;
  43.     Normal1: TMenuItem;
  44.     ZoomIn1: TMenuItem;
  45.     ZoomOut1: TMenuItem;
  46.     N2: TMenuItem;
  47.     Effects1: TMenuItem;
  48.     zoom50: TMenuItem;
  49.     zoom33: TMenuItem;
  50.     zoom25: TMenuItem;
  51.     zoom200: TMenuItem;
  52.     zoom300: TMenuItem;
  53.     zoom400: TMenuItem;
  54.     Image1: TMenuItem;
  55.     Color1: TMenuItem;
  56.     Flip1: TMenuItem;
  57.     Reverse1: TMenuItem;
  58.     Rotate1: TMenuItem;
  59.     Shear1: TMenuItem;
  60.     Deskew1: TMenuItem;
  61.     N3: TMenuItem;
  62.     Resize1: TMenuItem;
  63.     Resample1: TMenuItem;
  64.     N4: TMenuItem;
  65.     SpatialFilter1: TMenuItem;
  66.     BinaryFilter1: TMenuItem;
  67.     Halftone1: TMenuItem;
  68.     Grayscale1: TMenuItem;
  69.     ColorResolution1: TMenuItem;
  70.     N5: TMenuItem;
  71.     Invert1: TMenuItem;
  72.     Brightness1: TMenuItem;
  73.     Contrast1: TMenuItem;
  74.     Hue1: TMenuItem;
  75.     HistogramEqualize1: TMenuItem;
  76.     StretchIntensity1: TMenuItem;
  77.     GammaCorrect1: TMenuItem;
  78.     IntensityDetect1: TMenuItem;
  79.     N6: TMenuItem;
  80.     TwainSelect1: TMenuItem;
  81.     TwainAcquire1: TMenuItem;
  82.     TwainAcquireExtended1: TMenuItem;
  83.     TwainAcquireCallback1: TMenuItem;
  84.     ImageInfo1: TMenuItem;
  85.     N7: TMenuItem;
  86.     Gauge1: TGauge;
  87.     PrinterSetupDialog1: TPrinterSetupDialog;
  88.     OpenBtn: TSpeedButton;
  89.     SaveBtn: TSpeedButton;
  90.     CutBtn: TSpeedButton;
  91.     CopyBtn: TSpeedButton;
  92.     PasteBtn: TSpeedButton;
  93.     SpeedButton7: TSpeedButton;
  94.     CutItem: TMenuItem;
  95.     Auto1: TMenuItem;
  96.     Fixed1: TMenuItem;
  97.     Ordered1: TMenuItem;
  98.     ErrorDiffusion1: TMenuItem;
  99.     BitonalNormal1: TMenuItem;
  100.     FavorBlack1: TMenuItem;
  101.     ScaleToGray1: TMenuItem;
  102.     CaptureScreen1: TMenuItem;
  103.     Erosion1: TMenuItem;
  104.     Dilation1: TMenuItem;
  105.     Gradient1: TMenuItem;
  106.     Laplacian1: TMenuItem;
  107.     Sobel1: TMenuItem;
  108.     Prewitt1: TMenuItem;
  109.     ShiftandDifference1: TMenuItem;
  110.     LineSegment1: TMenuItem;
  111.     ImageProcessing1: TMenuItem;
  112.     Posterize1: TMenuItem;
  113.     Mosaic1: TMenuItem;
  114.     Average1: TMenuItem;
  115.     Median1: TMenuItem;
  116.     Sharpen1: TMenuItem;
  117.     Despeckle1: TMenuItem;
  118.     AddNoise1: TMenuItem;
  119.     N8: TMenuItem;
  120.     SelectRegion1: TMenuItem;
  121.     CancelRegion1: TMenuItem;
  122.     ToolNone1: TMenuItem;
  123.     ToolRect1: TMenuItem;
  124.     ToolEllipse1: TMenuItem;
  125.     ToolRndRect1: TMenuItem;
  126.     ToolFreeHand1: TMenuItem;
  127.     N9: TMenuItem;
  128.     FlipRegion1: TMenuItem;
  129.     ReverseRegion1: TMenuItem;
  130.     RotateRegion1: TMenuItem;
  131.     ResizeRegion1: TMenuItem;
  132.     ResampleRegion1: TMenuItem;
  133.     Emboss2: TMenuItem;
  134.     N10: TMenuItem;
  135.     ISISSelect1: TMenuItem;
  136.     ISISAcquire1: TMenuItem;
  137.     ISISAcquireMulti1: TMenuItem;
  138.     WindowLevel1: TMenuItem;
  139.     Grayscale121: TMenuItem;
  140.     Grayscale161: TMenuItem;
  141.     LTDlgOcxCtl1: TLeadDlgCtrl;
  142.     SaveDialog: TLeadDlgCtrl;
  143.     OpenDialog: TLeadDlgCtrl;
  144.     LTIsis: TLeadIsisCtrl;
  145.     HiddenLead: TLeadCtrl;
  146.     procedure FormCreate(Sender: TObject);
  147.     procedure WindowCascadeItemClick(Sender: TObject);
  148.     procedure OnActivate(Sender: TObject);
  149.     procedure WindowTileItemClick(Sender: TObject);
  150.     procedure WindowArrangeItemClick(Sender: TObject);
  151.     procedure FileCloseItemClick(Sender: TObject);
  152.     procedure FileOpenItemClick(Sender: TObject);
  153.     procedure FileExitItemClick(Sender: TObject);
  154.     procedure FileSaveAsItemClick(Sender: TObject);
  155.     procedure CutItemClick(Sender: TObject);
  156.     procedure CopyItemClick(Sender: TObject);
  157.     procedure PasteItemClick(Sender: TObject);
  158.     procedure WindowMinimizeItemClick(Sender: TObject);
  159.     procedure FormDestroy(Sender: TObject);
  160.     procedure CloseAllClick(Sender: TObject);
  161.     procedure PrintClick(Sender: TObject);
  162.     procedure TwainSelect1Click(Sender: TObject);
  163.     procedure TwainAcquire1Click(Sender: TObject);
  164.     procedure TwainAcquireExtended1Click(Sender: TObject);
  165.     procedure TwainAcquireCallback1Click(Sender: TObject);
  166.     procedure OnTwainPage(Sender: TObject);
  167.     procedure ImageInfo1Click(Sender: TObject);
  168.     procedure UpdateMenuItems(Sender: TObject);
  169.     procedure StatusBarItemClick(Sender: TObject);
  170.     procedure Normal1Click(Sender: TObject);
  171.     procedure zoom25Click(Sender: TObject);
  172.     procedure zoom33Click(Sender: TObject);
  173.     procedure zoom50Click(Sender: TObject);
  174.     procedure zoom200Click(Sender: TObject);
  175.     procedure zoom300Click(Sender: TObject);
  176.     procedure zoom400Click(Sender: TObject);
  177.     procedure Effects1Click(Sender: TObject);
  178.     procedure Flip1Click(Sender: TObject);
  179.     procedure Reverse1Click(Sender: TObject);
  180.     procedure Rotate1Click(Sender: TObject);
  181.     procedure Shear1Click(Sender: TObject);
  182.     procedure Deskew1Click(Sender: TObject);
  183.     procedure Despeckle1Click(Sender: TObject);
  184.     procedure Resize1Click(Sender: TObject);
  185.     procedure Resample1Click(Sender: TObject);
  186.     procedure Halftone1Click(Sender: TObject);
  187.     procedure Grayscale1Click(Sender: TObject);
  188.     procedure ColorResolution1Click(Sender: TObject);
  189.     procedure Invert1Click(Sender: TObject);
  190.     procedure Brightness1Click(Sender: TObject);
  191.     procedure Contrast1Click(Sender: TObject);
  192.     procedure Hue1Click(Sender: TObject);
  193.     procedure HistogramEqualize1Click(Sender: TObject);
  194.     procedure StretchIntensity1Click(Sender: TObject);
  195.     procedure GammaCorrect1Click(Sender: TObject);
  196.     procedure IntensityDetect1Click(Sender: TObject);
  197.     procedure Auto1Click(Sender: TObject);
  198.     procedure Fixed1Click(Sender: TObject);
  199.     procedure Ordered1Click(Sender: TObject);
  200.     procedure ErrorDiffusion1Click(Sender: TObject);
  201.     procedure BitonalNormal1Click(Sender: TObject);
  202.     procedure FavorBlack1Click(Sender: TObject);
  203.     procedure ScaleToGray1Click(Sender: TObject);
  204.     procedure HelpAboutItemClick(Sender: TObject);
  205.     procedure CaptureScreen1Click(Sender: TObject);
  206.     procedure Erosion1Click(Sender: TObject);
  207.     procedure Dilation1Click(Sender: TObject);
  208.     procedure Gradient1Click(Sender: TObject);
  209.     procedure Laplacian1Click(Sender: TObject);
  210.     procedure Sobel1Click(Sender: TObject);
  211.     procedure Prewitt1Click(Sender: TObject);
  212.     procedure ShiftandDifference1Click(Sender: TObject);
  213.     procedure LineSegment1Click(Sender: TObject);
  214.     procedure Posterize1Click(Sender: TObject);
  215.     procedure Mosaic1Click(Sender: TObject);
  216.     procedure Average1Click(Sender: TObject);
  217.     procedure Median1Click(Sender: TObject);
  218.     procedure Sharpen1Click(Sender: TObject);
  219.     procedure AddNoise1Click(Sender: TObject);
  220.     procedure Edit1Click(Sender: TObject);
  221.     procedure SelectRegion1Click(Sender: TObject);
  222.     procedure Image1Click(Sender: TObject);
  223.     procedure ToolNone1Click(Sender: TObject);
  224.     procedure ToolRect1Click(Sender: TObject);
  225.     procedure ToolEllipse1Click(Sender: TObject);
  226.     procedure ToolRndRect1Click(Sender: TObject);
  227.     procedure ToolFreeHand1Click(Sender: TObject);
  228.     procedure FlipRegion1Click(Sender: TObject);
  229.     procedure ReverseRegion1Click(Sender: TObject);
  230.     procedure RotateRegion1Click(Sender: TObject);
  231.     procedure ResizeRegion1Click(Sender: TObject);
  232.     procedure CancelRegion1Click(Sender: TObject);
  233.     procedure ResampleRegion1Click(Sender: TObject);
  234.     procedure Emboss2Click(Sender: TObject);
  235.     procedure ISISSelect1Click(Sender: TObject);
  236.     procedure ISISAcquire1Click(Sender: TObject);
  237.     procedure ISISAcquireMulti1Click(Sender: TObject);
  238.     procedure File1Click(Sender: TObject);
  239.     procedure WindowLevel1Click(Sender: TObject);
  240.     procedure Grayscale121Click(Sender: TObject);
  241.     procedure Grayscale161Click(Sender: TObject);
  242.     procedure Color1Click(Sender: TObject);
  243.  
  244.   private
  245.     { Private declarations }
  246.     procedure CreateMDIChild(const Name: string);
  247.     procedure ShowHint(Sender: TObject);
  248.   public
  249.     { Public declarations }
  250.     function CheckError(E: EOleError):boolean;
  251.   end;
  252.  
  253. const
  254.    szLoadFilter = 'All files (*.*)|*.*|LEAD|*.cmp|JPEG|*.jpg|CALS 1|*.cal|Compuserve PNG|*.png|'+
  255.          'EPS|*.eps|GEM|*.gem|GIF|*.gif|IOCA|*.ica|Mac PICT|*.pct|'+
  256.          'MacPaint|*.mac|MSP|*.msp|PCX|*.pcx|PSD|*.psd|SUN|*.ras|TGA|*.tga|'+
  257.          'TIFF|*.tif;*.jtf|BMP|*.bmp|FPX|*.fpx|DIC|*.dic|ICO|*.ico|CUR|*.cur|AWD|*.awd';
  258.  
  259.    aChannelList: TStringArray = ( 'Master', 'Red', 'Green', 'Blue', '', '', '', '' );
  260.  
  261.    aEffectList: array[EFX_EFFECT_WIPE_CLASS..EFX_EFFECT_WIPE_MAX] of string = (
  262. 'Left to Right',
  263. 'Right to Left',
  264. 'Top to Bottom',
  265. 'Bottom to Top',
  266. 'Left-Top to Right-Bottom',
  267. 'Left-Bottom to Right-Top',
  268. 'Right-Top to Left-Bottom',
  269. 'Right-Bottom to Left-Top',
  270. 'Horz Interlace Left to Right twice',
  271. 'Vert Interlace Top to Bottom twice',
  272. 'Horz Interlace Left to Right then back',
  273. 'Vert Interlace Top to Bottom then back',
  274. 'Vert Interlace Left to Right twice',
  275. 'Vert Interlace Right to Left twice',
  276. 'Horz Interlace Top to Bottom twice',
  277. 'Horz Interlace Bottom to Top twice',
  278. 'Vert Interlace Left to Right then back',
  279. 'Vert Interlace Right to Left then back',
  280. 'Horz Interlace Top to Bottom then back',
  281. 'Horz Interlace Bottom to Top then back',
  282. 'Horz Interlace Left to Right & Right to Left',
  283. 'Vert Interlace Top to Bottom & Bottom to Top',
  284. 'Vert Interlace Left & Right to Center',
  285. 'Vert Interlace Center to Left & Right',
  286. 'Horz Interlace Top & Bottom to Center',
  287. 'Horz Interlace Center to Top & Bottom',
  288. 'Vert Interlace Left & Right to Center then back',
  289. 'Vert Interlace Center to Left & Right then back',
  290. 'Horz Interlace Top & Bottom to Center then back',
  291. 'Horz Interlace Center to Top & Bottom then back',
  292. '2-Way Left-Top & Right-Bottom to Center',
  293. '2-Way Left-Bottom & Right-Top to Center',
  294. '2-Way Center to Left-Top & Right-Bottom',
  295. '2-Way Center to Left-Bottom & Right-Top',
  296. '2-Way Left-Bottom & Right-Bottom to Top',
  297. '2-Way Left-Top & Right-Top to Bottom',
  298. '2-Way Right-Top & Right-Bottom to Left',
  299. '2-Way Left-Top & Left-Bottom to Right',
  300. '2-Way Left Top to Bottom & Right Bottom to Top',
  301. '2-Way Top Left to Right & Bottom Right to Left',
  302. '4-Way Corners Out',
  303. '4-Way Center to Left & Right then Top & Bottom',
  304. '4-Way Top & Bottom then Left & Right to Center',
  305. '4-Way Left Left Left Left',
  306. '4-Way Left Left Left Right',
  307. '4-Way Left Left Left Top',
  308. '4-Way Left Left Left Bottom',
  309. '4-Way Left Left Right Left',
  310. '4-Way Left Left Right Right',
  311. '4-Way Left Left Right Top',
  312. '4-Way Left Left Right Bottom',
  313. '4-Way Left Left Top Left',
  314. '4-Way Left Left Top Right',
  315. '4-Way Left Left Top Top',
  316. '4-Way Left Left Top Bottom',
  317. '4-Way Left Left Bottom Left',
  318. '4-Way Left Left Bottom Right',
  319. '4-Way Left Left Bottom Top',
  320. '4-Way Left Left Bottom Bottom',
  321. '4-Way Left Right Left Left',
  322. '4-Way Left Right Left Right',
  323. '4-Way Left Right Left Top',
  324. '4-Way Left Right Left Bottom',
  325. '4-Way Left Right Right Left',
  326. '4-Way Left Right Right Right',
  327. '4-Way Left Right Right Top',
  328. '4-Way Left Right Right Bottom',
  329. '4-Way Left Right Top Left',
  330. '4-Way Left Right Top Right',
  331. '4-Way Left Right Top Top',
  332. '4-Way Left Right Top Bottom',
  333. '4-Way Left Right Bottom Left',
  334. '4-Way Left Right Bottom Right',
  335. '4-Way Left Right Bottom Top',
  336. '4-Way Left Right Bottom Bottom',
  337. '4-Way Left Top Left Left',
  338. '4-Way Left Top Left Right',
  339. '4-Way Left Top Left Top',
  340. '4-Way Left Top Left Bottom',
  341. '4-Way Left Top Right Left',
  342. '4-Way Left Top Right Right',
  343. '4-Way Left Top Right Top',
  344. '4-Way Left Top Right Bottom',
  345. '4-Way Left Top Top Left',
  346. '4-Way Left Top Top Right',
  347. '4-Way Left Top Top Top',
  348. '4-Way Left Top Top Bottom',
  349. '4-Way Left Top Bottom Left',
  350. '4-Way Left Top Bottom Right',
  351. '4-Way Left Top Bottom Top',
  352. '4-Way Left Top Bottom Bottom',
  353. '4-Way Left Bottom Left Left',
  354. '4-Way Left Bottom Left Right',
  355. '4-Way Left Bottom Left Top',
  356. '4-Way Left Bottom Left Bottom',
  357. '4-Way Left Bottom Right Left',
  358. '4-Way Left Bottom Right Right',
  359. '4-Way Left Bottom Right Top',
  360. '4-Way Left Bottom Right Bottom',
  361. '4-Way Left Bottom Top Left',
  362. '4-Way Left Bottom Top Right',
  363. '4-Way Left Bottom Top Top',
  364. '4-Way Left Bottom Top Bottom',
  365. '4-Way Left Bottom Bottom Left',
  366. '4-Way Left Bottom Bottom Right',
  367. '4-Way Left Bottom Bottom Top',
  368. '4-Way Left Bottom Bottom Bottom',
  369. '4-Way Right Left Left Left',
  370. '4-Way Right Left Left Right',
  371. '4-Way Right Left Left Top',
  372. '4-Way Right Left Left Bottom',
  373. '4-Way Right Left Right Left',
  374. '4-Way Right Left Right Right',
  375. '4-Way Right Left Right Top',
  376. '4-Way Right Left Right Bottom',
  377. '4-Way Right Left Top Left',
  378. '4-Way Right Left Top Right',
  379. '4-Way Right Left Top Top',
  380. '4-Way Right Left Top Bottom',
  381. '4-Way Right Left Bottom Left',
  382. '4-Way Right Left Bottom Right',
  383. '4-Way Right Left Bottom Top',
  384. '4-Way Right Left Bottom Bottom',
  385. '4-Way Right Right Left Left',
  386. '4-Way Right Right Left Right',
  387. '4-Way Right Right Left Top',
  388. '4-Way Right Right Left Bottom',
  389. '4-Way Right Right Right Left',
  390. '4-Way Right Right Right Right',
  391. '4-Way Right Right Right Top',
  392. '4-Way Right Right Right Bottom',
  393. '4-Way Right Right Top Left',
  394. '4-Way Right Right Top Right',
  395. '4-Way Right Right Top Top',
  396. '4-Way Right Right Top Bottom',
  397. '4-Way Right Right Bottom Left',
  398. '4-Way Right Right Bottom Right',
  399. '4-Way Right Right Bottom Top',
  400. '4-Way Right Right Bottom Bottom',
  401. '4-Way Right Top Left Left',
  402. '4-Way Right Top Left Right',
  403. '4-Way Right Top Left Top',
  404. '4-Way Right Top Left Bottom',
  405. '4-Way Right Top Right Left',
  406. '4-Way Right Top Right Right',
  407. '4-Way Right Top Right Top',
  408. '4-Way Right Top Right Bottom',
  409. '4-Way Right Top Top Left',
  410. '4-Way Right Top Top Right',
  411. '4-Way Right Top Top Top',
  412. '4-Way Right Top Top Bottom',
  413. '4-Way Right Top Bottom Left',
  414. '4-Way Right Top Bottom Right',
  415. '4-Way Right Top Bottom Top',
  416. '4-Way Right Top Bottom Bottom',
  417. '4-Way Right Bottom Left Left',
  418. '4-Way Right Bottom Left Right',
  419. '4-Way Right Bottom Left Top',
  420. '4-Way Right Bottom Left Bottom',
  421. '4-Way Right Bottom Right Left',
  422. '4-Way Right Bottom Right Right',
  423. '4-Way Right Bottom Right Top',
  424. '4-Way Right Bottom Right Bottom',
  425. '4-Way Right Bottom Top Left',
  426. '4-Way Right Bottom Top Right',
  427. '4-Way Right Bottom Top Top',
  428. '4-Way Right Bottom Top Bottom',
  429. '4-Way Right Bottom Bottom Left',
  430. '4-Way Right Bottom Bottom Right',
  431. '4-Way Right Bottom Bottom Top',
  432. '4-Way Right Bottom Bottom Bottom',
  433. '4-Way Top Left Left Left',
  434. '4-Way Top Left Left Right',
  435. '4-Way Top Left Left Top',
  436. '4-Way Top Left Left Bottom',
  437. '4-Way Top Left Right Left',
  438. '4-Way Top Left Right Right',
  439. '4-Way Top Left Right Top',
  440. '4-Way Top Left Right Bottom',
  441. '4-Way Top Left Top Left',
  442. '4-Way Top Left Top Right',
  443. '4-Way Top Left Top Top',
  444. '4-Way Top Left Top Bottom',
  445. '4-Way Top Left Bottom Left',
  446. '4-Way Top Left Bottom Right',
  447. '4-Way Top Left Bottom Top',
  448. '4-Way Top Left Bottom Bottom',
  449. '4-Way Top Right Left Left',
  450. '4-Way Top Right Left Right',
  451. '4-Way Top Right Left Top',
  452. '4-Way Top Right Left Bottom',
  453. '4-Way Top Right Right Left',
  454. '4-Way Top Right Right Right',
  455. '4-Way Top Right Right Top',
  456. '4-Way Top Right Right Bottom',
  457. '4-Way Top Right Top Left',
  458. '4-Way Top Right Top Right',
  459. '4-Way Top Right Top Top',
  460. '4-Way Top Right Top Bottom',
  461. '4-Way Top Right Bottom Left',
  462. '4-Way Top Right Bottom Right',
  463. '4-Way Top Right Bottom Top',
  464. '4-Way Top Right Bottom Bottom',
  465. '4-Way Top Top Left Left',
  466. '4-Way Top Top Left Right',
  467. '4-Way Top Top Left Top',
  468. '4-Way Top Top Left Bottom',
  469. '4-Way Top Top Right Left',
  470. '4-Way Top Top Right Right',
  471. '4-Way Top Top Right Top',
  472. '4-Way Top Top Right Bottom',
  473. '4-Way Top Top Top Left',
  474. '4-Way Top Top Top Right',
  475. '4-Way Top Top Top Top',
  476. '4-Way Top Top Top Bottom',
  477. '4-Way Top Top Bottom Left',
  478. '4-Way Top Top Bottom Right',
  479. '4-Way Top Top Bottom Top',
  480. '4-Way Top Top Bottom Bottom',
  481. '4-Way Top Bottom Left Left',
  482. '4-Way Top Bottom Left Right',
  483. '4-Way Top Bottom Left Top',
  484. '4-Way Top Bottom Left Bottom',
  485. '4-Way Top Bottom Right Left',
  486. '4-Way Top Bottom Right Right',
  487. '4-Way Top Bottom Right Top',
  488. '4-Way Top Bottom Right Bottom',
  489. '4-Way Top Bottom Top Left',
  490. '4-Way Top Bottom Top Right',
  491. '4-Way Top Bottom Top Top',
  492. '4-Way Top Bottom Top Bottom',
  493. '4-Way Top Bottom Bottom Left',
  494. '4-Way Top Bottom Bottom Right',
  495. '4-Way Top Bottom Bottom Top',
  496. '4-Way Top Bottom Bottom Bottom',
  497. '4-Way Bottom Left Left Left',
  498. '4-Way Bottom Left Left Right',
  499. '4-Way Bottom Left Left Top',
  500. '4-Way Bottom Left Left Bottom',
  501. '4-Way Bottom Left Right Left',
  502. '4-Way Bottom Left Right Right',
  503. '4-Way Bottom Left Right Top',
  504. '4-Way Bottom Left Right Bottom',
  505. '4-Way Bottom Left Top Left',
  506. '4-Way Bottom Left Top Right',
  507. '4-Way Bottom Left Top Top',
  508. '4-Way Bottom Left Top Bottom',
  509. '4-Way Bottom Left Bottom Left',
  510. '4-Way Bottom Left Bottom Right',
  511. '4-Way Bottom Left Bottom Top',
  512. '4-Way Bottom Left Bottom Bottom',
  513. '4-Way Bottom Right Left Left',
  514. '4-Way Bottom Right Left Right',
  515. '4-Way Bottom Right Left Top',
  516. '4-Way Bottom Right Left Bottom',
  517. '4-Way Bottom Right Right Left',
  518. '4-Way Bottom Right Right Right',
  519. '4-Way Bottom Right Right Top',
  520. '4-Way Bottom Right Right Bottom',
  521. '4-Way Bottom Right Top Left',
  522. '4-Way Bottom Right Top Right',
  523. '4-Way Bottom Right Top Top',
  524. '4-Way Bottom Right Top Bottom',
  525. '4-Way Bottom Right Bottom Left',
  526. '4-Way Bottom Right Bottom Right',
  527. '4-Way Bottom Right Bottom Top',
  528. '4-Way Bottom Right Bottom Bottom',
  529. '4-Way Bottom Top Left Left',
  530. '4-Way Bottom Top Left Right',
  531. '4-Way Bottom Top Left Top',
  532. '4-Way Bottom Top Left Bottom',
  533. '4-Way Bottom Top Right Left',
  534. '4-Way Bottom Top Right Right',
  535. '4-Way Bottom Top Right Top',
  536. '4-Way Bottom Top Right Bottom',
  537. '4-Way Bottom Top Top Left',
  538. '4-Way Bottom Top Top Right',
  539. '4-Way Bottom Top Top Top',
  540. '4-Way Bottom Top Top Bottom',
  541. '4-Way Bottom Top Bottom Left',
  542. '4-Way Bottom Top Bottom Right',
  543. '4-Way Bottom Top Bottom Top',
  544. '4-Way Bottom Top Bottom Bottom',
  545. '4-Way Bottom Bottom Left Left',
  546. '4-Way Bottom Bottom Left Right',
  547. '4-Way Bottom Bottom Left Top',
  548. '4-Way Bottom Bottom Left Bottom',
  549. '4-Way Bottom Bottom Right Left',
  550. '4-Way Bottom Bottom Right Right',
  551. '4-Way Bottom Bottom Right Top',
  552. '4-Way Bottom Bottom Right Bottom',
  553. '4-Way Bottom Bottom Top Left',
  554. '4-Way Bottom Bottom Top Right',
  555. '4-Way Bottom Bottom Top Top',
  556. '4-Way Bottom Bottom Top Bottom',
  557. '4-Way Bottom Bottom Bottom Left',
  558. '4-Way Bottom Bottom Bottom Right',
  559. '4-Way Bottom Bottom Bottom Top',
  560. '4-Way Bottom Bottom Bottom Bottom',
  561. '4-Way Left-Top Left-Top Left-Top Left-Top',
  562. '4-Way Left-Top Left-Top Left-Top Left-Bottom',
  563. '4-Way Left-Top Left-Top Left-Top Right-Top',
  564. '4-Way Left-Top Left-Top Left-Top Right-Bottom',
  565. '4-Way Left-Top Left-Top Left-Bottom Left-Top',
  566. '4-Way Left-Top Left-Top Left-Bottom Left-Bottom',
  567. '4-Way Left-Top Left-Top Left-Bottom Right-Top',
  568. '4-Way Left-Top Left-Top Left-Bottom Right-Bottom',
  569. '4-Way Left-Top Left-Top Right-Top Left-Top',
  570. '4-Way Left-Top Left-Top Right-Top Left-Bottom',
  571. '4-Way Left-Top Left-Top Right-Top Right-Top',
  572. '4-Way Left-Top Left-Top Right-Top Right-Bottom',
  573. '4-Way Left-Top Left-Top Right-Bottom Left-Top',
  574. '4-Way Left-Top Left-Top Right-Bottom Left-Bottom',
  575. '4-Way Left-Top Left-Top Right-Bottom Right-Top',
  576. '4-Way Left-Top Left-Top Right-Bottom Right-Bottom',
  577. '4-Way Left-Top Left-Bottom Left-Top Left-Top',
  578. '4-Way Left-Top Left-Bottom Left-Top Left-Bottom',
  579. '4-Way Left-Top Left-Bottom Left-Top Right-Top',
  580. '4-Way Left-Top Left-Bottom Left-Top Right-Bottom',
  581. '4-Way Left-Top Left-Bottom Left-Bottom Left-Top',
  582. '4-Way Left-Top Left-Bottom Left-Bottom Left-Bottom',
  583. '4-Way Left-Top Left-Bottom Left-Bottom Right-Top',
  584. '4-Way Left-Top Left-Bottom Left-Bottom Right-Bottom',
  585. '4-Way Left-Top Left-Bottom Right-Top Left-Top',
  586. '4-Way Left-Top Left-Bottom Right-Top Left-Bottom',
  587. '4-Way Left-Top Left-Bottom Right-Top Right-Top',
  588. '4-Way Left-Top Left-Bottom Right-Top Right-Bottom',
  589. '4-Way Left-Top Left-Bottom Right-Bottom Left-Top',
  590. '4-Way Left-Top Left-Bottom Right-Bottom Left-Bottom',
  591. '4-Way Left-Top Left-Bottom Right-Bottom Right-Top',
  592. '4-Way Left-Top Left-Bottom Right-Bottom Right-Bottom',
  593. '4-Way Left-Top Right-Top Left-Top Left-Top',
  594. '4-Way Left-Top Right-Top Left-Top Left-Bottom',
  595. '4-Way Left-Top Right-Top Left-Top Right-Top',
  596. '4-Way Left-Top Right-Top Left-Top Right-Bottom',
  597. '4-Way Left-Top Right-Top Left-Bottom Left-Top',
  598. '4-Way Left-Top Right-Top Left-Bottom Left-Bottom',
  599. '4-Way Left-Top Right-Top Left-Bottom Right-Top',
  600. '4-Way Left-Top Right-Top Left-Bottom Right-Bottom',
  601. '4-Way Left-Top Right-Top Right-Top Left-Top',
  602. '4-Way Left-Top Right-Top Right-Top Left-Bottom',
  603. '4-Way Left-Top Right-Top Right-Top Right-Top',
  604. '4-Way Left-Top Right-Top Right-Top Right-Bottom',
  605. '4-Way Left-Top Right-Top Right-Bottom Left-Top',
  606. '4-Way Left-Top Right-Top Right-Bottom Left-Bottom',
  607. '4-Way Left-Top Right-Top Right-Bottom Right-Top',
  608. '4-Way Left-Top Right-Top Right-Bottom Right-Bottom',
  609. '4-Way Left-Top Right-Bottom Left-Top Left-Top',
  610. '4-Way Left-Top Right-Bottom Left-Top Left-Bottom',
  611. '4-Way Left-Top Right-Bottom Left-Top Right-Top',
  612. '4-Way Left-Top Right-Bottom Left-Top Right-Bottom',
  613. '4-Way Left-Top Right-Bottom Left-Bottom Left-Top',
  614. '4-Way Left-Top Right-Bottom Left-Bottom Left-Bottom',
  615. '4-Way Left-Top Right-Bottom Left-Bottom Right-Top',
  616. '4-Way Left-Top Right-Bottom Left-Bottom Right-Bottom',
  617. '4-Way Left-Top Right-Bottom Right-Top Left-Top',
  618. '4-Way Left-Top Right-Bottom Right-Top Left-Bottom',
  619. '4-Way Left-Top Right-Bottom Right-Top Right-Top',
  620. '4-Way Left-Top Right-Bottom Right-Top Right-Bottom',
  621. '4-Way Left-Top Right-Bottom Right-Bottom Left-Top',
  622. '4-Way Left-Top Right-Bottom Right-Bottom Left-Bottom',
  623. '4-Way Left-Top Right-Bottom Right-Bottom Right-Top',
  624. '4-Way Left-Top Right-Bottom Right-Bottom Right-Bottom',
  625. '4-Way Left-Bottom Left-Top Left-Top Left-Top',
  626. '4-Way Left-Bottom Left-Top Left-Top Left-Bottom',
  627. '4-Way Left-Bottom Left-Top Left-Top Right-Top',
  628. '4-Way Left-Bottom Left-Top Left-Top Right-Bottom',
  629. '4-Way Left-Bottom Left-Top Left-Bottom Left-Top',
  630. '4-Way Left-Bottom Left-Top Left-Bottom Left-Bottom',
  631. '4-Way Left-Bottom Left-Top Left-Bottom Right-Top',
  632. '4-Way Left-Bottom Left-Top Left-Bottom Right-Bottom',
  633. '4-Way Left-Bottom Left-Top Right-Top Left-Top',
  634. '4-Way Left-Bottom Left-Top Right-Top Left-Bottom',
  635. '4-Way Left-Bottom Left-Top Right-Top Right-Top',
  636. '4-Way Left-Bottom Left-Top Right-Top Right-Bottom',
  637. '4-Way Left-Bottom Left-Top Right-Bottom Left-Top',
  638. '4-Way Left-Bottom Left-Top Right-Bottom Left-Bottom',
  639. '4-Way Left-Bottom Left-Top Right-Bottom Right-Top',
  640. '4-Way Left-Bottom Left-Top Right-Bottom Right-Bottom',
  641. '4-Way Left-Bottom Left-Bottom Left-Top Left-Top',
  642. '4-Way Left-Bottom Left-Bottom Left-Top Left-Bottom',
  643. '4-Way Left-Bottom Left-Bottom Left-Top Right-Top',
  644. '4-Way Left-Bottom Left-Bottom Left-Top Right-Bottom',
  645. '4-Way Left-Bottom Left-Bottom Left-Bottom Left-Top',
  646. '4-Way Left-Bottom Left-Bottom Left-Bottom Left-Bottom',
  647. '4-Way Left-Bottom Left-Bottom Left-Bottom Right-Top',
  648. '4-Way Left-Bottom Left-Bottom Left-Bottom Right-Bottom',
  649. '4-Way Left-Bottom Left-Bottom Right-Top Left-Top',
  650. '4-Way Left-Bottom Left-Bottom Right-Top Left-Bottom',
  651. '4-Way Left-Bottom Left-Bottom Right-Top Right-Top',
  652. '4-Way Left-Bottom Left-Bottom Right-Top Right-Bottom',
  653. '4-Way Left-Bottom Left-Bottom Right-Bottom Left-Top',
  654. '4-Way Left-Bottom Left-Bottom Right-Bottom Left-Bottom',
  655. '4-Way Left-Bottom Left-Bottom Right-Bottom Right-Top',
  656. '4-Way Left-Bottom Left-Bottom Right-Bottom Right-Bottom',
  657. '4-Way Left-Bottom Right-Top Left-Top Left-Top',
  658. '4-Way Left-Bottom Right-Top Left-Top Left-Bottom',
  659. '4-Way Left-Bottom Right-Top Left-Top Right-Top',
  660. '4-Way Left-Bottom Right-Top Left-Top Right-Bottom',
  661. '4-Way Left-Bottom Right-Top Left-Bottom Left-Top',
  662. '4-Way Left-Bottom Right-Top Left-Bottom Left-Bottom',
  663. '4-Way Left-Bottom Right-Top Left-Bottom Right-Top',
  664. '4-Way Left-Bottom Right-Top Left-Bottom Right-Bottom',
  665. '4-Way Left-Bottom Right-Top Right-Top Left-Top',
  666. '4-Way Left-Bottom Right-Top Right-Top Left-Bottom',
  667. '4-Way Left-Bottom Right-Top Right-Top Right-Top',
  668. '4-Way Left-Bottom Right-Top Right-Top Right-Bottom',
  669. '4-Way Left-Bottom Right-Top Right-Bottom Left-Top',
  670. '4-Way Left-Bottom Right-Top Right-Bottom Left-Bottom',
  671. '4-Way Left-Bottom Right-Top Right-Bottom Right-Top',
  672. '4-Way Left-Bottom Right-Top Right-Bottom Right-Bottom',
  673. '4-Way Left-Bottom Right-Bottom Left-Top Left-Top',
  674. '4-Way Left-Bottom Right-Bottom Left-Top Left-Bottom',
  675. '4-Way Left-Bottom Right-Bottom Left-Top Right-Top',
  676. '4-Way Left-Bottom Right-Bottom Left-Top Right-Bottom',
  677. '4-Way Left-Bottom Right-Bottom Left-Bottom Left-Top',
  678. '4-Way Left-Bottom Right-Bottom Left-Bottom Left-Bottom',
  679. '4-Way Left-Bottom Right-Bottom Left-Bottom Right-Top',
  680. '4-Way Left-Bottom Right-Bottom Left-Bottom Right-Bottom',
  681. '4-Way Left-Bottom Right-Bottom Right-Top Left-Top',
  682. '4-Way Left-Bottom Right-Bottom Right-Top Left-Bottom',
  683. '4-Way Left-Bottom Right-Bottom Right-Top Right-Top',
  684. '4-Way Left-Bottom Right-Bottom Right-Top Right-Bottom',
  685. '4-Way Left-Bottom Right-Bottom Right-Bottom Left-Top',
  686. '4-Way Left-Bottom Right-Bottom Right-Bottom Left-Bottom',
  687. '4-Way Left-Bottom Right-Bottom Right-Bottom Right-Top',
  688. '4-Way Left-Bottom Right-Bottom Right-Bottom Right-Bottom',
  689. '4-Way Right-Top Left-Top Left-Top Left-Top',
  690. '4-Way Right-Top Left-Top Left-Top Left-Bottom',
  691. '4-Way Right-Top Left-Top Left-Top Right-Top',
  692. '4-Way Right-Top Left-Top Left-Top Right-Bottom',
  693. '4-Way Right-Top Left-Top Left-Bottom Left-Top',
  694. '4-Way Right-Top Left-Top Left-Bottom Left-Bottom',
  695. '4-Way Right-Top Left-Top Left-Bottom Right-Top',
  696. '4-Way Right-Top Left-Top Left-Bottom Right-Bottom',
  697. '4-Way Right-Top Left-Top Right-Top Left-Top',
  698. '4-Way Right-Top Left-Top Right-Top Left-Bottom',
  699. '4-Way Right-Top Left-Top Right-Top Right-Top',
  700. '4-Way Right-Top Left-Top Right-Top Right-Bottom',
  701. '4-Way Right-Top Left-Top Right-Bottom Left-Top',
  702. '4-Way Right-Top Left-Top Right-Bottom Left-Bottom',
  703. '4-Way Right-Top Left-Top Right-Bottom Right-Top',
  704. '4-Way Right-Top Left-Top Right-Bottom Right-Bottom',
  705. '4-Way Right-Top Left-Bottom Left-Top Left-Top',
  706. '4-Way Right-Top Left-Bottom Left-Top Left-Bottom',
  707. '4-Way Right-Top Left-Bottom Left-Top Right-Top',
  708. '4-Way Right-Top Left-Bottom Left-Top Right-Bottom',
  709. '4-Way Right-Top Left-Bottom Left-Bottom Left-Top',
  710. '4-Way Right-Top Left-Bottom Left-Bottom Left-Bottom',
  711. '4-Way Right-Top Left-Bottom Left-Bottom Right-Top',
  712. '4-Way Right-Top Left-Bottom Left-Bottom Right-Bottom',
  713. '4-Way Right-Top Left-Bottom Right-Top Left-Top',
  714. '4-Way Right-Top Left-Bottom Right-Top Left-Bottom',
  715. '4-Way Right-Top Left-Bottom Right-Top Right-Top',
  716. '4-Way Right-Top Left-Bottom Right-Top Right-Bottom',
  717. '4-Way Right-Top Left-Bottom Right-Bottom Left-Top',
  718. '4-Way Right-Top Left-Bottom Right-Bottom Left-Bottom',
  719. '4-Way Right-Top Left-Bottom Right-Bottom Right-Top',
  720. '4-Way Right-Top Left-Bottom Right-Bottom Right-Bottom',
  721. '4-Way Right-Top Right-Top Left-Top Left-Top',
  722. '4-Way Right-Top Right-Top Left-Top Left-Bottom',
  723. '4-Way Right-Top Right-Top Left-Top Right-Top',
  724. '4-Way Right-Top Right-Top Left-Top Right-Bottom',
  725. '4-Way Right-Top Right-Top Left-Bottom Left-Top',
  726. '4-Way Right-Top Right-Top Left-Bottom Left-Bottom',
  727. '4-Way Right-Top Right-Top Left-Bottom Right-Top',
  728. '4-Way Right-Top Right-Top Left-Bottom Right-Bottom',
  729. '4-Way Right-Top Right-Top Right-Top Left-Top',
  730. '4-Way Right-Top Right-Top Right-Top Left-Bottom',
  731. '4-Way Right-Top Right-Top Right-Top Right-Top',
  732. '4-Way Right-Top Right-Top Right-Top Right-Bottom',
  733. '4-Way Right-Top Right-Top Right-Bottom Left-Top',
  734. '4-Way Right-Top Right-Top Right-Bottom Left-Bottom',
  735. '4-Way Right-Top Right-Top Right-Bottom Right-Top',
  736. '4-Way Right-Top Right-Top Right-Bottom Right-Bottom',
  737. '4-Way Right-Top Right-Bottom Left-Top Left-Top',
  738. '4-Way Right-Top Right-Bottom Left-Top Left-Bottom',
  739. '4-Way Right-Top Right-Bottom Left-Top Right-Top',
  740. '4-Way Right-Top Right-Bottom Left-Top Right-Bottom',
  741. '4-Way Right-Top Right-Bottom Left-Bottom Left-Top',
  742. '4-Way Right-Top Right-Bottom Left-Bottom Left-Bottom',
  743. '4-Way Right-Top Right-Bottom Left-Bottom Right-Top',
  744. '4-Way Right-Top Right-Bottom Left-Bottom Right-Bottom',
  745. '4-Way Right-Top Right-Bottom Right-Top Left-Top',
  746. '4-Way Right-Top Right-Bottom Right-Top Left-Bottom',
  747. '4-Way Right-Top Right-Bottom Right-Top Right-Top',
  748. '4-Way Right-Top Right-Bottom Right-Top Right-Bottom',
  749. '4-Way Right-Top Right-Bottom Right-Bottom Left-Top',
  750. '4-Way Right-Top Right-Bottom Right-Bottom Left-Bottom',
  751. '4-Way Right-Top Right-Bottom Right-Bottom Right-Top',
  752. '4-Way Right-Top Right-Bottom Right-Bottom Right-Bottom',
  753. '4-Way Right-Bottom Left-Top Left-Top Left-Top',
  754. '4-Way Right-Bottom Left-Top Left-Top Left-Bottom',
  755. '4-Way Right-Bottom Left-Top Left-Top Right-Top',
  756. '4-Way Right-Bottom Left-Top Left-Top Right-Bottom',
  757. '4-Way Right-Bottom Left-Top Left-Bottom Left-Top',
  758. '4-Way Right-Bottom Left-Top Left-Bottom Left-Bottom',
  759. '4-Way Right-Bottom Left-Top Left-Bottom Right-Top',
  760. '4-Way Right-Bottom Left-Top Left-Bottom Right-Bottom',
  761. '4-Way Right-Bottom Left-Top Right-Top Left-Top',
  762. '4-Way Right-Bottom Left-Top Right-Top Left-Bottom',
  763. '4-Way Right-Bottom Left-Top Right-Top Right-Top',
  764. '4-Way Right-Bottom Left-Top Right-Top Right-Bottom',
  765. '4-Way Right-Bottom Left-Top Right-Bottom Left-Top',
  766. '4-Way Right-Bottom Left-Top Right-Bottom Left-Bottom',
  767. '4-Way Right-Bottom Left-Top Right-Bottom Right-Top',
  768. '4-Way Right-Bottom Left-Top Right-Bottom Right-Bottom',
  769. '4-Way Right-Bottom Left-Bottom Left-Top Left-Top',
  770. '4-Way Right-Bottom Left-Bottom Left-Top Left-Bottom',
  771. '4-Way Right-Bottom Left-Bottom Left-Top Right-Top',
  772. '4-Way Right-Bottom Left-Bottom Left-Top Right-Bottom',
  773. '4-Way Right-Bottom Left-Bottom Left-Bottom Left-Top',
  774. '4-Way Right-Bottom Left-Bottom Left-Bottom Left-Bottom',
  775. '4-Way Right-Bottom Left-Bottom Left-Bottom Right-Top',
  776. '4-Way Right-Bottom Left-Bottom Left-Bottom Right-Bottom',
  777. '4-Way Right-Bottom Left-Bottom Right-Top Left-Top',
  778. '4-Way Right-Bottom Left-Bottom Right-Top Left-Bottom',
  779. '4-Way Right-Bottom Left-Bottom Right-Top Right-Top',
  780. '4-Way Right-Bottom Left-Bottom Right-Top Right-Bottom',
  781. '4-Way Right-Bottom Left-Bottom Right-Bottom Left-Top',
  782. '4-Way Right-Bottom Left-Bottom Right-Bottom Left-Bottom',
  783. '4-Way Right-Bottom Left-Bottom Right-Bottom Right-Top',
  784. '4-Way Right-Bottom Left-Bottom Right-Bottom Right-Bottom',
  785. '4-Way Right-Bottom Right-Top Left-Top Left-Top',
  786. '4-Way Right-Bottom Right-Top Left-Top Left-Bottom',
  787. '4-Way Right-Bottom Right-Top Left-Top Right-Top',
  788. '4-Way Right-Bottom Right-Top Left-Top Right-Bottom',
  789. '4-Way Right-Bottom Right-Top Left-Bottom Left-Top',
  790. '4-Way Right-Bottom Right-Top Left-Bottom Left-Bottom',
  791. '4-Way Right-Bottom Right-Top Left-Bottom Right-Top',
  792. '4-Way Right-Bottom Right-Top Left-Bottom Right-Bottom',
  793. '4-Way Right-Bottom Right-Top Right-Top Left-Top',
  794. '4-Way Right-Bottom Right-Top Right-Top Left-Bottom',
  795. '4-Way Right-Bottom Right-Top Right-Top Right-Top',
  796. '4-Way Right-Bottom Right-Top Right-Top Right-Bottom',
  797. '4-Way Right-Bottom Right-Top Right-Bottom Left-Top',
  798. '4-Way Right-Bottom Right-Top Right-Bottom Left-Bottom',
  799. '4-Way Right-Bottom Right-Top Right-Bottom Right-Top',
  800. '4-Way Right-Bottom Right-Top Right-Bottom Right-Bottom',
  801. '4-Way Right-Bottom Right-Bottom Left-Top Left-Top',
  802. '4-Way Right-Bottom Right-Bottom Left-Top Left-Bottom',
  803. '4-Way Right-Bottom Right-Bottom Left-Top Right-Top',
  804. '4-Way Right-Bottom Right-Bottom Left-Top Right-Bottom',
  805. '4-Way Right-Bottom Right-Bottom Left-Bottom Left-Top',
  806. '4-Way Right-Bottom Right-Bottom Left-Bottom Left-Bottom',
  807. '4-Way Right-Bottom Right-Bottom Left-Bottom Right-Top',
  808. '4-Way Right-Bottom Right-Bottom Left-Bottom Right-Bottom',
  809. '4-Way Right-Bottom Right-Bottom Right-Top Left-Top',
  810. '4-Way Right-Bottom Right-Bottom Right-Top Left-Bottom',
  811. '4-Way Right-Bottom Right-Bottom Right-Top Right-Top',
  812. '4-Way Right-Bottom Right-Bottom Right-Top Right-Bottom',
  813. '4-Way Right-Bottom Right-Bottom Right-Bottom Left-Top',
  814. '4-Way Right-Bottom Right-Bottom Right-Bottom Left-Bottom',
  815. '4-Way Right-Bottom Right-Bottom Right-Bottom Right-Top',
  816. '4-Way Right-Bottom Right-Bottom Right-Bottom Right-Bottom'
  817.  );
  818.  
  819. var
  820.   MainForm: TMainForm;
  821.   bCancel: bool;
  822.   PaintPaletteVal:   integer;
  823.   PaintDitherVal:    integer;
  824.   BitonalScalingVal: integer;
  825.  
  826. implementation
  827.  
  828. {$R *.DFM}
  829.  
  830. uses ChildWin;
  831.  
  832. function GetListIndex(DialogTitle, LabelTitle: string;
  833.       StringArray: TStringArray; var nIndex: integer): boolean; forward;
  834.  
  835. function GetPaintEffect(var nIndex: integer): boolean; forward;
  836.  
  837. procedure TMainForm.FormCreate(Sender: TObject);
  838. var
  839.   bVal : boolean;
  840. begin
  841.   Application.OnHint := ShowHint;
  842.   Screen.OnActiveFormChange := UpdateMenuItems;
  843.  
  844.    bCancel := false;
  845.    HiddenLead.Visible := false;
  846.  
  847.    { Unlock the express features and the LZW file support.
  848.      Make sure you put the correct keys in LEADDEF.PAS  }
  849.    HiddenLead.UnlockSupport(L_SUPPORT_EXPRESS, L_KEY_EXPRESS);
  850.    HiddenLead.UnlockSupport(L_SUPPORT_GIFLZW, L_KEY_GIFLZW);
  851.    HiddenLead.UnlockSupport(L_SUPPORT_TIFLZW, L_KEY_TIFLZW);
  852.    HiddenLead.UnlockSupport(L_SUPPORT_MEDICAL, L_KEY_MEDICAL);
  853.  
  854.    BinaryFilter1.Enabled := HiddenLead.IsSupportLocked(L_SUPPORT_EXPRESS) <> true;
  855.    Deskew1.Enabled := BinaryFilter1.Enabled;
  856.    Despeckle1.Enabled := BinaryFilter1.Enabled;
  857.    FavorBlack1.Enabled := BinaryFilter1.Enabled;
  858.    ScaleToGray1.Enabled := BinaryFilter1.Enabled;
  859.  
  860.    if(LTIsis.IsISISAvailable = True) then
  861.       bVal:=True;
  862.    ISISSelect1.Enabled := bVal;
  863.    ISISAcquire1.Enabled := bVal;
  864.    ISISAcquireMulti1.Enabled := bVal;
  865.  
  866.  
  867.    { set the Preferences defaults }
  868.    PaintPaletteVal := PAINTPALETTE_AUTO;
  869.    Auto1.Checked := true;
  870.    PaintDitherVal := PAINTDITHER_ORDERED;
  871.    Ordered1.Checked := true;
  872.    BitonalScalingVal := BITONALSCALING_NORMAL;
  873.    BitonalNormal1.Checked := true;
  874. end;
  875.  
  876. procedure TMainForm.ShowHint(Sender: TObject);
  877. begin
  878.   StatusBar.SimpleText := Application.Hint;
  879. end;
  880.  
  881. procedure TMainForm.CreateMDIChild(const Name: string);
  882. var
  883.   Child: TMDIChild;
  884. begin
  885.   { create a new MDI child window }
  886.   Screen.Cursor := crHourglass;
  887.   Child := TMDIChild.Create(Application);
  888.   Child.Caption := Name;
  889.   if Child.LoadImage( Name ) <> true then
  890.      Child.Close;
  891.   Screen.Cursor := crDefault;
  892. end;
  893.  
  894. procedure TMainForm.FileOpenItemClick(Sender: TObject);
  895.   var bVal : boolean;
  896. begin
  897.    bVal := TRUE;
  898.    try
  899.       OpenDialog.Filter := szLoadFilter;
  900.       OpenDialog.FileDlgFlags := 0;
  901.       OpenDialog.DialogTitle := 'Open A File';
  902.       OpenDialog.UIFlags := DLG_FO_95STYLE + DLG_FO_FILEINFO + DLG_FO_SHOWSTAMP + DLG_FO_SHOWPREVIEW;
  903.       OpenDialog.FileOpen(handle);
  904.    except
  905.       bVal := FALSE;
  906.    end;
  907.    if (bVal = TRUE) then
  908.       CreateMDIChild(OpenDialog.FileName);
  909. end;
  910.  
  911. function TMainForm.CheckError(E: EOleError):boolean;
  912. begin
  913.    MessageDlg('Ignoring exception: ' + E.Message, mtInformation, [mbOK], 0);
  914.    CheckError := False;
  915. end;
  916.  
  917. procedure TMainForm.FileCloseItemClick(Sender: TObject);
  918. begin
  919.   if ActiveMDIChild <> nil then
  920.     ActiveMDIChild.Close;
  921. end;
  922.  
  923. procedure TMainForm.FileSaveAsItemClick(Sender: TObject);
  924. begin
  925.   { save current file under new name }
  926.   if( ActiveMDIChild <> nil ) then
  927.     TMDIChild(ActiveMDIChild).SaveImage;
  928. end;
  929.  
  930. procedure TMainForm.FileExitItemClick(Sender: TObject);
  931. begin
  932.   Close;
  933. end;
  934.  
  935. procedure TMainForm.CutItemClick(Sender: TObject);
  936. begin
  937.   {cut selection to clipboard}
  938.   CopyItemClick(Sender);
  939.   if ActiveMDIChild <> nil then
  940.      ActiveMDIChild.Close;
  941. end;
  942.  
  943. procedure TMainForm.CopyItemClick(Sender: TObject);
  944. begin
  945.   Screen.Cursor := crHourglass;
  946.   if TMDIChild(ActiveMDIChild).LeadCtrl1.Copy(COPY_EMPTY + COPY_DIB + COPY_PALETTE) <> 0 then
  947.      MessageDlg('Error copying to clipboard', mtError,[mbOk], 0);
  948.   Screen.Cursor := crDefault;
  949.   UpdateMenuItems(Sender);
  950. end;
  951.  
  952. procedure TMainForm.PasteItemClick(Sender: TObject);
  953. var
  954.   Child: TMDIChild;
  955.   nret: smallint;
  956. begin
  957.   { create a new MDI child window }
  958.   Screen.Cursor := crHourglass;
  959.   if HiddenLead.Paste(PASTE_ISREADY) <> 0 then
  960.   begin
  961.     Child := TMDIChild.Create(Application);
  962.     Child.Caption := 'Clipboard image';
  963.     if Child.LeadCtrl1.Paste(0) <> 0 then
  964.        Child.Close
  965.     else
  966.        Child.FormResize(Sender);
  967.   end;
  968.   Screen.Cursor := crDefault;
  969. end;
  970.  
  971. procedure TMainForm.WindowCascadeItemClick(Sender: TObject);
  972. begin
  973.   Cascade;
  974. end;
  975.  
  976. procedure TMainForm.WindowTileItemClick(Sender: TObject);
  977. begin
  978.   Tile;
  979. end;
  980.  
  981. procedure TMainForm.WindowArrangeItemClick(Sender: TObject);
  982. begin
  983.   ArrangeIcons;
  984. end;
  985.  
  986. procedure TMainForm.WindowMinimizeItemClick(Sender: TObject);
  987. var
  988.   I: Integer;
  989. begin
  990.   { Must be done backwards through the MDIChildren array }
  991.   for I := MDIChildCount - 1 downto 0 do
  992.     MDIChildren[I].WindowState := wsMinimized;
  993. end;
  994.  
  995. procedure TMainForm.UpdateMenuItems(Sender: TObject);
  996. begin
  997.   FileCloseItem.Enabled := MDIChildCount > 0;
  998.   FileSaveAsItem.Enabled := MDIChildCount > 0;
  999.   CopyItem.Enabled := MDIChildCount > 0;
  1000.   CutItem.Enabled := MDIChildCount > 0;
  1001.   PasteItem.Enabled := HiddenLead.Paste(PASTE_ISREADY) <> 0;
  1002.   PasteBtn.Enabled := PasteItem.Enabled;
  1003.   SaveBtn.Enabled := MDIChildCount > 0;
  1004.   CopyBtn.Enabled := MDIChildCount > 0;
  1005.   CutBtn.Enabled := MDIChildCount > 0;
  1006.   WindowCascadeItem.Enabled := MDIChildCount > 0;
  1007.   WindowTileItem.Enabled := MDIChildCount > 0;
  1008.   WindowArrangeItem.Enabled := MDIChildCount > 0;
  1009.   WindowMinimizeItem.Enabled := MDIChildCount > 0;
  1010.   Print.Enabled := MDIChildCount > 0;
  1011.   View1.Enabled := MDIChildCount > 0;
  1012.   Image1.Enabled := MDIChildCount > 0;
  1013.   Color1.Enabled := MDIChildCount > 0;
  1014.   Print.Enabled := MDIChildCount > 0;
  1015.   if MDIChildCount > 0 then
  1016.   begin
  1017.       TMDIChild(ActiveMDIChild).CheckZoomFactor;
  1018.       Effects1.Checked := TMDIChild(ActiveMDIChild).LeadCtrl1.PaintEffect > EFX_EFFECT_NONE;
  1019.   end
  1020.   else
  1021.       View1.Enabled := false;
  1022. end;
  1023.  
  1024. procedure TMainForm.FormDestroy(Sender: TObject);
  1025. begin
  1026.   Screen.OnActiveFormChange := nil;
  1027. end;
  1028.  
  1029. procedure TMainForm.CloseAllClick(Sender: TObject);
  1030.    var i: integer;
  1031. begin
  1032.    for i := MDIChildCount - 1 downto 0 do
  1033.       MDIChildren[i].Close
  1034. end;
  1035.  
  1036. procedure TMainForm.PrintClick(Sender: TObject);
  1037. {This image simply gets a printer hDC, and prints the image}
  1038. {You can do scaling if you wish, and take the printer's dpi}
  1039. {into consideration by changing the Width and Height params.}
  1040. var
  1041.    nRet : integer;
  1042. begin
  1043.      PrinterSetupDialog1.Execute;
  1044.      Screen.Cursor:=crHourGlass;
  1045.      Printer.BeginDoc;
  1046.      TMDIChild(ActiveMDIChild).InitStatusProcess;
  1047.      nRet:=TMDIChild(ActiveMDIChild).LeadCtrl1.Render( Printer.Handle, 0, 0, TMDIChild(ActiveMDIChild).LeadCtrl1.BitmapWidth, TMDIChild(ActiveMDIChild).LeadCtrl1.BitmapHeight );
  1048.      Printer.EndDoc;
  1049.      TMDIChild(ActiveMDIChild).ResetStatusProcess;
  1050.      Screen.Cursor:=crDefault;
  1051. end;
  1052.  
  1053. procedure TMainForm.TwainSelect1Click(Sender: TObject);
  1054. begin
  1055.    try
  1056.       HiddenLead.TwainSelect( WindowHandle );
  1057.    except
  1058.    end;
  1059. end;
  1060.  
  1061. procedure TMainForm.TwainAcquire1Click(Sender: TObject);
  1062. var
  1063.   Child: TMDIChild;
  1064.   nret: smallint;
  1065. begin
  1066.   { create a new MDI child window }
  1067.   Screen.Cursor := crHourglass;
  1068.   Child := TMDIChild.Create(Application);
  1069.   Child.Caption := 'Twain Acquired Image';
  1070.   try
  1071.      nret := Child.LeadCtrl1.TwainAcquire(WindowHandle);
  1072.   except
  1073.      nret := ERROR_FAILURE;
  1074.   end;
  1075.   if nret <> 0 then
  1076.      Child.Close
  1077.   else
  1078.   begin
  1079.      Child.FormResize(Sender);
  1080.   end;
  1081.   Screen.Cursor := crDefault;
  1082. end;
  1083.  
  1084. procedure TMainForm.TwainAcquireExtended1Click(Sender: TObject);
  1085. {This procedure demonstrates the advanced Twain methods
  1086.  of LEADTOOLS OCX.  I use a dialog box to get
  1087.  the desired scan settings, and then set those using
  1088.  the OCX methods.  Finally, the image is acquired by
  1089.  calling TwainAcquire.  Note the user interface is
  1090.  not shown, but the status bar is.}
  1091. var
  1092.    nRet, nVal, code: integer;
  1093.    Child: TMDIChild;
  1094. begin
  1095.      TwainDlg.ShowModal;
  1096.      if (TwainDlg.ModalResult = mrOK) then
  1097.      begin
  1098.          Screen.Cursor := crHourglass;
  1099.          Child := TMDIChild.Create(Application);
  1100.          Child.Caption := 'Twain Acquired Image';
  1101.  
  1102.           Child.LeadCtrl1.TwainAppAuthor := 'LEAD Technologies';
  1103.           Child.LeadCtrl1.TwainAppFamily := 'LEAD';
  1104.           Child.LeadCtrl1.TwainAppName := 'LEAD Delphi Demo';
  1105.           Child.LeadCtrl1.TwainSourceName := '';
  1106.           Child.LeadCtrl1.TwainMaxPages:=1;
  1107.           case TwainDlg.PixelType.ItemIndex of
  1108.             0:  Child.LeadCtrl1.TwainPixelType:=TWAIN_PIX_HALF;
  1109.             1:  Child.LeadCtrl1.TwainPixelType:=TWAIN_PIX_PALETTE;
  1110.             2:  Child.LeadCtrl1.TwainPixelType:=TWAIN_PIX_GRAY;
  1111.             3:  Child.LeadCtrl1.TwainPixelType:=TWAIN_PIX_RGB;
  1112.           end;
  1113.  
  1114.           case TwainDlg.Bits.ItemIndex of
  1115.             0:  Child.LeadCtrl1.TwainBits:=1;
  1116.             1:  Child.LeadCtrl1.TwainBits:=4;
  1117.             2:  Child.LeadCtrl1.TwainBits:=8;
  1118.           end;
  1119.  
  1120.           Val(TwainDlg.DPI.Text, nVal, code);
  1121.           if (code = 0) then
  1122.                Child.LeadCtrl1.TwainRes:=nVal
  1123.           else Child.LeadCtrl1.TwainRes:=-1;
  1124.  
  1125.           Val(TwainDlg.SXPos.Text, nVal, code);
  1126.           if (code = 0) then
  1127.                Child.LeadCtrl1.TwainFrameLeft:=nVal
  1128.           else Child.LeadCtrl1.TwainFrameLeft:=-1;
  1129.  
  1130.           Val(TwainDlg.SYPos.Text, nVal, code);
  1131.           if (code = 0) then
  1132.                Child.LeadCtrl1.TwainFrameTop:=nVal
  1133.           else Child.LeadCtrl1.TwainFrameTop:=-1;
  1134.  
  1135.           Val(TwainDlg.SWidth.Text, nVal, code);
  1136.           if (code = 0) then
  1137.                Child.LeadCtrl1.TwainFrameWidth:=nVal
  1138.           else Child.LeadCtrl1.TwainFrameWidth:=-1;
  1139.  
  1140.           Val(TwainDlg.SHeight.Text, nVal, code);
  1141.           if (code = 0) then
  1142.                Child.LeadCtrl1.TwainFrameHeight:=nVal
  1143.           else Child.LeadCtrl1.TwainFrameHeight:=-1;
  1144.  
  1145.          try
  1146.             nret := Child.LeadCtrl1.TwainAcquire(WindowHandle);
  1147.          except
  1148.             nret := ERROR_FAILURE;
  1149.          end;
  1150.          if nret <> 0 then
  1151.          begin
  1152.             MessageDlg('Error Acquiring Twain Image', mtError,[mbOk], 0);
  1153.             Child.Close
  1154.          end
  1155.          else
  1156.          begin
  1157.             Child.FormResize(Sender);
  1158.          end;
  1159.          Screen.Cursor := crDefault;
  1160.      end;
  1161. end;
  1162.  
  1163. procedure TMainForm.TwainAcquireCallback1Click(Sender: TObject);
  1164. var SavedSetting: wordbool;
  1165. begin
  1166.    Screen.Cursor := crHourglass;
  1167.    { Enable multipage scanning. The callback function is the one that
  1168.      handles the OnTwainPage Event for the LEAD OCX. }
  1169.    HiddenLead.EnableTwainEvent := True;
  1170.    { Acquire the images, allowing for possible mistakes. }
  1171.    SavedSetting := HiddenLead.EnableMethodErrors;
  1172.    HiddenLead.EnableMethodErrors := False;
  1173.    if HiddenLead.TwainAcquire(WindowHandle) <> 0 then
  1174.       MessageDlg( 'TWAIN device was not ready', mtError,[mbOk], 0);
  1175.    HiddenLead.EnableMethodErrors := SavedSetting;
  1176.    HiddenLead.EnableTwainEvent := False;
  1177.    Screen.Cursor := crDefault;
  1178. end;
  1179.  
  1180.  
  1181. procedure TMainForm.OnTwainPage(Sender: TObject);
  1182. var Child: TMDIChild;
  1183. begin
  1184.   { create a new MDI child window }
  1185.   Child := TMDIChild.Create(Application);
  1186.   Child.Caption := 'Twain Acquired Image';
  1187.   Child.LeadCtrl1.Bitmap := HiddenLead.Bitmap;
  1188.   Child.FormResize(Sender);
  1189. end;
  1190.  
  1191. procedure TMainForm.ImageInfo1Click(Sender: TObject);
  1192. {Similar to load.  This procedure uses common dialog}
  1193. {to get the filename, and then returns information}
  1194. {about that image.}
  1195. var
  1196.    nRet : integer;
  1197.    S : String;
  1198. begin
  1199.      OpenDialog.Filter := szLoadFilter;
  1200.      begin
  1201.           Screen.Cursor:=crHourGlass;
  1202.           nRet:=HiddenLead.GetFileInfo(OpenDialog.Filename, 0);
  1203.           Screen.Cursor:=crDefault;
  1204.      end;
  1205.      if (nRet <> 0) then
  1206.         MessageDlg('Error Getting Info', mtError,[mbOk], 0)
  1207.      else
  1208.      Begin
  1209.           InfoBox.FName.Caption:=OpenDialog.Filename;
  1210.           Str(Ord(HiddenLead.InfoFormat), S);
  1211.           InfoBox.FFormat.Caption:=S;
  1212.           Str(HiddenLead.InfoWidth:1:0, S);
  1213.           InfoBox.FWidth.Caption:=S;
  1214.           Str(HiddenLead.InfoHeight:1:0, S);
  1215.           InfoBox.FHeight.Caption:=S;
  1216.           Str(HiddenLead.InfoBits, S);
  1217.           InfoBox.FBits.Caption:=S;
  1218.           Str(HiddenLead.InfoSizeDisk, S);
  1219.           InfoBox.FDisk.Caption:=S;
  1220.           Str(HiddenLead.InfoSizeMem, S);
  1221.           InfoBox.FMem.Caption:=S;
  1222.           InfoBox.FComp.Caption:=HiddenLead.InfoCompress;
  1223.           InfoBox.ShowModal;
  1224.      end;
  1225. end;
  1226.  
  1227. procedure TMainForm.OnActivate(Sender: TObject);
  1228. begin
  1229.    UpdateMenuItems(Sender);
  1230. end;
  1231.  
  1232. procedure TMainForm.StatusBarItemClick(Sender: TObject);
  1233. begin
  1234.    if StatusBarItem.Checked = false then
  1235.       StatusBarItem.Checked := true
  1236.    else
  1237.       StatusBarItem.Checked := false;
  1238. end;
  1239.  
  1240. procedure TMainForm.Normal1Click(Sender: TObject);
  1241. begin
  1242.    TMDIChild(ActiveMDIChild).nZoomFactor := 100;
  1243.    TMDIChild(ActiveMDIChild).CheckZoomFactor;
  1244.    TMDIChild(ActiveMDIChild).ZoomImage;
  1245. end;
  1246.  
  1247.  
  1248. procedure TMainForm.zoom25Click(Sender: TObject);
  1249. begin
  1250.    TMDIChild(ActiveMDIChild).nZoomFactor := 25;
  1251.    TMDIChild(ActiveMDIChild).CheckZoomFactor;
  1252.    TMDIChild(ActiveMDIChild).ZoomImage;
  1253. end;
  1254.  
  1255. procedure TMainForm.zoom33Click(Sender: TObject);
  1256. begin
  1257.    TMDIChild(ActiveMDIChild).nZoomFactor := 33;
  1258.    TMDIChild(ActiveMDIChild).CheckZoomFactor;
  1259.    TMDIChild(ActiveMDIChild).ZoomImage;
  1260. end;
  1261.  
  1262. procedure TMainForm.zoom50Click(Sender: TObject);
  1263. begin
  1264.    TMDIChild(ActiveMDIChild).nZoomFactor := 50;
  1265.    TMDIChild(ActiveMDIChild).CheckZoomFactor;
  1266.    TMDIChild(ActiveMDIChild).ZoomImage;
  1267. end;
  1268.  
  1269. procedure TMainForm.zoom200Click(Sender: TObject);
  1270. begin
  1271.    TMDIChild(ActiveMDIChild).nZoomFactor := 200;
  1272.    TMDIChild(ActiveMDIChild).CheckZoomFactor;
  1273.    TMDIChild(ActiveMDIChild).ZoomImage;
  1274. end;
  1275.  
  1276. procedure TMainForm.zoom300Click(Sender: TObject);
  1277. begin
  1278.    TMDIChild(ActiveMDIChild).nZoomFactor := 300;
  1279.    TMDIChild(ActiveMDIChild).CheckZoomFactor;
  1280.    TMDIChild(ActiveMDIChild).ZoomImage;
  1281. end;
  1282.  
  1283. procedure TMainForm.zoom400Click(Sender: TObject);
  1284. begin
  1285.    TMDIChild(ActiveMDIChild).nZoomFactor := 400;
  1286.    TMDIChild(ActiveMDIChild).CheckZoomFactor;
  1287.    TMDIChild(ActiveMDIChild).ZoomImage;
  1288. end;
  1289.  
  1290. procedure TMainForm.Effects1Click(Sender: TObject);
  1291. var
  1292.    instring : string;
  1293.    nRet, code, nVal : integer;
  1294. Begin
  1295.      if (Effects1.Checked = True) then
  1296.      begin
  1297.          Effects1.Checked:= False;
  1298.          TMDIChild(ActiveMDIChild).LeadCtrl1.PaintEffect := 0;
  1299.      end
  1300.      else
  1301.      begin
  1302.          if( GetPaintEffect(nVal) = false ) then
  1303.            exit;
  1304.  
  1305.          Effects1.Checked:= True;
  1306.             TMDIChild(ActiveMDIChild).LeadCtrl1.PaintEffect := nVal+EFX_EFFECT_WIPE_CLASS;
  1307.      end;
  1308. end;
  1309.  
  1310.  
  1311. procedure TMainForm.Flip1Click(Sender: TObject);
  1312. begin
  1313.      Screen.Cursor:=crHourGlass;
  1314.      TMDIChild(ActiveMDIChild).InitStatusProcess;
  1315.      TMDIChild(ActiveMDIChild).LeadCtrl1.Flip;          {flip the image}
  1316.      TMDIChild(ActiveMDIChild).ResetStatusProcess;
  1317.      Screen.Cursor:=crDefault;
  1318. end;
  1319.  
  1320. procedure TMainForm.Reverse1Click(Sender: TObject);
  1321. begin
  1322.      Screen.Cursor:=crHourGlass;
  1323.      TMDIChild(ActiveMDIChild).InitStatusProcess;
  1324.      TMDIChild(ActiveMDIChild).LeadCtrl1.Reverse;          {reverse the image}
  1325.      TMDIChild(ActiveMDIChild).ResetStatusProcess;
  1326.      Screen.Cursor:=crDefault;
  1327. end;
  1328.  
  1329. procedure TMainForm.Rotate1Click(Sender: TObject);
  1330. {This procedure rotates an image the specified # of degrees}
  1331. var
  1332.    instring : string;
  1333.    nRet, nVal : integer;
  1334.    bVal : boolean;
  1335. begin
  1336.     bVal := TRUE;
  1337.     try
  1338.        LTDlgOCXCtl1.BackColor := 0;
  1339.        LTDlgOCXCtl1.Bitmap := TMDIChild(ActiveMDIChild).LeadCtrl1.Bitmap;
  1340.        LTDlgOCXCtl1.UIFlags := DLG_IMG_ROTATE + DLG_IMG_SHOWPREVIEW;
  1341.        LTDlgOCXCtl1.GetAngle (handle);
  1342.        LTDlgOCXCtl1.Bitmap := 0;
  1343.        nVal := LTDlgOCXCtl1.Angle;
  1344.     except
  1345.        bVal := FALSE;
  1346.     end;
  1347.     if(bVal = TRUE) then
  1348.     begin
  1349.          if(LTDlgOCXCtl1.AngleFlag = false) then bVal := FALSE;
  1350.          Screen.Cursor:=crHourGlass;
  1351.          TMDIChild(ActiveMDIChild).InitStatusProcess;
  1352.          TMDIChild(ActiveMDIChild).LeadCtrl1.Rotate( nVal, bVal, LTDlgOCXCtl1.BackColor);          {rotate the image}
  1353.          TMDIChild(ActiveMDIChild).ResetStatusProcess;
  1354.          Screen.Cursor:=crDefault;
  1355.     end
  1356. end;
  1357.  
  1358. procedure TMainForm.Shear1Click(Sender: TObject);
  1359. {This procedure shears an image the specified # of degrees}
  1360. var
  1361.    nRet, nVal : integer;
  1362.    bVal : boolean;
  1363. begin
  1364.     bVal := TRUE;
  1365.     try
  1366.        LTDlgOCXCtl1.BackColor := 0;
  1367.        LTDlgOCXCtl1.Bitmap := TMDIChild(ActiveMDIChild).LeadCtrl1.Bitmap;
  1368.        LTDlgOCXCtl1.UIFlags := DLG_IMG_SHEAR + DLG_IMG_SHOWPREVIEW;
  1369.        LTDlgOCXCtl1.GetAngle (handle);
  1370.        LTDlgOCXCtl1.Bitmap := 0;
  1371.        nVal := LTDlgOCXCtl1.Angle;
  1372.     except
  1373.        bVal := FALSE;
  1374.     end;
  1375.     if(bVal = TRUE) then
  1376.     begin
  1377.          if(LTDlgOCXCtl1.AngleFlag = false) then bVal := FALSE;
  1378.          Screen.Cursor:=crHourGlass;
  1379.          TMDIChild(ActiveMDIChild).InitStatusProcess;
  1380.          TMDIChild(ActiveMDIChild).LeadCtrl1.Shear( nVal, bVal, LTDlgOCXCtl1.BackColor);          {rotate the image}
  1381.          TMDIChild(ActiveMDIChild).ResetStatusProcess;
  1382.          Screen.Cursor:=crDefault;
  1383.     end
  1384. end;
  1385.  
  1386. procedure TMainForm.Deskew1Click(Sender: TObject);
  1387. begin
  1388.      Screen.Cursor:=crHourGlass;
  1389.      TMDIChild(ActiveMDIChild).InitStatusProcess;
  1390.      TMDIChild(ActiveMDIChild).LeadCtrl1.Deskew;          {deskew the image}
  1391.      TMDIChild(ActiveMDIChild).ResetStatusProcess;
  1392.      Screen.Cursor:=crDefault;
  1393. end;
  1394.  
  1395. procedure TMainForm.Despeckle1Click(Sender: TObject);
  1396. begin
  1397.      Screen.Cursor:=crHourGlass;
  1398.      TMDIChild(ActiveMDIChild).InitStatusProcess;
  1399.      TMDIChild(ActiveMDIChild).LeadCtrl1.Despeckle;          {despeckle the image}
  1400.      TMDIChild(ActiveMDIChild).ResetStatusProcess;
  1401.      Screen.Cursor:=crDefault;
  1402. end;
  1403.  
  1404. procedure TMainForm.Resize1Click(Sender: TObject);
  1405. {This procedure resizes the image}
  1406. var
  1407.    instring : string;
  1408.    nWidth, nHeight : integer;
  1409.    fWidth, fHeight : single;
  1410.    bVal : boolean;
  1411. begin
  1412.     bVal := TRUE;
  1413.     try
  1414.        LTDlgOCXCtl1.BackColor := 0;
  1415.        fWidth := TMDIChild(ActiveMDIChild).LeadCtrl1.BitmapWidth;
  1416.        fHeight := TMDIChild(ActiveMDIChild).LeadCtrl1.BitmapHeight;
  1417.        LTDlgOCXCtl1.NewWidth := Round(fWidth);
  1418.        LTDlgOCXCtl1.NewHeight := Round(fHeight);
  1419.        LTDlgOCXCtl1.UIFlags := DLG_IMG_RESIZE;
  1420.        LTDlgOCXCtl1.GetSize (handle);
  1421.        nWidth := LTDlgOCXCtl1.NewWidth;
  1422.        nHeight := LTDlgOCXCtl1.NewHeight;
  1423.     except
  1424.        bVal := FALSE;
  1425.     end;
  1426.     if(bVal = TRUE) then
  1427.       begin
  1428.         Screen.Cursor:=crHourGlass;
  1429.         TMDIChild(ActiveMDIChild).InitStatusProcess;
  1430.         TMDIChild(ActiveMDIChild).LeadCtrl1.Size(nWidth, nHeight, RESIZE_NORMAL);          {resize the image}
  1431.         TMDIChild(ActiveMDIChild).ResetStatusProcess;
  1432.         TMDIChild(ActiveMDIChild).ZoomImage; { preserve the zoom factor }
  1433.         Screen.Cursor:=crDefault;
  1434.       end
  1435. end;
  1436.  
  1437. procedure TMainForm.Resample1Click(Sender: TObject);
  1438. {This procedure resizes the image}
  1439. var
  1440.    instring : string;
  1441.    nWidth, nHeight : integer;
  1442.    fWidth, fHeight : single;
  1443.    bVal : boolean;
  1444. begin
  1445.     bVal := TRUE;
  1446.     try
  1447.        LTDlgOCXCtl1.BackColor := 0;
  1448.        fWidth := TMDIChild(ActiveMDIChild).LeadCtrl1.BitmapWidth;
  1449.        fHeight := TMDIChild(ActiveMDIChild).LeadCtrl1.BitmapHeight;
  1450.        LTDlgOCXCtl1.NewWidth := Round(fWidth);
  1451.        LTDlgOCXCtl1.NewHeight := Round(fHeight);
  1452.        LTDlgOCXCtl1.UIFlags := DLG_IMG_RESAMPLE;
  1453.        LTDlgOCXCtl1.GetSize (handle);
  1454.        nWidth := LTDlgOCXCtl1.NewWidth;
  1455.        nHeight := LTDlgOCXCtl1.NewHeight;
  1456.     except
  1457.        bVal := FALSE;
  1458.     end;
  1459.     if(bVal = TRUE) then
  1460.       begin
  1461.         Screen.Cursor:=crHourGlass;
  1462.         TMDIChild(ActiveMDIChild).InitStatusProcess;
  1463.         TMDIChild(ActiveMDIChild).LeadCtrl1.Size(nWidth, nHeight, RESIZE_RESAMPLE);          {resample the image}
  1464.         TMDIChild(ActiveMDIChild).ResetStatusProcess;
  1465.         TMDIChild(ActiveMDIChild).ZoomImage; { preserve the zoom factor }
  1466.         Screen.Cursor:=crDefault;
  1467.       end
  1468. end;
  1469.  
  1470. procedure TMainForm.Halftone1Click(Sender: TObject);
  1471. var
  1472.    bVal : boolean;
  1473. begin
  1474.    bVal := TRUE;
  1475.    try
  1476.       {assign the bitmap for preview}
  1477.       LTDlgOCXCtl1.Bitmap := TMDIChild(ActiveMDIChild).LeadCtrl1.Bitmap;
  1478.       LTDlgOCXCtl1.Change := 0;
  1479.       LTDlgOCXCtl1.UIFlags := DLG_IMG_HALFTONE + DLG_IMG_SHOWPREVIEW;
  1480.       LTDlgOCXCtl1.GetChange (handle);
  1481.       {release the reference}
  1482.       LTDlgOCXCtl1.Bitmap := 0;
  1483.    except
  1484.       bVal := FALSE;
  1485.    end;
  1486.    if(bVal = TRUE) then
  1487.    begin
  1488.      Screen.Cursor:=crHourGlass;
  1489.      TMDIChild(ActiveMDIChild).InitStatusProcess;
  1490.      TMDIChild(ActiveMDIChild).LeadCtrl1.Halftone(HALFTONE_VIEW,LTDlgOCXCtl1.Change);          {Halftone for View}
  1491.      TMDIChild(ActiveMDIChild).ResetStatusProcess;
  1492.      Screen.Cursor:=crDefault;
  1493.    end;
  1494. end;
  1495.  
  1496. procedure TMainForm.Grayscale1Click(Sender: TObject);
  1497. begin
  1498.      Screen.Cursor:=crHourGlass;
  1499.      TMDIChild(ActiveMDIChild).InitStatusProcess;
  1500.      TMDIChild(ActiveMDIChild).LeadCtrl1.Grayscale(8);          {turn the bitmap into 8 bit Grayscale }
  1501.      TMDIChild(ActiveMDIChild).ResetStatusProcess;
  1502.      Screen.Cursor:=crDefault;
  1503. end;
  1504.  
  1505. procedure TMainForm.ColorResolution1Click(Sender: TObject);
  1506. {This procedure uses a dialog box to get ColorResolution}
  1507. {options, and then changes the image based on that data.}
  1508. var
  1509.    nRet, nBits : integer;
  1510.    uDither, uPalette, uFlags : longint;
  1511.    bVal : boolean;
  1512. begin
  1513.      bVal := TRUE;
  1514.      try
  1515.         LTDlgOCXCtl1.BitsPerPixel := TMDIChild(ActiveMDIChild).LeadCtrl1.BitmapBits;
  1516.         LTDlgOCXCtl1.PaletteFlags := 0;
  1517.         LTDlgOCXCtl1.DitherFlags := 0;
  1518.         {assign the bitmap for preview}
  1519.         LTDlgOCXCtl1.Bitmap := TMDIChild(ActiveMDIChild).LeadCtrl1.Bitmap;
  1520.         LTDlgOCXCtl1.UIFlags := DLG_CR_BITALL + DLG_CR_PAL_ALL + DLG_CR_DITHER_ALL + DLG_CR_SHOWPREVIEW + DLG_CR_ORDER;
  1521.         LTDlgOCXCtl1.GetColorRes (handle);
  1522.         {release the reference}
  1523.         LTDlgOCXCtl1.Bitmap := 0;
  1524.      except
  1525.         bVal := FALSE;
  1526.      end;
  1527.      if (bVal = TRUE) then
  1528.      begin
  1529.         nBits:=LTDlgOCXCtl1.BitsPerPixel;
  1530.         uDither:=LTDlgOCXCtl1.DitherFlags;
  1531.         uPalette:=LTDlgOCXCtl1.PaletteFlags;
  1532.         Screen.Cursor:=crHourGlass;
  1533.         TMDIChild(ActiveMDIChild).InitStatusProcess;
  1534.         TMDIChild(ActiveMDIChild).LeadCtrl1.ColorRes(nBits, uPalette, uDither, 0); {call ColorRes method}
  1535.         TMDIChild(ActiveMDIChild).ResetStatusProcess;
  1536.         Screen.Cursor:=crDefault;
  1537.      end;
  1538. end;
  1539.  
  1540. procedure TMainForm.Invert1Click(Sender: TObject);
  1541. begin
  1542.      Screen.Cursor:=crHourGlass;
  1543.      TMDIChild(ActiveMDIChild).InitStatusProcess;
  1544.      TMDIChild(ActiveMDIChild).LeadCtrl1.Invert;          {invert bitmap colors}
  1545.      TMDIChild(ActiveMDIChild).ResetStatusProcess;
  1546.      Screen.Cursor:=crDefault;
  1547. end;
  1548.  
  1549. procedure TMainForm.Brightness1Click(Sender: TObject);
  1550. var
  1551.    instring : string;
  1552.    code, nVal : integer;
  1553.    bVal : boolean;
  1554. begin
  1555.    bVal := TRUE;
  1556.    try
  1557.       LTDlgOCXCtl1.Bitmap := TMDIChild(ActiveMDIChild).LeadCtrl1.Bitmap;
  1558.       LTDlgOCXCtl1.Change := 0;
  1559.       LTDlgOCXCtl1.UIFlags := DLG_IMG_BRIGHTNESS + DLG_IMG_SHOWPREVIEW;
  1560.       LTDlgOCXCtl1.GetChange (handle);
  1561.       LTDlgOCXCtl1.Bitmap := 0;
  1562.    except
  1563.       bVal := FALSE;
  1564.    end;
  1565.    if(bVal = TRUE) then
  1566.    begin
  1567.        nVal := LTDlgOCXCtl1.Change;
  1568.        Screen.Cursor:=crHourGlass;
  1569.        TMDIChild(ActiveMDIChild).InitStatusProcess;
  1570.        TMDIChild(ActiveMDIChild).LeadCtrl1.Intensity(nVal);
  1571.        TMDIChild(ActiveMDIChild).ResetStatusProcess;
  1572.        Screen.Cursor:=crDefault;
  1573.    end
  1574. end;
  1575.  
  1576. procedure TMainForm.Contrast1Click(Sender: TObject);
  1577. var
  1578.    instring : string;
  1579.    code, nVal : integer;
  1580.    bVal : boolean;
  1581. begin
  1582.    bVal := TRUE;
  1583.    try
  1584.       LTDlgOCXCtl1.Bitmap := TMDIChild(ActiveMDIChild).LeadCtrl1.Bitmap;
  1585.       LTDlgOCXCtl1.Change := 0;
  1586.       LTDlgOCXCtl1.UIFlags := DLG_IMG_CONTRAST + DLG_IMG_SHOWPREVIEW;
  1587.       LTDlgOCXCtl1.GetChange (handle);
  1588.       LTDlgOCXCtl1.Bitmap := 0;
  1589.    except
  1590.       bVal := FALSE;
  1591.    end;
  1592.    if(bVal = TRUE) then
  1593.    begin
  1594.        nVal := LTDlgOCXCtl1.Change;
  1595.        Screen.Cursor:=crHourGlass;
  1596.        TMDIChild(ActiveMDIChild).InitStatusProcess;
  1597.        TMDIChild(ActiveMDIChild).LeadCtrl1.Contrast(nVal);
  1598.        TMDIChild(ActiveMDIChild).ResetStatusProcess;
  1599.        Screen.Cursor:=crDefault;
  1600.     end
  1601. end;
  1602.  
  1603. procedure TMainForm.Hue1Click(Sender: TObject);
  1604. var
  1605.    instring : string;
  1606.    code, nVal : integer;
  1607.    bVal : boolean;
  1608. begin
  1609.    bVal := TRUE;
  1610.    try
  1611.       LTDlgOCXCtl1.Bitmap := TMDIChild(ActiveMDIChild).LeadCtrl1.Bitmap;
  1612.       LTDlgOCXCtl1.Change := 0;
  1613.       LTDlgOCXCtl1.UIFlags := DLG_IMG_HUE + DLG_IMG_SHOWPREVIEW;
  1614.       LTDlgOCXCtl1.GetChange (handle);
  1615.       LTDlgOCXCtl1.Bitmap := 0;
  1616.    except
  1617.       bVal := FALSE;
  1618.    end;
  1619.    if(bVal = TRUE) then
  1620.    begin
  1621.        nVal := LTDlgOCXCtl1.Change;
  1622.        Screen.Cursor:=crHourGlass;
  1623.        TMDIChild(ActiveMDIChild).InitStatusProcess;
  1624.        TMDIChild(ActiveMDIChild).LeadCtrl1.Hue(nVal);
  1625.        TMDIChild(ActiveMDIChild).ResetStatusProcess;
  1626.        Screen.Cursor:=crDefault;
  1627.     end
  1628. end;
  1629.  
  1630. procedure TMainForm.HistogramEqualize1Click(Sender: TObject);
  1631. begin
  1632.      Screen.Cursor:=crHourGlass;
  1633.      TMDIChild(ActiveMDIChild).InitStatusProcess;
  1634.      TMDIChild(ActiveMDIChild).LeadCtrl1.HistoEqualize;
  1635.      TMDIChild(ActiveMDIChild).ResetStatusProcess;
  1636.      Screen.Cursor:=crDefault;
  1637. end;
  1638.  
  1639. procedure TMainForm.StretchIntensity1Click(Sender: TObject);
  1640. begin
  1641.      Screen.Cursor:=crHourGlass;
  1642.      TMDIChild(ActiveMDIChild).InitStatusProcess;
  1643.      TMDIChild(ActiveMDIChild).LeadCtrl1.StretchIntensity;
  1644.      TMDIChild(ActiveMDIChild).ResetStatusProcess;
  1645.      Screen.Cursor:=crDefault;
  1646. end;
  1647.  
  1648. procedure TMainForm.GammaCorrect1Click(Sender: TObject);
  1649. var
  1650.    instring : string;
  1651.    code, nVal : integer;
  1652.    bVal : boolean;
  1653. begin
  1654.    bVal := TRUE;
  1655.    try
  1656.       {assign the bitmap for preview}
  1657.       LTDlgOCXCtl1.Bitmap := TMDIChild(ActiveMDIChild).LeadCtrl1.Bitmap;
  1658.       LTDlgOCXCtl1.Gamma := 0;
  1659.       LTDlgOCXCtl1.UIFlags := DLG_IMG_SHOWPREVIEW;
  1660.       LTDlgOCXCtl1.GetGamma (handle);
  1661.       {release the reference}
  1662.       LTDlgOCXCtl1.Bitmap := 0;
  1663.    except
  1664.       bVal := FALSE;
  1665.    end;
  1666.    if(bVal = TRUE) then
  1667.    begin
  1668.        nVal := LTDlgOCXCtl1.Gamma;
  1669.        Screen.Cursor:=crHourGlass;
  1670.        TMDIChild(ActiveMDIChild).InitStatusProcess;
  1671.        TMDIChild(ActiveMDIChild).LeadCtrl1.GammaCorrect( nVal );
  1672.        TMDIChild(ActiveMDIChild).ResetStatusProcess;
  1673.        Screen.Cursor:=crDefault;
  1674.    end
  1675. end;
  1676.  
  1677. procedure TMainForm.IntensityDetect1Click(Sender: TObject);
  1678. var
  1679.    instring : string;
  1680.    nRet, code, valmin, valmax : integer;
  1681.    bVal : boolean;
  1682. begin
  1683.    bVal := TRUE;
  1684.    try
  1685.       {assign the bitmap for preview}
  1686.       LTDlgOCXCtl1.Bitmap := TMDIChild(ActiveMDIChild).LeadCtrl1.Bitmap;
  1687.       LTDlgOCXCtl1.Low := 0;
  1688.       LTDlgOCXCtl1.High := 255;
  1689.       LTDlgOCXCtl1.UIFlags := DLG_IMG_SHOWPREVIEW;
  1690.       LTDlgOCXCtl1.GetRange (handle);
  1691.       {release the reference}
  1692.       LTDlgOCXCtl1.Bitmap := 0;
  1693.    except
  1694.       bVal := FALSE;
  1695.    end;
  1696.    if(bVal = TRUE) then
  1697.    begin
  1698.       valmin := LTDlgOCXCtl1.Low;
  1699.       valmax := LTDlgOCXCtl1.High;
  1700.       Screen.Cursor:=crHourGlass;
  1701.       TMDIChild(ActiveMDIChild).InitStatusProcess;
  1702.       TMDIChild(ActiveMDIChild).LeadCtrl1.IntensityDetect(valmin, valmax);
  1703.       TMDIChild(ActiveMDIChild).ResetStatusProcess;
  1704.       Screen.Cursor:=crDefault;
  1705.    end
  1706. end;
  1707.  
  1708. procedure TMainForm.Auto1Click(Sender: TObject);
  1709. var i: integer;
  1710. begin
  1711.    if Auto1.Checked = false then
  1712.    begin
  1713.       Auto1.Checked := true;
  1714.       Fixed1.Checked := false;
  1715.       PaintPaletteVal := PAINTPALETTE_AUTO;
  1716.       for i := MDIChildCount - 1 downto 0 do
  1717.          TMDIChild(MDIChildren[i]).LeadCtrl1.PaintPalette := PaintPaletteVal;
  1718.    end;
  1719. end;
  1720.  
  1721. procedure TMainForm.Fixed1Click(Sender: TObject);
  1722. var i: integer;
  1723. begin
  1724.    if Fixed1.Checked = false then
  1725.    begin
  1726.       Fixed1.Checked := true;
  1727.       Auto1.Checked := false;
  1728.       PaintPaletteVal := PAINTPALETTE_FIXED;
  1729.       for i := MDIChildCount - 1 downto 0 do
  1730.          TMDIChild(MDIChildren[i]).LeadCtrl1.PaintPalette := PaintPaletteVal;
  1731.    end;
  1732. end;
  1733.  
  1734. procedure TMainForm.Ordered1Click(Sender: TObject);
  1735. var i: integer;
  1736. begin
  1737.    if Ordered1.Checked = false then
  1738.    begin
  1739.       Ordered1.Checked := true;
  1740.       ErrorDiffusion1.Checked := false;
  1741.       PaintDitherVal := PAINTDITHER_ORDERED;
  1742.       for i := MDIChildCount - 1 downto 0 do
  1743.          TMDIChild(MDIChildren[i]).LeadCtrl1.PaintDither := PaintDitherVal;
  1744.    end;
  1745. end;
  1746.  
  1747. procedure TMainForm.ErrorDiffusion1Click(Sender: TObject);
  1748. var i: integer;
  1749. begin
  1750.    if ErrorDiffusion1.Checked = false then
  1751.    begin
  1752.       ErrorDiffusion1.Checked := true;
  1753.       Ordered1.Checked := false;
  1754.       PaintDitherVal := PAINTDITHER_DIFFUSION;
  1755.       for i := MDIChildCount - 1 downto 0 do
  1756.          TMDIChild(MDIChildren[i]).LeadCtrl1.PaintDither := PaintDitherVal;
  1757.    end;
  1758. end;
  1759.  
  1760. procedure TMainForm.BitonalNormal1Click(Sender: TObject);
  1761. var i: integer;
  1762. begin
  1763.    if BitonalNormal1.Checked = false then
  1764.    begin
  1765.       BitonalNormal1.Checked := true;
  1766.       FavorBlack1.Checked := false;
  1767.       ScaleToGray1.Checked := false;
  1768.       BitonalScalingVal := BITONALSCALING_NORMAL;
  1769.       for i := MDIChildCount - 1 downto 0 do
  1770.          TMDIChild(MDIChildren[i]).LeadCtrl1.BitonalScaling := BitonalScalingVal;
  1771.    end;
  1772. end;
  1773.  
  1774. procedure TMainForm.FavorBlack1Click(Sender: TObject);
  1775. var i: integer;
  1776. begin
  1777.    if FavorBlack1.Checked = false then
  1778.    begin
  1779.       BitonalNormal1.Checked := false;
  1780.       FavorBlack1.Checked := true;
  1781.       ScaleToGray1.Checked := false;
  1782.       BitonalScalingVal := BITONALSCALING_FAVORBLACK;
  1783.       for i := MDIChildCount - 1 downto 0 do
  1784.          TMDIChild(MDIChildren[i]).LeadCtrl1.BitonalScaling := BitonalScalingVal;
  1785.    end;
  1786. end;
  1787.  
  1788. procedure TMainForm.ScaleToGray1Click(Sender: TObject);
  1789. var i: integer;
  1790. begin
  1791.    if ScaleToGray1.Checked = false then
  1792.    begin
  1793.       BitonalNormal1.Checked := false;
  1794.       FavorBlack1.Checked := false;
  1795.       ScaleToGray1.Checked := true;
  1796.       BitonalScalingVal := BITONALSCALING_SCALETOGRAY;
  1797.       for i := MDIChildCount - 1 downto 0 do
  1798.          TMDIChild(MDIChildren[i]).LeadCtrl1.BitonalScaling := BitonalScalingVal;
  1799.    end;
  1800. end;
  1801.  
  1802. procedure TMainForm.HelpAboutItemClick(Sender: TObject);
  1803. begin
  1804.    AboutBox.ShowModal;
  1805. end;
  1806.  
  1807. procedure TMainForm.CaptureScreen1Click(Sender: TObject);
  1808. var
  1809.    screenDC: HDC;
  1810.    nRet: integer;
  1811.    Child: TMDIChild;
  1812. begin
  1813.    Screen.Cursor := crHourglass;
  1814.    Visible := False;
  1815. {$ifdef WIN32}
  1816.    Sleep(1000);
  1817. {$else}
  1818.    Yield;
  1819. {$endif}
  1820.    screenDC := GetDC (0);
  1821.    nRet := HiddenLead.Capture (screenDC, 0, 0, GetDeviceCaps (screenDC, HORZRES), GetDeviceCaps (screenDC,VERTRES));
  1822.    ReleaseDC (0, screenDC);
  1823.    Visible := True;
  1824.    if(nRet = 0) then
  1825.    begin
  1826.       Child := TMDIChild.Create(Application);
  1827.       Child.Caption := 'Captured Data';
  1828.       TMDIChild(ActiveMDIChild).LeadCtrl1.AutoRepaint := False;
  1829.       TMDIChild(ActiveMDIChild).LeadCtrl1.Bitmap := HiddenLead.Bitmap;
  1830.       HiddenLead.Bitmap := 0; { don't keep two copies of the image }
  1831.       TMDIChild(ActiveMDIChild).FormResize(Sender);
  1832.       TMDIChild(ActiveMDIChild).LeadCtrl1.AutoRepaint := True;
  1833.    end;
  1834.    Screen.Cursor := crDefault;
  1835.    if (nRet <> 0) then
  1836.       MessageDlg('Error capturing the screen', mtError,[mbOk], 0);
  1837. end;
  1838.  
  1839. procedure TMainForm.Gradient1Click(Sender: TObject);
  1840. {This procedure performs a Gradient Spatial Filter on the image.}
  1841. {Check the help file for more information.}
  1842. var
  1843.    code, nFlt : integer;
  1844.    bVal : boolean;
  1845. begin
  1846.    bVal := TRUE;
  1847.    try
  1848.       {assign the bitmap for preview}
  1849.       LTDlgOCXCtl1.Bitmap := TMDIChild(ActiveMDIChild).LeadCtrl1.Bitmap;
  1850.       LTDlgOCXCtl1.Gamma := 0;
  1851.       LTDlgOCXCtl1.UIFlags := DLG_IMG_GRADIENT + DLG_IMG_SHOWPREVIEW;
  1852.       LTDlgOCXCtl1.GetFilter (handle);
  1853.       {release the reference}
  1854.       LTDlgOCXCtl1.Bitmap := 0;
  1855.    except
  1856.       bVal := FALSE;
  1857.    end;
  1858.    if(bVal = TRUE) then
  1859.    begin
  1860.        nFlt := LTDlgOCXCtl1.SpatialFilterType;
  1861.        Screen.Cursor:=crHourGlass;
  1862.        TMDIChild(ActiveMDIChild).InitStatusProcess;
  1863.        TMDIChild(ActiveMDIChild).LeadCtrl1.SpatialFilter(nFlt);  {perform the spatial filter}
  1864.        TMDIChild(ActiveMDIChild).ResetStatusProcess;
  1865.        Screen.Cursor:=crDefault;
  1866.    end;
  1867. end;
  1868.  
  1869. procedure TMainForm.Laplacian1Click(Sender: TObject);
  1870. {This procedure performs a Laplacian Spatial Filter on the image.}
  1871. {Check the help file for more information.}
  1872. var
  1873.    code, nFlt : integer;
  1874.    bVal : boolean;
  1875. begin
  1876.    bVal := TRUE;
  1877.    try
  1878.       LTDlgOCXCtl1.Bitmap := TMDIChild(ActiveMDIChild).LeadCtrl1.Bitmap;
  1879.       LTDlgOCXCtl1.Gamma := 0;
  1880.       LTDlgOCXCtl1.UIFlags := DLG_IMG_LAPLACIAN + DLG_IMG_SHOWPREVIEW;
  1881.       LTDlgOCXCtl1.GetFilter (handle);
  1882.       LTDlgOCXCtl1.Bitmap := 0;
  1883.    except
  1884.       bVal := FALSE;
  1885.    end;
  1886.    if(bVal = TRUE) then
  1887.    begin
  1888.        nFlt := LTDlgOCXCtl1.SpatialFilterType;
  1889.        Screen.Cursor:=crHourGlass;
  1890.        TMDIChild(ActiveMDIChild).InitStatusProcess;
  1891.        TMDIChild(ActiveMDIChild).LeadCtrl1.SpatialFilter(nFlt);  {perform the spatial filter}
  1892.        TMDIChild(ActiveMDIChild).ResetStatusProcess;
  1893.        Screen.Cursor:=crDefault;
  1894.    end;
  1895. end;
  1896.  
  1897. procedure TMainForm.Sobel1Click(Sender: TObject);
  1898. {This procedure performs a Sobel Spatial Filter on the image.}
  1899. {Check the help file for more information.}
  1900. var
  1901.    code, nFlt : integer;
  1902.    bVal : boolean;
  1903. begin
  1904.    bVal := TRUE;
  1905.    try
  1906.       LTDlgOCXCtl1.Bitmap := TMDIChild(ActiveMDIChild).LeadCtrl1.Bitmap;
  1907.       LTDlgOCXCtl1.Gamma := 0;
  1908.       LTDlgOCXCtl1.UIFlags := DLG_IMG_SOBEL + DLG_IMG_SHOWPREVIEW;
  1909.       LTDlgOCXCtl1.GetFilter (handle);
  1910.       LTDlgOCXCtl1.Bitmap := 0;
  1911.    except
  1912.       bVal := FALSE;
  1913.    end;
  1914.    if(bVal = TRUE) then
  1915.    begin
  1916.        nFlt := LTDlgOCXCtl1.SpatialFilterType;
  1917.        Screen.Cursor:=crHourGlass;
  1918.        TMDIChild(ActiveMDIChild).InitStatusProcess;
  1919.        TMDIChild(ActiveMDIChild).LeadCtrl1.SpatialFilter(nFlt);  {perform the spatial filter}
  1920.        TMDIChild(ActiveMDIChild).ResetStatusProcess;
  1921.        Screen.Cursor:=crDefault;
  1922.    end;
  1923. end;
  1924.  
  1925. procedure TMainForm.Prewitt1Click(Sender: TObject);
  1926. {This procedure performs a Prewitt Spatial Filter on the image.}
  1927. {Check the help file for more information.}
  1928. var
  1929.    code, nFlt : integer;
  1930.    bVal : boolean;
  1931. begin
  1932.    bVal := TRUE;
  1933.    try
  1934.       LTDlgOCXCtl1.Bitmap := TMDIChild(ActiveMDIChild).LeadCtrl1.Bitmap;
  1935.       LTDlgOCXCtl1.Gamma := 0;
  1936.       LTDlgOCXCtl1.UIFlags := DLG_IMG_PREWITT + DLG_IMG_SHOWPREVIEW;
  1937.       LTDlgOCXCtl1.GetFilter (handle);
  1938.       LTDlgOCXCtl1.Bitmap := 0;
  1939.    except
  1940.       bVal := FALSE;
  1941.    end;
  1942.    if(bVal = TRUE) then
  1943.    begin
  1944.        nFlt := LTDlgOCXCtl1.SpatialFilterType;
  1945.        Screen.Cursor:=crHourGlass;
  1946.        TMDIChild(ActiveMDIChild).InitStatusProcess;
  1947.        TMDIChild(ActiveMDIChild).LeadCtrl1.SpatialFilter(nFlt);  {perform the spatial filter}
  1948.        TMDIChild(ActiveMDIChild).ResetStatusProcess;
  1949.        Screen.Cursor:=crDefault;
  1950.    end;
  1951. end;
  1952.  
  1953. procedure TMainForm.ShiftandDifference1Click(Sender: TObject);
  1954. {This procedure performs a Shift and Difference Spatial Filter on the image.}
  1955. {Check the help file for more information.}
  1956. var
  1957.    code, nFlt : integer;
  1958.    bVal : boolean;
  1959. begin
  1960.    bVal := TRUE;
  1961.    try
  1962.       LTDlgOCXCtl1.Bitmap := TMDIChild(ActiveMDIChild).LeadCtrl1.Bitmap;
  1963.       LTDlgOCXCtl1.Gamma := 0;
  1964.       LTDlgOCXCtl1.UIFlags := DLG_IMG_SHIFTDIFF + DLG_IMG_SHOWPREVIEW;
  1965.       LTDlgOCXCtl1.GetFilter (handle);
  1966.       LTDlgOCXCtl1.Bitmap := 0;
  1967.    except
  1968.       bVal := FALSE;
  1969.    end;
  1970.    if(bVal = TRUE) then
  1971.    begin
  1972.        nFlt := LTDlgOCXCtl1.SpatialFilterType;
  1973.        Screen.Cursor:=crHourGlass;
  1974.        TMDIChild(ActiveMDIChild).InitStatusProcess;
  1975.        TMDIChild(ActiveMDIChild).LeadCtrl1.SpatialFilter(nFlt);  {perform the spatial filter}
  1976.        TMDIChild(ActiveMDIChild).ResetStatusProcess;
  1977.        Screen.Cursor:=crDefault;
  1978.    end;
  1979. end;
  1980.  
  1981. procedure TMainForm.LineSegment1Click(Sender: TObject);
  1982. {This procedure performs a Line Segment Spatial Filter on the image.}
  1983. {Check the help file for more information.}
  1984. var
  1985.    code, nFlt : integer;
  1986.    bVal : boolean;
  1987. begin
  1988.    bVal := TRUE;
  1989.    try
  1990.       LTDlgOCXCtl1.Bitmap := TMDIChild(ActiveMDIChild).LeadCtrl1.Bitmap;
  1991.       LTDlgOCXCtl1.Gamma := 0;
  1992.       LTDlgOCXCtl1.UIFlags := DLG_IMG_LINESEG + DLG_IMG_SHOWPREVIEW;
  1993.       LTDlgOCXCtl1.GetFilter (handle);
  1994.       LTDlgOCXCtl1.Bitmap := 0;
  1995.    except
  1996.       bVal := FALSE;
  1997.    end;
  1998.    if(bVal = TRUE) then
  1999.    begin
  2000.        nFlt := LTDlgOCXCtl1.SpatialFilterType;
  2001.        Screen.Cursor:=crHourGlass;
  2002.        TMDIChild(ActiveMDIChild).InitStatusProcess;
  2003.        TMDIChild(ActiveMDIChild).LeadCtrl1.SpatialFilter(nFlt);  {perform the spatial filter}
  2004.        TMDIChild(ActiveMDIChild).ResetStatusProcess;
  2005.        Screen.Cursor:=crDefault;
  2006.    end;
  2007. end;
  2008.  
  2009. procedure TMainForm.Erosion1Click(Sender: TObject);
  2010. {This procedure performs a Erosion Binary Filter on the image.}
  2011. {Binary Filter can be in any direction.}
  2012. {Check the help file for more information.}
  2013. {Note: this is an Express only function.}
  2014. var
  2015.    code, nFlt : integer;
  2016.    bVal : boolean;
  2017. begin
  2018.    bVal := TRUE;
  2019.    try
  2020.       LTDlgOCXCtl1.Bitmap := TMDIChild(ActiveMDIChild).LeadCtrl1.Bitmap;
  2021.       LTDlgOCXCtl1.Gamma := 0;
  2022.       LTDlgOCXCtl1.UIFlags := DLG_IMG_EROSION + DLG_IMG_SHOWPREVIEW;
  2023.       LTDlgOCXCtl1.GetFilter (handle);
  2024.       LTDlgOCXCtl1.Bitmap := 0;
  2025.    except
  2026.       bVal := FALSE;
  2027.    end;
  2028.    if(bVal = TRUE) then
  2029.    begin
  2030.        nFlt := LTDlgOCXCtl1.BinaryFilterType;
  2031.        Screen.Cursor:=crHourGlass;
  2032.        TMDIChild(ActiveMDIChild).InitStatusProcess;
  2033.        TMDIChild(ActiveMDIChild).LeadCtrl1.BinaryFilter(nFlt);          {perform the binary filter}
  2034.        TMDIChild(ActiveMDIChild).ResetStatusProcess;
  2035.        Screen.Cursor:=crDefault;
  2036.    end;
  2037. end;
  2038.  
  2039. procedure TMainForm.Dilation1Click(Sender: TObject);
  2040. {This procedure performs a Dilation Binary Filter on the image.}
  2041. {Binary Filter can be in any direction.}
  2042. {Check the help file for more information.}
  2043. {Note: this is an Express only function.}
  2044. var
  2045.    code, nFlt : integer;
  2046.    bVal : boolean;
  2047. begin
  2048.    bVal := TRUE;
  2049.    try
  2050.       LTDlgOCXCtl1.Bitmap := TMDIChild(ActiveMDIChild).LeadCtrl1.Bitmap;
  2051.       LTDlgOCXCtl1.Gamma := 0;
  2052.       LTDlgOCXCtl1.UIFlags := DLG_IMG_DILATION + DLG_IMG_SHOWPREVIEW;
  2053.       LTDlgOCXCtl1.GetFilter (handle);
  2054.       LTDlgOCXCtl1.Bitmap := 0;
  2055.    except
  2056.       bVal := FALSE;
  2057.    end;
  2058.    if(bVal = TRUE) then
  2059.    begin
  2060.        nFlt := LTDlgOCXCtl1.BinaryFilterType;
  2061.        Screen.Cursor:=crHourGlass;
  2062.        TMDIChild(ActiveMDIChild).InitStatusProcess;
  2063.        TMDIChild(ActiveMDIChild).LeadCtrl1.BinaryFilter(nFlt+BFLT_DILATION_OMNI);          {perform the binary filter}
  2064.        TMDIChild(ActiveMDIChild).ResetStatusProcess;
  2065.        Screen.Cursor:=crDefault;
  2066.    end;
  2067. end;
  2068.  
  2069. function GetListIndex(DialogTitle, LabelTitle: string;
  2070.                StringArray: TStringArray;
  2071.                var nIndex: integer): boolean;
  2072. var i: integer;
  2073. begin
  2074.    ListDlg.Caption := DialogTitle;
  2075.    ListDlg.GroupBox1.Caption := LabelTitle;
  2076.    ListDlg.ListBox1.Clear;
  2077.    for i := 1 to MAX_STRING_LIST do
  2078.       if StringArray[i] <> '' then
  2079.          ListDlg.ListBox1.Items.Add(StringArray[i])
  2080.       else
  2081.          break;
  2082.    ListDlg.ListBox1.ItemIndex := 0;
  2083.    ListDlg.ShowModal;
  2084.    nIndex :=ListDlg.ListBox1.ItemIndex;
  2085.    GetListIndex := not ListDlg.bCancelled;
  2086. end;
  2087.  
  2088.  
  2089. function GetPaintEffect(var nIndex: integer): boolean;
  2090. var i: integer;
  2091. begin
  2092.    ListDlg.Caption := 'Paint Effect';
  2093.    ListDlg.GroupBox1.Caption := 'Select effect';
  2094.    ListDlg.ListBox1.Clear;
  2095.    for i := EFX_EFFECT_WIPE_CLASS to EFX_EFFECT_WIPE_MAX do
  2096.       ListDlg.ListBox1.Items.Add(aEffectList[i]);
  2097.  
  2098.    ListDlg.ListBox1.ItemIndex := 0;
  2099.    ListDlg.ShowModal;
  2100.    nIndex :=ListDlg.ListBox1.ItemIndex;
  2101.    GetPaintEffect := not ListDlg.bCancelled;
  2102. end;
  2103.  
  2104. procedure TMainForm.Posterize1Click(Sender: TObject);
  2105. var
  2106.    instring : string;
  2107.    nRet, code, nVal : integer;
  2108.    bVal : boolean;
  2109. begin
  2110.    bVal := TRUE;
  2111.    try
  2112.       LTDlgOCXCtl1.Bitmap := TMDIChild(ActiveMDIChild).LeadCtrl1.Bitmap;
  2113.       LTDlgOCXCtl1.Change := 0;
  2114.       LTDlgOCXCtl1.UIFlags := DLG_IMG_POSTERIZE + DLG_IMG_SHOWPREVIEW;
  2115.       LTDlgOCXCtl1.GetChange (handle);
  2116.       LTDlgOCXCtl1.Bitmap := 0;
  2117.    except
  2118.       bVal := FALSE;
  2119.    end;
  2120.    if(bVal = TRUE) then
  2121.    begin
  2122.        nVal := LTDlgOCXCtl1.Change;
  2123.       Screen.Cursor:=crHourGlass;
  2124.       TMDIChild(ActiveMDIChild).InitStatusProcess;
  2125.       TMDIChild(ActiveMDIChild).LeadCtrl1.Posterize(nVal);
  2126.       TMDIChild(ActiveMDIChild).ResetStatusProcess;
  2127.       Screen.Cursor:=crDefault;
  2128.     end
  2129. end;
  2130.  
  2131. procedure TMainForm.Mosaic1Click(Sender: TObject);
  2132. var
  2133.    instring : string;
  2134.    nRet, code, nVal : integer;
  2135.    bVal : boolean;
  2136. begin
  2137.    bVal := TRUE;
  2138.    try
  2139.       LTDlgOCXCtl1.Bitmap := TMDIChild(ActiveMDIChild).LeadCtrl1.Bitmap;
  2140.       LTDlgOCXCtl1.Change := 0;
  2141.       LTDlgOCXCtl1.UIFlags := DLG_IMG_MOSAIC + DLG_IMG_SHOWPREVIEW;
  2142.       LTDlgOCXCtl1.GetChange (handle);
  2143.       LTDlgOCXCtl1.Bitmap := 0;
  2144.    except
  2145.       bVal := FALSE;
  2146.    end;
  2147.    if(bVal = TRUE) then
  2148.    begin
  2149.        nVal := LTDlgOCXCtl1.Change;
  2150.      Screen.Cursor:=crHourGlass;
  2151.      TMDIChild(ActiveMDIChild).InitStatusProcess;
  2152.      TMDIChild(ActiveMDIChild).LeadCtrl1.Mosaic(nVal);
  2153.      TMDIChild(ActiveMDIChild).ResetStatusProcess;
  2154.      Screen.Cursor:=crDefault;
  2155.    end
  2156. end;
  2157.  
  2158. procedure TMainForm.Average1Click(Sender: TObject);
  2159. var
  2160.    instring : string;
  2161.    nRet, code, nVal : integer;
  2162.    bVal : boolean;
  2163. begin
  2164.    bVal := TRUE;
  2165.    try
  2166.       LTDlgOCXCtl1.Bitmap := TMDIChild(ActiveMDIChild).LeadCtrl1.Bitmap;
  2167.       LTDlgOCXCtl1.Change := 0;
  2168.       LTDlgOCXCtl1.UIFlags := DLG_IMG_AVERAGE + DLG_IMG_SHOWPREVIEW;
  2169.       LTDlgOCXCtl1.GetChange (handle);
  2170.       LTDlgOCXCtl1.Bitmap := 0;
  2171.    except
  2172.       bVal := FALSE;
  2173.    end;
  2174.    if(bVal = TRUE) then
  2175.    begin
  2176.        nVal := LTDlgOCXCtl1.Change;
  2177.      Screen.Cursor:=crHourGlass;
  2178.      TMDIChild(ActiveMDIChild).InitStatusProcess;
  2179.      TMDIChild(ActiveMDIChild).LeadCtrl1.Average(nVal);
  2180.      TMDIChild(ActiveMDIChild).ResetStatusProcess;
  2181.      Screen.Cursor:=crDefault;
  2182.    end
  2183. end;
  2184.  
  2185. procedure TMainForm.Median1Click(Sender: TObject);
  2186. var
  2187.    instring : string;
  2188.    nRet, code, nVal : integer;
  2189.    bVal : boolean;
  2190. begin
  2191.    bVal := TRUE;
  2192.    try
  2193.       LTDlgOCXCtl1.Bitmap := TMDIChild(ActiveMDIChild).LeadCtrl1.Bitmap;
  2194.       LTDlgOCXCtl1.Change := 0;
  2195.       LTDlgOCXCtl1.UIFlags := DLG_IMG_MEDIAN + DLG_IMG_SHOWPREVIEW;
  2196.       LTDlgOCXCtl1.GetChange (handle);
  2197.       LTDlgOCXCtl1.Bitmap := 0;
  2198.    except
  2199.       bVal := FALSE;
  2200.    end;
  2201.    if(bVal = TRUE) then
  2202.    begin
  2203.        nVal := LTDlgOCXCtl1.Change;
  2204.      Screen.Cursor:=crHourGlass;
  2205.      TMDIChild(ActiveMDIChild).InitStatusProcess;
  2206.      TMDIChild(ActiveMDIChild).LeadCtrl1.Median(nVal);
  2207.      TMDIChild(ActiveMDIChild).ResetStatusProcess;
  2208.      Screen.Cursor:=crDefault;
  2209.    end
  2210. end;
  2211.  
  2212. procedure TMainForm.Sharpen1Click(Sender: TObject);
  2213. var
  2214.    instring : string;
  2215.    nRet, code, nVal : integer;
  2216.    bVal : boolean;
  2217. begin
  2218.    bVal := TRUE;
  2219.    try
  2220.       LTDlgOCXCtl1.Bitmap := TMDIChild(ActiveMDIChild).LeadCtrl1.Bitmap;
  2221.       LTDlgOCXCtl1.Change := 0;
  2222.       LTDlgOCXCtl1.UIFlags := DLG_IMG_SHARPEN + DLG_IMG_SHOWPREVIEW;
  2223.       LTDlgOCXCtl1.GetChange (handle);
  2224.       LTDlgOCXCtl1.Bitmap := 0;
  2225.    except
  2226.       bVal := FALSE;
  2227.    end;
  2228.    if(bVal = TRUE) then
  2229.    begin
  2230.        nVal := LTDlgOCXCtl1.Change;
  2231.      Screen.Cursor:=crHourGlass;
  2232.      TMDIChild(ActiveMDIChild).InitStatusProcess;
  2233.      TMDIChild(ActiveMDIChild).LeadCtrl1.Sharpen(nVal*10);
  2234.      TMDIChild(ActiveMDIChild).ResetStatusProcess;
  2235.      Screen.Cursor:=crDefault;
  2236.    end
  2237. end;
  2238.  
  2239. procedure TMainForm.AddNoise1Click(Sender: TObject);
  2240. var
  2241.    instring : string;
  2242.    nRet, code, nVal, nChannel : integer;
  2243.    bVal : boolean;
  2244. begin
  2245.      bVal := TRUE;
  2246.      try
  2247.         {assign the bitmap for preview}
  2248.         LTDlgOCXCtl1.Bitmap := TMDIChild(ActiveMDIChild).LeadCtrl1.Bitmap;
  2249.         LTDlgOCXCtl1.UIFlags := DLG_IMG_SHOWPREVIEW;
  2250.         LTDlgOCXCtl1.GetNoise (handle);
  2251.         {release the reference}
  2252.         LTDlgOCXCtl1.Bitmap := 0;
  2253.      except
  2254.         bVal := FALSE;
  2255.      end;
  2256.      if(bVal = TRUE) then
  2257.      begin
  2258.         nChannel := LTDlgOCXCtl1.Channel;
  2259.         nVal := LTDlgOCXCtl1.Range;
  2260.         Screen.Cursor:=crHourGlass;
  2261.         TMDIChild(ActiveMDIChild).InitStatusProcess;
  2262.         TMDIChild(ActiveMDIChild).LeadCtrl1.AddNoise(nVal, nChannel);
  2263.         TMDIChild(ActiveMDIChild).ResetStatusProcess;
  2264.         Screen.Cursor:=crDefault;
  2265.      end
  2266. end;
  2267.  
  2268. procedure TMainForm.Edit1Click(Sender: TObject);
  2269. begin
  2270.    if MDIChildCount > 0 then
  2271.    begin
  2272.       SelectRegion1.Enabled := True;
  2273.       CancelRegion1.Enabled := TMDIChild(ActiveMDIChild).LeadCtrl1.HasRgn;
  2274.    end
  2275.    else
  2276.    begin
  2277.       SelectRegion1.Enabled := False;
  2278.       CancelRegion1.Enabled := False;
  2279.    end;
  2280. end;
  2281.  
  2282. procedure TMainForm.SelectRegion1Click(Sender: TObject);
  2283. begin
  2284.    ToolNone1.Checked := TMDIChild(ActiveMDIChild).nRegionTool = RGNMARK_NONE;
  2285.    ToolRect1.Checked := TMDIChild(ActiveMDIChild).nRegionTool = RGNMARK_RECT;
  2286.    ToolEllipse1.Checked := TMDIChild(ActiveMDIChild).nRegionTool = RGNMARK_ELLIPSE;
  2287.    ToolRndRect1.Checked := TMDIChild(ActiveMDIChild).nRegionTool = RGNMARK_ROUNDRECT;
  2288.    ToolFreeHand1.Checked := TMDIChild(ActiveMDIChild).nRegionTool = RGNMARK_FREEHAND;
  2289. end;
  2290.  
  2291. procedure TMainForm.Image1Click(Sender: TObject);
  2292. begin
  2293.    FlipRegion1.Enabled := TMDIChild(ActiveMDIChild).LeadCtrl1.HasRgn;
  2294.    ReverseRegion1.Enabled := TMDIChild(ActiveMDIChild).LeadCtrl1.HasRgn;
  2295.    RotateRegion1.Enabled := TMDIChild(ActiveMDIChild).LeadCtrl1.HasRgn;
  2296.    ResizeRegion1.Enabled := TMDIChild(ActiveMDIChild).LeadCtrl1.HasRgn;
  2297.    ResampleRegion1.Enabled := TMDIChild(ActiveMDIChild).LeadCtrl1.HasRgn;
  2298. end;
  2299.  
  2300. procedure TMainForm.ToolNone1Click(Sender: TObject);
  2301. begin
  2302.    TMDIChild(ActiveMDIChild).nRegionTool := RGNMARK_NONE;
  2303. end;
  2304.  
  2305. procedure TMainForm.ToolRect1Click(Sender: TObject);
  2306. begin
  2307.    TMDIChild(ActiveMDIChild).nRegionTool := RGNMARK_RECT;
  2308. end;
  2309.  
  2310. procedure TMainForm.ToolEllipse1Click(Sender: TObject);
  2311. begin
  2312.    TMDIChild(ActiveMDIChild).nRegionTool := RGNMARK_ELLIPSE;
  2313. end;
  2314.  
  2315. procedure TMainForm.ToolRndRect1Click(Sender: TObject);
  2316. begin
  2317.    TMDIChild(ActiveMDIChild).nRegionTool := RGNMARK_ROUNDRECT;
  2318. end;
  2319.  
  2320. procedure TMainForm.ToolFreeHand1Click(Sender: TObject);
  2321. begin
  2322.    TMDIChild(ActiveMDIChild).nRegionTool := RGNMARK_FREEHAND;
  2323. end;
  2324.  
  2325. procedure TMainForm.CancelRegion1Click(Sender: TObject);
  2326. begin
  2327.    TMDIChild(ActiveMDIChild).CancelRegion;
  2328. end;
  2329.  
  2330. procedure TMainForm.FlipRegion1Click(Sender: TObject);
  2331. begin
  2332.    TMDIChild(ActiveMDIChild).FlipRegion;
  2333. end;
  2334.  
  2335. procedure TMainForm.ReverseRegion1Click(Sender: TObject);
  2336. begin
  2337.    TMDIChild(ActiveMDIChild).ReverseRegion;
  2338. end;
  2339.  
  2340. procedure TMainForm.RotateRegion1Click(Sender: TObject);
  2341. {This procedure rotates a region the specified # of degrees}
  2342. var
  2343.    instring : string;
  2344.    nRet, code, nVal : integer;
  2345. begin
  2346.     instring := '0';
  2347.     if InputQuery('Rotate Region', 'Enter Degrees (-360...360)', instring) = false then
  2348.       exit;
  2349.  
  2350.     Val(instring, nVal, code);
  2351.     if (code = 0) and (nVal >= -360) and (nVal <= 360) then
  2352.     begin
  2353.          Screen.Cursor:=crHourGlass;
  2354.          TMDIChild(ActiveMDIChild).InitStatusProcess;
  2355.          TMDIChild(ActiveMDIChild).RotateRegion(nVal*100);
  2356.          TMDIChild(ActiveMDIChild).ResetStatusProcess;
  2357.          Screen.Cursor:=crDefault;
  2358.     end
  2359.     else
  2360.       MessageDlg('Value out of range', mtError,[mbOk], 0);
  2361. end;
  2362.  
  2363. procedure TMainForm.ResizeRegion1Click(Sender: TObject);
  2364. {This procedure resizes the region}
  2365. var
  2366.    instring : string;
  2367.    nRet, code, nWidth, nHeight : integer;
  2368. begin
  2369.     Str(TMDIChild(ActiveMDIChild).LeadCtrl1.RgnWidth:1:0, instring);
  2370.     if( InputQuery('New Region Width', 'Enter Width', instring) = false ) then
  2371.       exit;
  2372.  
  2373.     Val(instring, nWidth, code);
  2374.     if( code = 0 ) and (nWidth > 0) then
  2375.     begin
  2376.       Str(TMDIChild(ActiveMDIChild).LeadCtrl1.RgnHeight/TMDIChild(ActiveMDIChild).LeadCtrl1.RgnWidth*nWidth:1:0, instring);
  2377.       if( InputQuery('New Region Height', 'Enter Height', instring) = false ) then
  2378.          exit;
  2379.  
  2380.       Val(instring, nHeight, code);
  2381.       if (code = 0) and (nHeight > 0) then
  2382.       begin
  2383.         Screen.Cursor:=crHourGlass;
  2384.         TMDIChild(ActiveMDIChild).InitStatusProcess;
  2385.         TMDIChild(ActiveMDIChild).ResizeRegion(nWidth, nHeight, RESIZE_NORMAL); {resize the region}
  2386.         TMDIChild(ActiveMDIChild).ResetStatusProcess;
  2387.         TMDIChild(ActiveMDIChild).ZoomImage; { preserve the zoom factor }
  2388.         Screen.Cursor:=crDefault;
  2389.       end
  2390.       else
  2391.         MessageDlg('Value out of range', mtError,[mbOk], 0);
  2392.     end
  2393.     else
  2394.       MessageDlg('Value out of range', mtError,[mbOk], 0);
  2395. end;
  2396.  
  2397. procedure TMainForm.ResampleRegion1Click(Sender: TObject);
  2398. {This procedure resamples the region}
  2399. var
  2400.    instring : string;
  2401.    nRet, code, nWidth, nHeight : integer;
  2402. begin
  2403.     Str(TMDIChild(ActiveMDIChild).LeadCtrl1.RgnWidth:1:0, instring);
  2404.     if( InputQuery('New Region Width', 'Enter Width', instring) = false ) then
  2405.       exit;
  2406.  
  2407.     Val(instring, nWidth, code);
  2408.     if( code = 0 ) and (nWidth > 0) then
  2409.     begin
  2410.       Str(TMDIChild(ActiveMDIChild).LeadCtrl1.RgnHeight/TMDIChild(ActiveMDIChild).LeadCtrl1.RgnWidth*nWidth:1:0, instring);
  2411.       if( InputQuery('New Region Height', 'Enter Height', instring) = false ) then
  2412.          exit;
  2413.  
  2414.       Val(instring, nHeight, code);
  2415.       if (code = 0) and (nHeight > 0) then
  2416.       begin
  2417.         Screen.Cursor:=crHourGlass;
  2418.         TMDIChild(ActiveMDIChild).InitStatusProcess;
  2419.         TMDIChild(ActiveMDIChild).ResizeRegion(nWidth, nHeight, RESIZE_RESAMPLE); {resample the region}
  2420.         TMDIChild(ActiveMDIChild).ResetStatusProcess;
  2421.         TMDIChild(ActiveMDIChild).ZoomImage; { preserve the zoom factor }
  2422.         Screen.Cursor:=crDefault;
  2423.       end
  2424.       else
  2425.         MessageDlg('Value out of range', mtError,[mbOk], 0);
  2426.     end
  2427.     else
  2428.       MessageDlg('Value out of range', mtError,[mbOk], 0);
  2429. end;
  2430.  
  2431. procedure TMainForm.Emboss2Click(Sender: TObject);
  2432. var
  2433.    bVal : boolean;
  2434. begin
  2435.      bVal := TRUE;
  2436.      try
  2437.         {assign the bitmap for preview}
  2438.         LTDlgOCXCtl1.Bitmap := TMDIChild(ActiveMDIChild).LeadCtrl1.Bitmap;
  2439.         LTDlgOCXCtl1.UIFlags := DLG_IMG_SHOWPREVIEW;
  2440.         LTDlgOCXCtl1.GetEmboss(handle);
  2441.         {release the reference}
  2442.         LTDlgOCXCtl1.Bitmap := 0;
  2443.      except
  2444.         bVal := FALSE;
  2445.      end;
  2446.      if(bVal = TRUE) then
  2447.      begin
  2448.           Screen.Cursor:=crHourGlass;
  2449.           TMDIChild(ActiveMDIChild).InitStatusProcess;
  2450.           TMDIChild(ActiveMDIChild).LeadCtrl1.Emboss(LTDlgOCXCtl1.Direction, LTDlgOCXCtl1.Depth);  {perform the spatial filter}
  2451.           TMDIChild(ActiveMDIChild).ResetStatusProcess;
  2452.           Screen.Cursor:=crDefault;
  2453.      end;
  2454. end;
  2455.  
  2456. procedure TMainForm.ISISSelect1Click(Sender: TObject);
  2457. begin
  2458.      try
  2459.         LTIsis.ISISSelect(handle);
  2460. {        MessageDlg(LTIsis.DriverName, mtInformation,[mbOk], 0);}
  2461. {        LTISIS.ISISLoadDriver();}
  2462. {        LTISIS.ISISSetScanOptions(handle)}
  2463. {        LTISIS.ISISUnloadDriver();}
  2464.      except
  2465.            ;
  2466.      end;
  2467. end;
  2468.  
  2469. procedure TMainForm.ISISAcquire1Click(Sender: TObject);
  2470. var
  2471.   Child: TMDIChild;
  2472.   nret: smallint;
  2473. begin
  2474.   { create a new MDI child window }
  2475.   Screen.Cursor := crHourglass;
  2476.   Child := TMDIChild.Create(Application);
  2477.   Child.Caption := 'ISIS Acquired Image';
  2478.  
  2479.   LTIsis.EnableMethodErrors := false;
  2480.   nret := LTIsis.ISISLoadDriver();
  2481.   if(nret = 0) then
  2482.   Begin
  2483.      nret := LTIsis.ISISAcquire(handle, ISIS_SHOWUI);
  2484.      LTIsis.ISISUnloadDriver();
  2485.   End;
  2486.   if nret <> 0 then
  2487.      Child.Close
  2488.   else
  2489.   begin
  2490.      Child.LeadCtrl1.Bitmap := LTIsis.Bitmap;
  2491.      LTIsis.Bitmap := 0;
  2492.      Child.FormResize(Sender);
  2493.   end;
  2494.   Screen.Cursor := crDefault;
  2495. end;
  2496.  
  2497. procedure TMainForm.ISISAcquireMulti1Click(Sender: TObject);
  2498. var
  2499.    bVal : boolean;
  2500. begin
  2501.    bVal := TRUE;
  2502.    try
  2503.       MainForm.SaveDialog.FileDlgFlags := 0;
  2504.       MainForm.SaveDialog.UIFlags := DLG_FS_95STYLE + DLG_FS_MULTIPAGE;
  2505.       MainForm.SaveDialog.SaveFormatFlags := DLG_FS_TIFF;
  2506.       MainForm.SaveDialog.FileSave(handle);
  2507.    except
  2508.       bVal := FALSE;
  2509.    end;
  2510.    if (bVal = TRUE) then
  2511.    begin
  2512.       ISISDlg.ShowModal;
  2513.       if(ISISDlg.ModalResult<>mrOK) then
  2514.          bVal := FALSE;
  2515.    end;
  2516.    if(bVal = TRUE) then
  2517.       MessageDlg('Images saved to file(s)', mtInformation,[mbOk], 0);
  2518. end;
  2519.  
  2520. procedure TMainForm.File1Click(Sender: TObject);
  2521. var
  2522.    bVal : boolean;
  2523. begin
  2524.      bVal := FALSE;
  2525.      if(LTIsis.IsISISAvailable = true) then
  2526.         bVal := TRUE;
  2527.      ISISSelect1.Enabled := bVal;
  2528.      ISISAcquire1.Enabled := bVal;
  2529.      ISISAcquireMulti1.Enabled := bVal;
  2530.      ImageInfo1.Enabled:=(OpenDialog.FileName<>'');
  2531. end;
  2532.  
  2533. procedure TMainForm.WindowLevel1Click(Sender: TObject);
  2534. {This procedure uses a dialog box to AutoProcess WindowLevel}
  2535. var
  2536.    nRet, nBits : integer;
  2537.    bVal : boolean;
  2538.    uMid : integer;
  2539. begin
  2540.      bVal := TRUE;
  2541.      try
  2542.         TMDIChild(ActiveMDIChild).LeadCtrl1.GetMinMaxBits();
  2543.         TMDIChild(ActiveMDIChild).LeadCtrl1.GetMinMaxVal();
  2544.         LTDlgOCXCtl1.LowBit := TMDIChild(ActiveMDIChild).LeadCtrl1.MinBit;
  2545.         LTDlgOCXCtl1.HighBit := TMDIChild(ActiveMDIChild).LeadCtrl1.MaxBit;
  2546.         uMid := Round((TMDIChild(ActiveMDIChild).LeadCtrl1.MinVal + TMDIChild(ActiveMDIChild).LeadCtrl1.MaxVal) / 2);
  2547.         LTDlgOCXCtl1.LowLevel := Round(uMid * 9 / 10);
  2548.         LTDlgOCXCtl1.HighLevel := Round(uMid + (uMid / 10));
  2549.         LTDlgOCXCtl1.StartColor := RGB(0,0,255);
  2550.         LTDlgOCXCtl1.EndColor := RGB(0,255,0);
  2551.         {assign the bitmap for preview}
  2552.         LTDlgOCXCtl1.Bitmap := TMDIChild(ActiveMDIChild).LeadCtrl1.Bitmap;
  2553.         LTDlgOCXCtl1.UIFlags := DLG_WL_SHOWPREVIEW + DLG_WL_AUTOPROCESS;
  2554.         LTDlgOCXCtl1.GetWindowLevel(handle);
  2555.         {release the reference}
  2556.         LTDlgOCXCtl1.Bitmap := 0;
  2557.         TMDIChild(ActiveMDIChild).LeadCtrl1.ForceRepaint();
  2558.      except
  2559.         bVal := FALSE;
  2560.      end;
  2561.      if (bVal = TRUE) then
  2562.      begin
  2563.         Screen.Cursor:=crHourGlass;
  2564. //        TMDIChild(ActiveMDIChild).InitStatusProcess;
  2565. //        TMDIChild(ActiveMDIChild).LeadCtrl1.ColorRes(nBits, uPalette, uDither, 0); {call ColorRes method}
  2566. //        TMDIChild(ActiveMDIChild).ResetStatusProcess;
  2567.         Screen.Cursor:=crDefault;
  2568.      end;
  2569. end;
  2570.  
  2571. procedure TMainForm.Grayscale121Click(Sender: TObject);
  2572. begin
  2573.      Screen.Cursor:=crHourGlass;
  2574.      TMDIChild(ActiveMDIChild).InitStatusProcess;
  2575.      TMDIChild(ActiveMDIChild).LeadCtrl1.Grayscale(12);          {turn the bitmap into 12 bit Grayscale }
  2576.      TMDIChild(ActiveMDIChild).ResetStatusProcess;
  2577.      Screen.Cursor:=crDefault;
  2578. end;
  2579.  
  2580. procedure TMainForm.Grayscale161Click(Sender: TObject);
  2581. begin
  2582.      Screen.Cursor:=crHourGlass;
  2583.      TMDIChild(ActiveMDIChild).InitStatusProcess;
  2584.      TMDIChild(ActiveMDIChild).LeadCtrl1.Grayscale(16);          {turn the bitmap into 16 bit Grayscale }
  2585.      TMDIChild(ActiveMDIChild).ResetStatusProcess;
  2586.      Screen.Cursor:=crDefault;
  2587. end;
  2588.  
  2589. procedure TMainForm.Color1Click(Sender: TObject);
  2590. var
  2591.    bEnable : boolean;
  2592. begin
  2593.      bEnable := False;
  2594.      if (TMDIChild(ActiveMDIChild).LeadCtrl1.BitmapBits = 12) or
  2595.         (TMDIChild(ActiveMDIChild).LeadCtrl1.BitmapBits = 16) Then
  2596.        bEnable := True;
  2597.      if (TMDIChild(ActiveMDIChild).LeadCtrl1.IsGrayScale = GRAY_NO) Then
  2598.        bEnable := False;
  2599.  
  2600.      WindowLevel1.Enabled := bEnable;
  2601. end;
  2602.  
  2603. end.
  2604.  
  2605.