Hallo Delphi Experten!
Die folgende
Unit soll im Rahmen eines Freeware-
IDE-Projektes einen Dialog bereitstellen, der eine Eingabezeile enthält, in die ich bei
Exception oder Laufzeitfehler die Fehleradresse eingebe und den Compiler/Debugger anschließend danach suchen lasse.
Der Dialog soll mehrsprachig ausgelegt werden. Das löse ich auf die folgende Weise. Aktuell sind nur die beiden Sprachen Deutsch und Englisch definiert. Da das ganze eh Open Source werden soll, reichen diese beiden Sprachen auch vorerst. Zunächst soll die Funktionalität realisiert werden.
Mein Problem:
In Zeile 86 -> btnOk.Caption ... geht es nicht weiter.
Ich definiere für jede Sprache Konstanten, die ich einem Record FCaptions zuweise, der im Formular (siehe unten) definiert ist. Ob die deutschen oder die englischen Konstanten zugewiesen werden, hängt von einem Integerwert ab:
0: Englisch
1: Deutsch
2: ...
In der
Unit mit dem Hauptformular des Projektes definiere ich zudem folgendes:
Delphi-Quellcode:
type
TApplicationLanguage = (
app_lang_english,
app_lang_german //Hier sollen später weitere Sprachen folgen
);
const
app_lang_eng = 0;
app_lang_ger = 1;
In der EdUnit, die das Formular der
IDE enthält, steht dann folgendes:
Delphi-Quellcode:
procedure TpedForm.Laufzeitfehler1Click(Sender: TObject);
begin
RunTimeErrorDlg := TRunTimeErrorDlg.Create(self);
RuntimeErrorDlg.Language := Integer(app_lang_german); // oder ... := app_lang_ger;
RunTimeErrorDlg.ShowModal;
if RunTimeErrorDlg.ModalResult = mrOk then
begin
// Hierhin kommt dann die Suchroutine
end;
end;
So, deshalb also der ganze Aufwand.
Nun zu der
Unit, die den Fehler enthält:
Delphi-Quellcode:
unit ExceptnDlg;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, ExtCtrls;
const
Title_eng = '
exception / run time error';
ErrAdr_eng = '
Error-addr:';
btnOk_eng = '
&Search...';
btnCancel_eng = '
Cancel';
btnHelp_eng = '
Help';
cbxDbg_eng = '
Enable debugger';
Title_ger = '
Exception / Laufzeitfehler...';
ErrAdr_ger = '
Fehleradresse:';
btnOk_ger = '
&Suchen...';
btnCancel_ger = '
A$bbrechen';
btnHelp_ger = '
$Hilfe';
cbxDbg_ger = '
Debugger aktivieren';
type
TRuntimeErrorDlgCaptions =
record
Title:
String;
ErrAdr:
String;
btnOk:
String;
btnCancel:
String;
btnHelp:
String;
cbxDbg:
String;
end;
type
TRuntimeErrorDlg =
class(TForm)
edErrorAdr: TEdit;
lblErrAdr: TLabel;
btnOk: TBitBtn;
btnCancel: TBitBtn;
btnHelp: TBitBtn;
cbxDbg: TCheckBox;
private
{ Private-Deklarationen }
FCaptions: TRuntimeErrorDlgCaptions;
FLanguage: Integer;
procedure SetLanguage(value: Integer);
public
{ Public-Deklarationen }
property Language: Integer
read FLanguage
write SetLanguage;
end;
var
RuntimeErrorDlg: TRuntimeErrorDlg;
implementation
{$R *.DFM}
procedure TRuntimeErrorDlg.SetLanguage(value: Integer);
begin
case Language
of
0:
{ english }
with FCaptions
do begin
Title := Title_eng;
ErrAdr := ErrAdr_eng;
btnOk := btnOk_eng;
btnCancel := btnCancel_eng;
btnHelp := btnHelp_eng;
cbxDbg := cbxDbg_eng;
end;
1:
{ german }
with FCaptions
do begin
Title := Title_ger;
ErrAdr := ErrAdr_ger;
btnOk := btnOk_ger;
btnCancel := btnCancel_ger;
btnHelp := btnHelp_ger;
cbxDbg := cbxDbg_ger;
end;
end;
with FCaptions
do
begin
Caption := Title;
lblErrAdr.Caption := ErrAdr;
btnOk.Caption := FCaptions.btnOk;
//An dieser Zeile scheitert Delphi
btnCancel.Caption := btnCancel;
// "
btnHelp.Caption := btnHelp;
// "
cbxDbg.Caption := cbxDbg;
// "
end;
end;
end.
Bin ich denn blind? Wo liegt der Fehler? Ich kann nix falsches entdecken.
Wer kann helfen. Vier Augen sehen ja vielleicht mehr als meine zwei alleine.
schöni
Damit der Topf nicht explodiert, lässt man es ab und zu mal zischen.