home *** CD-ROM | disk | FTP | other *** search
/ Chip 1999 January / Chip_1999-01_cd.bin / zkuste / delphi / D1 / HSTCBO.ZIP / HSTCBO.PAS < prev   
Pascal/Delphi Source File  |  1996-01-29  |  4KB  |  147 lines

  1. unit Hstcbo;
  2.  
  3. {******************************************************************************
  4.   THistoryComboBox:
  5.   FREEWARE !
  6.   Version 1.0, Jan. 96
  7.   Author: Christian Holzner, Austria
  8.           CIS: 100553,67
  9.           Internet: cholzner@ping.at
  10.  
  11. ********************************************************************************
  12.   Reads/Writes Items of a TComboBox to an IniFile.
  13.   The reading and writing has to be initiated manually (methods: ReadIniFile,
  14.   WriteIniFile). It could also done in Create/Destroy but then I would loose
  15.   flexibility.
  16.  
  17.   If you find any bugs or enhance this component I would like to get an info.
  18. ********************************************************************************
  19.  
  20.   Added properties to TComboBox
  21.  
  22.     IniFileName:       Name of the Inifile
  23.                        If left blank, the Application.Exename with the Extension
  24.                        'INI' is used as default!
  25.     IniSection:        Section of the Inifile
  26.                        If left blank, no history maintenance is made
  27.     FMaxHistoryLength: Maxmimum allowed length of the history-items
  28.  
  29.  
  30.   Added methods
  31.  
  32.     ReadIniFile:       Reads items from inifile
  33.     WriteIniFile:      Writes items to inifile
  34. *******************************************************************************}
  35.  
  36.  
  37. interface
  38.  
  39. uses
  40.   SysUtils, {Windows,} WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  41.   Forms, Dialogs, StdCtrls, IniFiles;
  42.  
  43. type
  44.   THistoryComboBox = class(TComboBox)
  45.   private
  46.     { Private-Deklarationen }
  47.     FIniFileName: String;
  48.     FIniSection: String;
  49.     FMaxHistoryLength: Integer;
  50.   protected
  51.     { Protected-Deklarationen }
  52.   public
  53.     { Public-Deklarationen }
  54.     constructor Create(AOwner: TComponent); Override;
  55.     procedure ReadIniFile;
  56.     procedure WriteIniFile;
  57.   published
  58.     { Published-Deklarationen }
  59.     property IniFileName: String read FIniFileName write FIniFileName;
  60.     property IniSection: String read FIniSection write FIniSection;
  61.     property MaxHistoryLength: Integer read FMaxHistoryLength write FMaxHistoryLength default 7;
  62.   end;
  63.  
  64. procedure Register;
  65.  
  66. implementation
  67.  
  68.  
  69. constructor THistoryComboBox.Create(AOwner: TComponent);
  70. begin
  71.   inherited Create(AOwner);
  72.   FMaxHistoryLength := 7;
  73. end;
  74.  
  75. procedure THistoryComboBox.ReadIniFile;
  76. var
  77.   IniFile: TiniFile;
  78.   i : Integer;
  79.   Value: String;
  80. begin
  81.   if FIniSection <> '' then begin
  82.  
  83.     { If FIniFileName is empty then use Applicationname with Extension "INI" }
  84.     { as default. }
  85.     if FIniFileName = '' then
  86.       IniFile := TIniFile.Create(ChangeFileExt(Application.ExeName,'.INI'))
  87.     else
  88.       IniFile := TIniFile.Create(FIniFileName);
  89.     try
  90.       Clear;
  91.  
  92.       { Read maximum allowed entries from INI }
  93.       for i:= 0 to FMaxHistoryLength-1 do begin
  94.         Value := IniFile.ReadString(FIniSection,'H'+IntToStr(i),'');
  95.         if Value <> ''
  96.           then Items.Add(Value)
  97.           else exit;
  98.       end;
  99.  
  100.     finally
  101.       IniFile.Free;
  102.     end;
  103.   end;
  104. end;
  105.  
  106. procedure THistoryComboBox.WriteIniFile;
  107. var
  108.   IniFile: TiniFile;
  109.   i : Integer;
  110. begin
  111.   if FIniSection <> '' then begin
  112.  
  113.     { If FIniFileName is empty then use Applicationname with Extension "INI" }
  114.     { as default. }
  115.     if FIniFileName = '' then
  116.       IniFile := TIniFile.Create(ChangeFileExt(Application.ExeName,'.INI'))
  117.     else
  118.       IniFile := TIniFile.Create(FIniFileName);
  119.  
  120.     try
  121.       IniFile.EraseSection(FIniSection);
  122.  
  123.       { If not empty - Insert in first position }
  124.       if Text <> '' then Items.Insert(0,Text);
  125.  
  126.       { Check maximum numer of entries and delete any duplicate }
  127.       for i := 1 to Items.Count-1 do
  128.         if (Items[i] = Text) or (i > FMaxHistoryLength-1) then
  129.           Items.Delete(i);
  130.  
  131.       { Write to INI }
  132.       for i := 0 to Items.Count-1 do
  133.         IniFile.WriteString(FIniSection,'H'+IntToStr(i),Items[i]);
  134.  
  135.     finally
  136.       IniFile.Free;
  137.     end;
  138.   end;
  139. end;
  140.  
  141. procedure Register;
  142. begin
  143.   RegisterComponents('Samples',[THistoryComboBox]);
  144. end;
  145.  
  146. end.
  147.