Delphi for Linux?

Tips:

Incremental  Search

procedure TForm1.Edit1Change(Sender: TObject); 
begin 
  With Edit1 do 
    if Text <> '' then 
      Query1.Locate('code',Edit1.Text,[loPartialKey]); 
end; 

To filter and sort a table in Delphi 1.0 you can use a QBE (Query by Example) file as the TableName TTable's property. This is useful to filter, sort or join tables, while still using the TTable component. QBE files can be created in Database Desktop.

To pack (remove phisically all deleted records) from a Paradox table you must use this code

procedure ParadoxPack(Table : TTable); 
var 
  TBDesc : CRTblDesc; 
  hDb: hDbiDb; 
  TablePath: array[0..dbiMaxPathLen] of char; 
begin 
  FillChar(TBDesc,Sizeof(TBDesc),0); 
  with TBDesc do begin 
    StrPCopy(szTblName,Table.TableName); 
    StrPCopy(szTblType,szParadox); 
    bPack := True; 
  end; 
  hDb := nil; 
  Check(DbiGetDirectory(Table.DBHandle, True, TablePath)); 
  Table.Close; 
  Check(DbiOpenDatabase(nil, 'STANDARD', dbiReadWrite, 
    dbiOpenExcl,nil,0, nil, nil, hDb)); 
  Check(DbiSetDirectory(hDb, TablePath)); 
  Check(DBIDoRestructure(hDb,1,@TBDesc,nil,nil,nil,False)); 
  Table.Open; 
end; 


To pack Dbase tables use this command


  DBIPackTable(Table1.DBHandle,Table1.Handle,nil,nil,True); 

Saving and loading a TDBGrids user settings:



procedure TMainForm.NewIni(const NomeIni: string);
var F: System.Text;
    i: Byte;
begin
  System.Assign(F, NomeIni);
  System.ReWrite(F);
  System.WriteLn(F, '[Campi_Ordine]');
  for i:=1 to Table1.FieldCount do
    System.WriteLn(F, 'Campo',i,'=',Table1.Fields[i-1].FieldName);
  System.WriteLn(F, '');
  System.WriteLn(F, '[Campi_Size]');
  for i:=1 to Table1.FieldCount do
    System.WriteLn(F, 'Campo',i,'=',Table1.Fields[i-1].DisplayWidth);
  System.Close(F);
end;

procedure TMainForm.SaveIni(const FN: String);
var Ini: TIniFile;
    i: Integer;
begin
  NewIni(FN);
  Ini := TIniFile.Create(FN);
  with Ini do
  begin
    for i:=1 to Table1.FieldCount do
    begin
      S:= Table1.Fields[i-1].FieldName;
      WriteString('Campi_Ordine', 'Campo'+IntToStr(i), 
        Table1.Fields[i-1].FieldName);
      WriteInteger('Campi_Size', 'Campo'+IntToStr(i),
        Table1.Fields[i-1].DisplayWidth);
    end;
  end;
  Ini.Free;
end;

procedure TMainForm.LoadIni(const FN: String);
var Ini: TIniFile;
    i: Integer;
    j: Longint;
    S: String;

    function MyReadInteger(const Section, Ident: string): Longint;
    begin
      result := Ini.ReadInteger(Section, Ident, -1);
      if result=-1 then
        raise Exception.Create('Errore nel file di configurazione.');
    end;

    function MyReadString(const Section, Ident: string): String;
    begin
      result := Ini.ReadString(Section, Ident, '');
      if result='' then
        raise Exception.Create('Errore nel file di configurazione.');
    end;

begin
  Ini := TIniFile.Create(FN);
  try
    with Ini do
    begin
      for i:=1 to Table1.FieldCount do
      begin
        S:= MyReadString('Campi_Ordine', 'Campo'+IntToStr(i));
        j:= MyReadInteger('Campi_Size', 'Campo'+IntToStr(i));
        Table1.FieldByName(S).Index := i-1;
        Table1.FieldByName(S).DisplayWidth := j;
      end;
    end;
  finally
    Ini.Free;
  end;
end;

Saving a TStrings component into an INI file

unit IniStr;
{Written by Ed Jordan}
interface

uses Classes;

type
TIniStringlist = class( TStringList )
public
  procedure LoadFromIni( const FileName, Section: string);
  procedure SaveToIni( const FileName, Section: string);
end;

implementation

uses IniFiles, SysUtils;

procedure TIniStringList.LoadFromIni( const FileName,Section: string);
var
  Index: Integer;
  Line: string;
begin
  with TIniFile.Create( FileName ) do
  try
    ReadSectionValues( Section, Self);
    for Index:= 0 to Count - 1 do
    begin
      { Remove the identifier name ...}
      Line:= Values[ IntToStr( Index ) ];
      { Delete the tilde ... }
      System.Delete( Line, 1, 1);
      Strings[ Index ]:= Line;
    end;
  finally
    Free;
  end;
end;

procedure TIniStringList.SaveToIni( const FileName, Section: string);
var
  Index: Integer;
  Line: string;
begin
  with TIniFile.Create( FileName ) do
  try
    EraseSection( Section );
    for Index:= 0 to Count - 1 do
    begin
      { Preserve leading white space, blank lines ...}
      Line:= '~' + Strings[ Index ];
      WriteString( Section, IntToStr( Index ), Line);
    end;
  finally
    Free;
  end;
end;

end.


Usage:

var
  L: TIniStringList;
begin
  L:= TIniStringList.Create;
  L.LoadFromIni('MyFile.Ini', 'Alati');
  {process L..}
  L.Free;
end

See also:

Code: