![]() |
Recordtyp erforderlich, oder wo liegt mein Fehler
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:
In der EdUnit, die das Formular der IDE enthält, steht dann folgendes:
type
TApplicationLanguage = ( app_lang_english, app_lang_german //Hier sollen später weitere Sprachen folgen ); const app_lang_eng = 0; app_lang_ger = 1;
Delphi-Quellcode:
So, deshalb also der ganze Aufwand.
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; 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 |
DP-Maintenance
Dieses Thema wurde von "alcaeus" von "Fragen / Anregungen zur DP" nach "Object-Pascal / Delphi-Language" verschoben.
Ist keine Frage zur DP |
Re: Recordtyp erforderlich, oder wo liegt mein Fehler
Hallo schöni,
Delphi-Quellcode:
der Compiler macht aus deinem with Block das hier:
with FCaptions do begin
btnOk.Caption := FCaptions.btnOk; // An dieser Zeile scheitert Delphi ... end;
Delphi-Quellcode:
Also ich weiss schon was du da machen willst, aber durch die Namensüberdeckung im with-block verlierst du etwas den Überblick. Der Compiler würde dich so eher verstehen:
FCaptions.btnOK.Caption := FCaptions.btnOK;
Delphi-Quellcode:
Vielleicht solltest du deine Caption nicht btnOK sondern captionOK nennen...
btnOk.Caption := FCaptions.btnOk;
Grüße vom marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz