Einzelnen Beitrag anzeigen

schöni

Registriert seit: 23. Jan 2005
Ort: Dresden
445 Beiträge
 
Delphi 7 Personal
 
#1

Recordtyp erforderlich, oder wo liegt mein Fehler

  Alt 7. Jun 2005, 22:23
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.
  Mit Zitat antworten Zitat