Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Problem mit einer procedure (Action deklaration) (https://www.delphipraxis.net/143738-problem-mit-einer-procedure-action-deklaration.html)

AlexII 22. Nov 2009 10:42


Problem mit einer procedure (Action deklaration)
 
Hallo,

ich habe folgende procedure geschrieben:
Delphi-Quellcode:
procedure TForm1.SaveMainSettings;
var Ini: TIniFile;
    UserAppDataDir: String;
    i: Integer;
    s1,s2,s3,s4: String;
    List: TStringList;
begin

  UserAppDataDir := GetSpecialFolder(CSIDL_LOCAL_APPDATA);
  ForceDirectories(UserAppDataDir + AppDataRootDir + AppDataProjectDir);
  Ini := TIniFile.Create(UserAppDataDir + AppDataRootDir + AppDataProjectDir + '\Config-t.ini');
 try
   Ini.WriteInteger('Default', 'Channel', ComboBox1.ItemIndex);
   Ini.WriteInteger('Default', 'Volume', TrackBar1.Position);
   ......
 finally
   Ini.Free;
 end;
Action:=caFree;                <----- hier wird die Fehlermeldung ausgelöst.

//ChannelList save
 List:=TStringList.Create;
 try
    for i:=0 to ListBox1.Count-1 do
    begin
    s1:=ListBox1.Items.Strings[i];
    s2:=ListBox2.Items.Strings[i];
    s3:=ListBox3.Items.Strings[i];
    s4:=ListBox4.Items.Strings[i];
    List.Add('=' + s1 + '=' + s2 + '=' + s3 + '=' + s4 + '=');
    end;
    List.SaveToFile(UserAppDataDir + AppDataRootDir + AppDataProjectDir + '\ChannelList.ccr');
 finally
    List.Free;
 end;
end;
aber irgendwie funktioniert sie nicht so richtig, bekomme folgende Fehlermeldung:

Zitat:

[Fehler] Unit1.pas(1150): Inkompatible Typen: 'TBasicAction' und 'TCloseAction'
Wer kann mir hier weiter helfen?

mkinzler 22. Nov 2009 10:50

Re: Problem mit einer procedure
 
Was hast du den vor?

Luckie 22. Nov 2009 10:51

Re: Problem mit einer procedure
 
Du bist nun schon so lange dabei und solltest wissen, was ein aussagekräftiger Titel ist. :?

Interessant wäre auch wohl die Deklaration von Action.

AlexII 22. Nov 2009 10:52

Re: Problem mit einer procedure
 
Einstellungen speichern... Wenn man eine Einstellungen vorgenommen hat, rufe ich diese Funktion auf und speichere die jeweilige Einstellung.

AlexII 22. Nov 2009 10:53

Re: Problem mit einer procedure
 
Zitat:

Zitat von Luckie
Du bist nun schon so lange dabei und solltest wissen, was ein aussagekräftiger Titel ist. :?

Hab überlegt wie ich den nennen soll, ehrlich.... konnte mir nix besseres ausdenken. :gruebel:

AlexII 22. Nov 2009 10:56

Re: Problem mit einer procedure
 
Zitat:

Zitat von Luckie
Interessant wäre auch wohl die Deklaration von Action.

Von welchem Typ ist den die Variable Action? :gruebel:

mkinzler 22. Nov 2009 11:00

Re: Problem mit einer procedure (Action deklaration)
 
Das solltest doch du wissen.

AlexII 22. Nov 2009 11:02

Re: Problem mit einer procedure (Action deklaration)
 
Dann hätte ich nicht gefragt, oder? :roteyes:

Matze 22. Nov 2009 11:05

Re: Problem mit einer procedure (Action deklaration)
 
Du nutzt die Variable doch, also musst du wissen, was du da machst bzw. zusammen kopierst (?).

Ist es vielleicht TForm.Action?

AlexII 22. Nov 2009 11:12

Re: Problem mit einer procedure (Action deklaration)
 
Mir wurde gesagt halt, setze es da rein. Aber eigentlich kann ich doch die Action ganz löschen, oder? :gruebel:

AlexII 22. Nov 2009 11:21

Re: Problem mit einer procedure (Action deklaration)
 
Ich glaube hab das jetzt gelöst... Action:=caFree; bleibt in OnClose Ereignis, wo es auch hingehört und nicht in meiner procedure.

DeddyH 22. Nov 2009 11:42

Re: Problem mit einer procedure (Action deklaration)
 
Aber verstanden hast Du es immer noch nicht, richtig?

AlexII 22. Nov 2009 11:52

Re: Problem mit einer procedure (Action deklaration)
 
Ne nicht ganz... na ja vllt irgendwann.

DeddyH 22. Nov 2009 11:55

Re: Problem mit einer procedure (Action deklaration)
 
Im OnClose wird Dir Action als TCloseAction übergeben. In Deinem Code nicht (es ist ja nicht das OnClose-Ereignis), daher wird auf TForm.Action zugegriffen, das es ja auch automatisch als Property gibt. Dieses ist aber vom TYp TBasicAction, daher die Fehlermeldung. Wenn es diese Property nicht gäbe, hättest Du eine Fehlermeldung bekommen "Undefinierter Bezeichner: Action", dann wäre das Problem gar nicht erst aufgekommen.

[edit] Vielleicht etwas ausführlicher: das OnClose sähe ja so aus
Delphi-Quellcode:
procedure TDeinForm.FormClose(Sender: TObject; var Action: TCloseAction);
Wenn Du nun Action etwas zuweisen willst, wird der Parameter Action (also TCloseAction) herangezogen, wo caFree als Wert in Ordnung geht. In Deiner aufrufenden Methode gibt es diesen Parameter nicht, Action ist auch nicht als lokale Variable deklariert, also versucht Delphi, Action irgendwie aufzulösen und wird bei TForm fündig, welches eine Property Action besitzt. Diese Property ist aber nicht vom Typ TCloseAction, sondern vom Typ TBasicAction, was etwas ganz anderes ist. Hier ist eine Zuweisung von caFree nicht möglich, deshalb gibt Delphi eine Fehlermeldung aus. [/edit]

AlexII 22. Nov 2009 11:59

Re: Problem mit einer procedure (Action deklaration)
 
U juh juhii.... :roteyes: Aber hab soweit verstanden. Thx.. :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:48 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