Thema: Delphi Type-Problem

Einzelnen Beitrag anzeigen

Timelesk

Registriert seit: 24. Jul 2004
72 Beiträge
 
#15

Re: Type-Problem

  Alt 17. Nov 2006, 16:52
Hallo Hagen,

danke für deine Antwort.

Zitat von negaH:
1.) direkte Auswertung in den Getter/Setter Methoden der übergebenen Parameter. Das ist das was du in deiner .SetParam() Methode mit Label1.Caption := Data; gemacht hast. Du wertest den Parameter Index/Name garnicht selektiv aus.
Hier habe ich der property "test" die Caption von Button1 zugewiesen, also doch Weg 2 mit Properties gewählt.

Hier mal meine beiden Funktionen:
Delphi-Quellcode:
{Lade übergebene Variable}
function TModulForm.GetParam(const Name: String): Variant;
begin
  Result := TypInfo.GetVariantProp(Self, Name);
end;

{Setze zu übergebende Variable}
procedure TModulForm.SetParam(const Name: String;const Data: Variant);
begin
  TypInfo.SetVariantProp(Self, Name, Data);
end;
Zitat von negaH:
DU hast also in deine Methode .GetParam() die Methode 2. gewählt ohne jedoch eine Property "Test" zu deklarieren. Im Setter .SetParam() wählst du Methode 1. und damit mischt du zwei grunverschiedene Implementierungswege. Die übrigens nur ein Vorschlag meinerseits waren.
Ich habe gemerkt, dass ich die Property "test" wirklich nicht gesetzt hatte.
Nun funktioniert das soweit mit Zahlen und Boolschen Properties.
Aber bei Strings gibt mir Delphi beim Beenden des Programmes eine Zugriffsverletzung aus.

1. In der MainForm (Anker-Unit) rufe ich nach dem erstellen des Formulars des Moduls diesen Code auf: modul1.SetParam('VarString', 'Stringübergabe');
2. Im Modul ist das ganze so deklariert:
Delphi-Quellcode:
  TModulForm1 = class(TModulForm)
  protected
    function GetParam(const Name: String): Variant; override;
    procedure SetParam(const Name: String;const Data: Variant); override;
  private
    //Deklarierung der Parameter für GetParam und SetParam
    FVarString : String;
  published
    //Deklarierung der Parameter für GetParam und SetParam

    property VarString : String read FVarString write FVarString;
  end;

{...}

function TModulForm1.GetParam(const Name: String): Variant;
begin
  Result := inherited GetParam(Name);
end;

procedure TModulForm1.SetParam(const Name: String;const Data: Variant);
begin
  // da wir das schon in der Basisklasse getan haben also einfach
  inherited SetParam(Name, Data);
end;

{...}

//Aufruf erfolgt per Button in ein Label
bfAusgabe.Caption := GetParam('VarString');
Ich sehe dort keinen Fehler und trotzdem kommt eine EAccessViolation in module rtl100.bpl
Kommt aber nur, sofern ich SetParam ausgeführt habe! Wenn ich nur GetParam ausführe und das Programm beende, kommt keine Fehlermeldung.


Desweiteren bin ich noch am tüfteln, wie ich z.B. per Button im Modul die Caption des Moduls ändere.
Man könnte Caption := 'Neuer Modultitel'; schreiben, aber wie kann ich das über den Modulnamen + Caption machen (in Form von Modulname.Caption) ?


Vielen Dank für die Hilfe

gruß
Timelesk
  Mit Zitat antworten Zitat