AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Recordtyp erforderlich, oder wo liegt mein Fehler
Thema durchsuchen
Ansicht
Themen-Optionen

Recordtyp erforderlich, oder wo liegt mein Fehler

Ein Thema von schöni · begonnen am 7. Jun 2005 · letzter Beitrag vom 8. Jun 2005
Antwort Antwort
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, 21: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
7. Jun 2005, 21:29
Dieses Thema wurde von "alcaeus" von "Fragen / Anregungen zur DP" nach "Object-Pascal / Delphi-Language" verschoben.
Ist keine Frage zur DP
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: Recordtyp erforderlich, oder wo liegt mein Fehler

  Alt 8. Jun 2005, 06:21
Hallo schöni,

Delphi-Quellcode:
with FCaptions do begin
  btnOk.Caption := FCaptions.btnOk; // An dieser Zeile scheitert Delphi
  ...
end;
der Compiler macht aus deinem with Block das hier:

FCaptions.btnOK.Caption := FCaptions.btnOK; 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:

btnOk.Caption := FCaptions.btnOk; Vielleicht solltest du deine Caption nicht btnOK sondern captionOK nennen...

Grüße vom marabu
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz