You've already forked lazarus-ccr
GridPrinter: Initial commit
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@8591 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
221
components/gridprinter/examples/multi-language/main.pas
Normal file
221
components/gridprinter/examples/multi-language/main.pas
Normal file
@ -0,0 +1,221 @@
|
||||
unit main;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, Grids,
|
||||
StdCtrls, ExtCtrls, ComboEx,
|
||||
LCLTranslator, Translations,
|
||||
PrintersDlgs, GridPrn, GridPrnPreviewForm, GridPrnPreviewDlg;
|
||||
|
||||
type
|
||||
|
||||
{ TMainForm }
|
||||
|
||||
TMainForm = class(TForm)
|
||||
btnPrint: TButton;
|
||||
btnPreview: TButton;
|
||||
Button2: TButton;
|
||||
ccbPreviewOptions: TCheckComboBox;
|
||||
cmbDialogs: TComboBox;
|
||||
cmbLanguages: TComboBox;
|
||||
GridPrinter1: TGridPrinter;
|
||||
GridPrintPreviewDialog1: TGridPrintPreviewDialog;
|
||||
Label1: TLabel;
|
||||
PageSetupDialog1: TPageSetupDialog;
|
||||
Panel1: TPanel;
|
||||
PrinterSetupDialog1: TPrinterSetupDialog;
|
||||
StringGrid1: TStringGrid;
|
||||
procedure btnPrintClick(Sender: TObject);
|
||||
procedure btnPreviewClick(Sender: TObject);
|
||||
procedure ccbPreviewOptionsItemChange(Sender: TObject; AIndex: Integer);
|
||||
procedure cmbLanguagesChange(Sender: TObject);
|
||||
procedure FormCreate(Sender: TObject);
|
||||
private
|
||||
FLanguagesDir: String;
|
||||
procedure PopulateLanguages;
|
||||
procedure SelectLanguage(AIndex: Integer);
|
||||
|
||||
public
|
||||
|
||||
end;
|
||||
|
||||
var
|
||||
MainForm: TMainForm;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.lfm}
|
||||
|
||||
uses
|
||||
FileUtil;
|
||||
|
||||
resourcestring
|
||||
RSNoPrinterDialog = 'No printer dialog';
|
||||
RSPageSetupDialog = 'Page-setup dialog';
|
||||
RSPrinterDialog = 'Printer dialog';
|
||||
|
||||
RSNavigationButtons = 'Navigation buttons';
|
||||
RSNavigationEdit = 'Navigation edit';
|
||||
RSZoomButtons = 'Zoom buttons';
|
||||
RSPageOrientationButtons = 'Page orientation buttons';
|
||||
RSPageMarginsButtons = 'Page margins button';
|
||||
RSHeaderFooterButton = 'Header/footer button';
|
||||
RSPrintOrderButtons = 'Print order: colums first or rows first';
|
||||
|
||||
|
||||
{ TMainForm }
|
||||
|
||||
procedure TMainForm.btnPrintClick(Sender: TObject);
|
||||
begin
|
||||
case cmbDialogs.ItemIndex of
|
||||
0: GridPrinter1.PrintDialogs := gpdNone;
|
||||
1: GridPrinter1.PrintDialogs := gpdPageSetup;
|
||||
2: GridPrinter1.PrintDialogs := gpdPrintDialog;
|
||||
end;
|
||||
GridPrinter1.Print;
|
||||
end;
|
||||
|
||||
procedure TMainForm.btnPreviewClick(Sender: TObject);
|
||||
begin
|
||||
GridPrintPreviewDialog1.Execute;
|
||||
end;
|
||||
|
||||
procedure TMainForm.ccbPreviewOptionsItemChange(Sender: TObject; AIndex: Integer);
|
||||
var
|
||||
optns: TGridPrintPreviewOptions;
|
||||
begin
|
||||
optns := [];
|
||||
if ccbPreviewOptions.Checked[0] then Include(optns, ppoNavigationBtns);
|
||||
if ccbPreviewOptions.Checked[1] then Include(optns, ppoNavigationEdit);
|
||||
if ccbPreviewOptions.Checked[2] then Include(optns, ppoZoomBtns);
|
||||
if ccbPreviewOptions.Checked[3] then Include(optns, ppoPageOrientationBtns);
|
||||
if ccbPreviewOptions.Checked[4] then Include(optns, ppoMarginsBtn);
|
||||
if ccbPreviewOptions.Checked[5] then Include(optns, ppoHeaderFooterBtn);
|
||||
if ccbPreviewOptions.Checked[6] then Include(optns, ppoPrintOrderBtns);
|
||||
GridPrintPreviewDialog1.Options := optns;
|
||||
end;
|
||||
|
||||
procedure TMainForm.cmbLanguagesChange(Sender: TObject);
|
||||
begin
|
||||
SelectLanguage(cmbLanguages.ItemIndex);
|
||||
end;
|
||||
|
||||
procedure TMainForm.FormCreate(Sender: TObject);
|
||||
const
|
||||
NUM_ROWS = 100;
|
||||
NUM_COLS = 20;
|
||||
var
|
||||
i, r, c: Integer;
|
||||
begin
|
||||
cmbDialogs.ItemIndex := 2;
|
||||
ccbPreviewOptions.ItemIndex := 0;
|
||||
for i := 0 to ccbPreviewOptions.Count-1 do
|
||||
ccbPreviewOptions.Checked[i] := true;
|
||||
|
||||
FLanguagesDir := ExpandFileName(Application.Location + '../../languages/');
|
||||
PopulateLanguages;
|
||||
SelectLanguage(cmbLanguages.ItemIndex);
|
||||
|
||||
StringGrid1.BeginUpdate;
|
||||
try
|
||||
StringGrid1.Clear;
|
||||
StringGrid1.RowCount := NUM_ROWS + StringGrid1.FixedRows;
|
||||
StringGrid1.ColCount := NUM_COLS + StringGrid1.FixedCols;
|
||||
for r := StringGrid1.FixedRows to StringGrid1.RowCount-1 do
|
||||
StringGrid1.Cells[0, r] := 'Row ' + IntToStr(r);
|
||||
for c := StringGrid1.FixedCols to StringGrid1.ColCount-1 do
|
||||
begin
|
||||
StringGrid1.Cells[c, 0] := 'Column ' + IntToStr(c);
|
||||
for r := StringGrid1.FixedRows to StringGrid1.RowCount-1 do
|
||||
StringGrid1.cells[c, r] := Format('C%d R%d', [c, r]);
|
||||
end;
|
||||
finally
|
||||
StringGrid1.EndUpdate;
|
||||
end;
|
||||
end;
|
||||
|
||||
{ Populates the languages combobox: reads the names of the app's .po files
|
||||
in the languages directory and adds the item the combobox. }
|
||||
procedure TMainForm.PopulateLanguages;
|
||||
var
|
||||
List: TStringList;
|
||||
s, lang: String;
|
||||
i, j: Integer;
|
||||
begin
|
||||
List := TStringList.Create;
|
||||
try
|
||||
FindAllFiles(List, FLanguagesDir, 'multilanguage_demo.*.po');
|
||||
for i := 0 to List.Count-1 do
|
||||
begin
|
||||
s := List[i];
|
||||
lang := '';
|
||||
for j := Length(s)-3 downto 0 do
|
||||
begin
|
||||
if s[j] = '.' then
|
||||
break;
|
||||
lang := s[j] + lang;
|
||||
end;
|
||||
case lowercase(lang) of
|
||||
'de': List[i] := 'de - Deutsch';
|
||||
'en': List[i] := 'en - English';
|
||||
end;
|
||||
end;
|
||||
List.Sort;
|
||||
cmbLanguages.Items.Assign(List);
|
||||
finally
|
||||
List.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMainForm.SelectLanguage(AIndex: Integer);
|
||||
var
|
||||
lang: String;
|
||||
i, idx1, idx2: Integer;
|
||||
begin
|
||||
idx1 := cmbDialogs.ItemIndex;
|
||||
idx2 := ccbPreviewOptions.ItemIndex;
|
||||
|
||||
// Set the default language - the LCLTranslator translates all app strings
|
||||
// as well as the LCL strings...
|
||||
if AIndex = -1 then
|
||||
begin
|
||||
lang := SetDefaultLang('', FLanguagesDir);
|
||||
for i := 0 to cmbLanguages.Items.Count-1 do
|
||||
if pos(lang + ' - ', cmbLanguages.Items[i]) = 1 then
|
||||
begin
|
||||
cmbLanguages.ItemIndex := i;
|
||||
break;
|
||||
end;
|
||||
end else
|
||||
begin
|
||||
lang := cmbLanguages.Items[AIndex];
|
||||
lang := Copy(lang, 1, pos(' - ', lang) - 1);
|
||||
SetDefaultLang(lang, FLanguagesDir);
|
||||
end;
|
||||
// ... and translate the strings of the GridPrinter package.
|
||||
TranslateUnitResourceStrings('GridPrnStrings', FLanguagesDir + 'GridPrnStrings.' + lang + '.po');
|
||||
|
||||
// The LCL Translator does not update the strings in the comboboxes.
|
||||
|
||||
// Translate the items in the printer dialogs combobox...
|
||||
cmbDialogs.Items[0] := RSNoPrinterDialog;
|
||||
cmbDialogs.Items[1] := RSPageSetupDialog;
|
||||
cmbDialogs.Items[2] := RSPrinterDialog;
|
||||
cmbDialogs.ItemIndex := idx1;
|
||||
|
||||
// ... and of the preview dialog options check combobox.
|
||||
ccbPreviewOptions.Items[0] := RSNavigationButtons;
|
||||
ccbPreviewOptions.Items[1] := RSNavigationEdit;
|
||||
ccbPreviewOptions.Items[2] := RSZoomButtons;
|
||||
ccbPreviewOptions.Items[3] := RSPageOrientationButtons;
|
||||
ccbPreviewOptions.Items[4] := RSPageMarginsButtons;
|
||||
ccbPreviewOptions.Items[5] := RSHeaderFooterButton;
|
||||
ccbPreviewOptions.Items[6] := RSPrintOrderButtons;
|
||||
ccbPreviewOptions.ItemIndex := idx2;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
Reference in New Issue
Block a user