Einzelnen Beitrag anzeigen

Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#1

Objectlist im Objektinspektor?!

  Alt 18. Jul 2006, 00:18
Ich schreibe mir gerade für den Eigenbedarf eine TrackBar-ähnliche Komponente, bloß mit mehreren Schiebebalken. (Das mag vielleicht schwachsinnig klingen, aber ich brauche momentan sowas )
Um diese Balken (variable Anzahl) im Objektinspektor bearbeiten zu können habe ich mir eine Klasse von TObjectlist abgeleitet.

Delphi-Quellcode:
  TSlider = class
    position: integer; // Noch etwas leer, aber wahrscheinlich kommen noch sachen dazu ;)
  end;

  TSliderList = class(TObjectList)
    private
       function getitem(idx: integer): tSlider;
       procedure setItem(idx: integer; data: tSlider);
    public
      procedure Add(data: TSlider);
      procedure Delete(idx: integer);
      property Items[idx: integer]: tslider read getitem write setitem; default;
  end;

  {...}
  
  procedure TSliderList.Add(data: TSlider);
  begin
    inherited add(data);
  end;

  procedure TSliderList.Delete(idx: integer);
  begin
    inherited delete(idx);
  end;

  procedure TSliderList.setItem(idx: integer; data: tSlider);
  begin
    inherited setitem(idx,data);
  end;

  function tSliderList.getitem(idx: integer): tSlider;
  begin
    result := inherited getitem(idx) as tslider;
  end;
Soviel zu der Liste.
das problem liegt jetzt aber irgendwo hier:

Delphi-Quellcode:
  TMultiTrackBar = class(TCustomControl)
  private
  {...}
    fsliders: TSliderList;
    function slidercount: integer;
    function getsliders: TSliderlist;
    procedure setsliders(data: TSliderList);
  {...}
  public
  {...}
  published
    { Published-Deklarationen }
    property Sliders: TSliderList read getsliders write setsliders;
  end;

  {...}

  function TMultiTrackbar.getSliders: TSliderList;
  begin
    result := fsliders;
  end;

  procedure TMultiTrackbar.setSliders(data: TSliderList);
  begin
    fsliders := data;
    paint;
  end;
Wenn ich die Komponente installiere klappt zunächst alles hervorragend, die Eigenschaft sliders wird auch angezeigt. Sobald ich diese im Objektinspektor aber markiere kommt folgende Meldung:
Zitat:
Zugriffsverletzung bei Adresse 4002701E im Modul rtl90.bpl.Lesen von Adresse 00000001 kann nicht erweitert werden.
WORAN LIEGT DAS?!?!


Hilfe

PS: Erzeugt wird die Liste auch
fsliders := TSliderlist.Create; PPS: Bitte nicht sauer sein, wenn ich erst Morgen antworte, ich geh jetzt ins Bett.
  Mit Zitat antworten Zitat