property default / stored

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Mathias
Beiträge: 6918
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

property default / stored

Beitrag von Mathias »

Bei dem default-Parameter von property blicke ich nicht durch.

Code: Alles auswählen

type
  TTest = class
  private
    Fcol: integer;
    procedure Setcol(AValue: integer);
  public
    property col: integer read Fcol write Setcol default $FF;
  end;
 
......
 
procedure TForm1.Button1Click(Sender: TObject);
var
  Test: TTest;
begin
  Test := TTest.Create;
  Color := Test.col;
  Test.Free;
end; 
Bei folgenden Versuch müsste das Fenster eigentlich rot werden, macht es aber nicht, es wird schwarz, somit ist Fcol $00. Wieso ?

Dann gibt es noch eine Parameter stored, egal ob der True oder False ist, Test.col kann verändert werden ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot


Mathias
Beiträge: 6918
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: property default / stored

Beitrag von Mathias »

Aber was ist der Sinn an default, wen man es trotzdem in den Constructor nehemen muss ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
theo
Beiträge: 10873
Registriert: Mo 11. Sep 2006, 19:01

Re: property default / stored

Beitrag von theo »

Mathias hat geschrieben:Aber was ist der Sinn an default, wen man es trotzdem in den Constructor nehemen muss ?
Steht doch da:
it just says to the streaming system which value is the default (and thus doesn't need to be saved).
Wird nicht in der *.lfm gespeichert, wenn der Wert dem default entspricht.

wp_xyz
Beiträge: 5153
Registriert: Fr 8. Apr 2011, 09:01

Re: property default / stored

Beitrag von wp_xyz »

Vielleicht soviel noch zum Hintergrund: Wenn man ein Property mit Default-Wert in der LFM-Datei speichern würde, hätte es zur Folge, dass die vorige Lazarus-Version, die das Property noch nicht kennt, das Formular nur mit Fehler öffnen würde - ein Wechsel zu einer älteren Lazarus-Version, um z.B. einen Fehler zu finden, der sich in der aktuellen Version eingeschlichen hat, wäre nur sehr umständlich möglich.

Mathias
Beiträge: 6918
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: property default / stored

Beitrag von Mathias »

Verstehe ich es jetzt richtig, das man default deklarieren kann, aber (noch) keine Wirkung hat ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
theo
Beiträge: 10873
Registriert: Mo 11. Sep 2006, 19:01

Re: property default / stored

Beitrag von theo »

Nein, das verstehst du falsch.

Beispiel: Wenn ich eine "normales" Formular erstelle, dann sieht die LFM z.B. so aus:

Code: Alles auswählen

object Form1: TForm1
  Left = 332
  Height = 240
  Top = 121
  Width = 320
  Caption = 'Form1'
  ClientHeight = 240
  ClientWidth = 320
  LCLVersion = '1.5'
Wenn ich nun z.B. WindowState ändere, dann sieht die LFM so aus:

Code: Alles auswählen

object Form1: TForm1
  Left = 332
  Height = 240
  Top = 121
  Width = 320
  Caption = 'Form1'
  ClientHeight = 240
  ClientWidth = 320
  LCLVersion = '1.5'
  WindowState = wsMaximized   
Es wird also der Wert in der LFM nur dann gespeichert, wenn er von Default abweicht.
Bei TCustomForm ist das so deklariert:

Code: Alles auswählen

    property WindowState: TWindowState read FWindowState write SetWindowState
                                       default wsNormal;  

Mathias
Beiträge: 6918
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: property default / stored

Beitrag von Mathias »

Somit macht ein default nur Sinn, wen man eine LCL-Komponente entwickelt ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
theo
Beiträge: 10873
Registriert: Mo 11. Sep 2006, 19:01

Re: property default / stored

Beitrag von theo »

Mathias hat geschrieben:Somit macht ein default nur Sinn, wen man eine LCL-Komponente entwickelt ?
Ja.

Es gibt aber noch den anderen und "älteren" Fall von default für index properties:

Siehe z.B. hier http://www.delphibasics.co.uk/RTL.asp?Name=Default

Wir haben jetzt über Version 2 gesprochen.

Antworten