Einzelnen Beitrag anzeigen

pertzschc

Registriert seit: 29. Jul 2005
Ort: Leipzig
309 Beiträge
 
Delphi 12 Athens
 
#18

Re: Komponenten freigeben - Invalid pointer operation

  Alt 12. Okt 2006, 12:40
Zitat von Muetze1:
Ohne die Frage zu beantworten würde ich gerne eine Gegenfrage stellen, weil es vllt. eine performantere Lösung gibt:
Danke für Deine Antwort.

Das mit den Labels war beispielhaft gemeint. Mein Programm macht etwas anderes: Ich habe eine Liste von Objekten deren Id eine Guid ist. Initial erzeuge ich aus der Liste mehrere Buttons innerhalb einer Groupbox, in den Namen des Buttons arbeite ich die Guid ein und der Button zeigt einen Namen (Str) des Objektes an. Wenn ein Button gedrückt wird, soll eine bestimmte Aktion ausgelöst werden, zu der es aber notwendig ist, das inhaltlich zum Button gehörende Objekte zu wissen (löse ich über den Buttonnamen anhand der Guid).

Hier mal der Code zu Erzeugen der Buttons:
Delphi-Quellcode:
procedure TMainForm.Create_Selection_Buttons;
var
 _Button: TButton;
  i, ypos, xpos: integer;
  _Activity:TActivity;
begin
  ypos := 15;
  xpos := 10;
  for i := 0 to self.fObjManager.ActivityList.Count-1 do begin
    _Activity:=TActivity(self.fObjManager.ActivityList.Objects[i]);
    // neuer button
    _Button:=TButton.Create(Self);
    with _Button do begin
      Parent:=MainForm.gbActivitySelection;
      Caption:=_Activity.Name;
      Left:=xpos;
      Top:=ypos;
      Width:= MainForm.gbActivitySelection.Width - xpos - xpos;
      Name:=_Activity.GUID_ComponentName;
      OnClick:=Selection_Buttons_Click;
    end;
    ypos := ypos + _Button.Height + 5;
  end;
end;
und hier die Click-Behandlung:

Delphi-Quellcode:
procedure TMainForm.Selection_Buttons_Click(Sender: TObject);
var
  guid, name: string;
  _Activity: TActivity;
  pos: integer;
begin
  if Sender is TButton then begin
    name:=TButton(Sender).Caption;
    guid:=Get_GuidStr_From_ComponentName(TButton(Sender).Name);
    pos:=self.fObjManager.ActivityList.IndexOf(guid);
    _Activity:=TActivity(self.fObjManager.ActivityList.Objects[pos]);
    self.fObjManager.CurrentActivity := _Activity;
  end;
end;
Mein Problem besteht nun darin, das die Objektliste sich zur Laufzeit verändern kann, d.h. neue Objekte hinzukommen oder gelöscht werden. Wie kann ich dann die Buttons entsprechend neu aufbauen.

Gruß,
Christoph
  Mit Zitat antworten Zitat