AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

JvInspector: "Enum-Item" hinzufügen

Ein Thema von Basic-Master · begonnen am 14. Aug 2005 · letzter Beitrag vom 14. Aug 2005
 
jbg

Registriert seit: 12. Jun 2002
3.485 Beiträge
 
Delphi 10.1 Berlin Professional
 
#7

Re: JvInspector: "Enum-Item" hinzufügen

  Alt 14. Aug 2005, 22:10
Zitat von Basic-Master:
Was mache ich falsch?
Du übergibst immer die selbe Variable (FMyList).
Du baust dir da nämlich lauter Speicherlecks.

Die TSelectionTextList-en solltest du in einer TObjectList verwalten. Und deinen String von oben auch irgendwo verwalten.

Delphi-Quellcode:
uses
  Contnrs;

type
  TJviCodeItems = class(TForm)
  private
    FItems: TObjectList;
    jviCode: TJvInspector;
  public
    constructor Create(AInspector: TJvInspector);
    destructor Destroy; override;

    procedure Clear;

    function AddCombo(eName, eCategory, eValue: String; eValues: array of string): TJvCustomInspectorItem;
    function Add...
  end;

  TStringWrapper = class(TObject)
  public
    Value: string;
    constructor Create(const AValue: string);
  end;

implementation

{ TJviCodeItems }

constructor TJviCodeItems.Create(AInspector: TJvInspector);
begin
  inherited Create;
  jviCode := AInspector;
  FItems := TObjectList.Create;
end;

destructor TJviCodeItems.Destroy;
begin
  Clear;
  FItems.Free; // alle Items freigeben
  inherited Destroy;
end;

procedure TJciCodeItems.Clear;
begin
  jviCode.Clear; // damit die Zeiger nicht ins leere zeigen
  FItems.Clear;
end;

function TJviCodeItems.AddField(eName, eCategory, eValue: String): TJvCustomInspectorItem;
var
  i: integer;
  eParent: TJvCustomInspectorItem;
  Item: TStringWrapper;
begin
  eParent := nil;
  for i := 0 to jviCode.Root.Count -1 do
  begin
    if (jviCode.Root.Items[i].DisplayName = eCategory) and (jviCode.Root.Items[i] is TJvInspectorCustomCategoryItem) then
    begin
      eParent := jviCode.Root.Items[i];
      Break; // nicht unnötig Rechenzeit verschleudern
    end;
  end;
  if eParent = nil then
  begin
    eParent := TJvInspectorCustomCategoryItem.Create(jviCode.Root, nil);
    eParent.DisplayName := eCategory;
  end;

  if eName <> 'then
  begin
    Item := TStringWrapper.Create(eValue); // StringWrapper erzeugen, damit der String erhalten bleibt
    FItems.Add(Item); // und das Item in die Liste eintragen, damit kein Speicherleck entsteht
    Result := TJvInspectorVarData.New(eParent, eName, TypeInfo(String), @Item.Value);
    jviCode.Root.Sort;
    eParent.Expanded := True;
  end
  else
  begin
    Result := nil;
    jviCode.Root.Sort;
  end;
end;

... // für das TSelectionTextList braucht man keinen Wrapper, weil es bereits ein Objekt ist.

{ TStringWrapper }

constructor TStringWrapper.Create(const AValue: string);
begin
  inherited Create;
  FValue := AValue;
end;
  Mit Zitat antworten Zitat
 


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 00:44 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