AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Komponenten freigeben - Invalid pointer operation
Thema durchsuchen
Ansicht
Themen-Optionen

Komponenten freigeben - Invalid pointer operation

Ein Thema von roth · begonnen am 12. Okt 2006 · letzter Beitrag vom 17. Okt 2006
Antwort Antwort
Seite 2 von 4     12 34      
roth

Registriert seit: 25. Nov 2005
Ort: -
72 Beiträge
 
#11

Re: Komponenten freigeben - Invalid pointer operation

  Alt 12. Okt 2006, 11:47
JA der besitzer!
Habe ihn mal geändert auf Form1.PageControl1.ActivePage weil die Boxen da drauf liegen!

das Problem beim schliessen bleibt aber trotzdem!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#12

Re: Komponenten freigeben - Invalid pointer operation

  Alt 12. Okt 2006, 11:50
OK, das haben wir also rausgefunden. Und jetzt guck dir noch mal Beitrag #4 in diesem Thread von mir an.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
roth

Registriert seit: 25. Nov 2005
Ort: -
72 Beiträge
 
#13

Re: Komponenten freigeben - Invalid pointer operation

  Alt 12. Okt 2006, 11:54
ist ja schön und gut!
möchte jetzt aber nicht erst beim beenden die komponenten freigeben, sondern auch mal wenn ich sonst auf einen button klicke weil ich dan alles reseten möchte!

Zudem kommt auch beim beenden immer noch dieser Invalid pointer operation!!!!!!!!!!!!!!!!!!!!!!!!!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#14

Re: Komponenten freigeben - Invalid pointer operation

  Alt 12. Okt 2006, 12:08
Zitat von roth:
Zudem kommt auch beim beenden immer noch dieser Invalid pointer operation!!!!!!!!!!!!!!!!!!!!!!!!!
Auch wenn du beim Beenden nichts machst?

PS: Ein Ausrufezeichen reicht.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#15

Re: Komponenten freigeben - Invalid pointer operation

  Alt 12. Okt 2006, 12:22
... und warum lässt du den Index 0 in der der 2. Dimension deines Arrays mybox1 ungenutzt?
  Mit Zitat antworten Zitat
pertzschc

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

Re: Komponenten freigeben - Invalid pointer operation

  Alt 12. Okt 2006, 12:26
Hallo Michael,

wenn ich unter einem Owner (z.B. eine Groupbox) dynamisch 5 Komponenten erstelle
(z.B. Labels) die ich mit Wegwerfnamen versehe, wie kann ich dann diese 5 Labels
wieder freigeben um sie eventuell nach einen Datenrefesh wieder ebenso neu zu erstellen?

Gruß,
Christoph
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#17

Re: Komponenten freigeben - Invalid pointer operation

  Alt 12. Okt 2006, 12:30
Zitat von pertzschc:
wenn ich unter einem Owner (z.B. eine Groupbox) dynamisch 5 Komponenten erstelle
(z.B. Labels) die ich mit Wegwerfnamen versehe, wie kann ich dann diese 5 Labels
wieder freigeben um sie eventuell nach einen Datenrefesh wieder ebenso neu zu erstellen?
Ohne die Frage zu beantworten würde ich gerne eine Gegenfrage stellen, weil es vllt. eine performantere Lösung gibt:
Warum Labels freigeben um sie dann wieder zu erzeugen? Warum nicht einfach den Labels den neuen Inhalt zuweisen? Dies könntest du sogar in deinem Akualisierungscode einbringen. Dieser müsste die Labels nur dann erzeugen, wenn er noch keine Instanzen hat. Wenn er sie erzeugt vermerkt er sie sich einfach.

Ein Label freigeben und neu erzeugen macht die Anwendung nur unnlötig langsamer. Wenn du mir den Code zeigst wo du die Labels erstellst und mit Datenbankwerten füllst (die Datenbank dinge kannste weglassen), dann könnte ich dir den Code wahrscheinlich umstellen um es nach meinem Vorschlag abzuarbeiten.
  Mit Zitat antworten Zitat
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
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#19

Re: Komponenten freigeben - Invalid pointer operation

  Alt 12. Okt 2006, 12:48
Zitat von roth:
!!!!!!!!!!!!!!!!!!!!!!!!!
Ich halte es, was mehrfache Satzzeichen angeht, eher mit Terry Pratchett...
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#20

Re: Komponenten freigeben - Invalid pointer operation

  Alt 12. Okt 2006, 12:53
Ok, da würde ich eine andere herangehensweise vorschlagen. Zum einen widerstrebt es mir grundsätzlich irgendwelche Dinge in irgendwelchen Strings abzulegen um dann nachher wieder aus einem String wieder was zu ermitteln. In deinem Falle würde ich einfach folgendes machen:

1. Eine Klasse anlegen die nix weiter hat als 2 Öffentliche Member-Variablen: Einen TButton und eine TActivity. Diese sorgt nachher für die Zuordnung
2. Eine Objektliste welche die Instanzen dieser Klasse enthält
3. Eine Funktion die immer aufgerufen wird, wenn sich irgendwas bei der Liste ändert bzw. besser: geändert hat.

Vorgehensweise:

1. Liste der Miniklasse aktualisieren
- Wenn du in der Objectlist mit der Miniklasse keine Instanz für eine Activity Instanz hast, dann eine Miniklasseninstanz erzeugen, die Activity Instanz zuweisen und der Miniklasse hinzufügen
- Wenn du in der Miniklassenliste eine Instanz einer Miniklasse hast, dessen Activity Instanz du nicht mehr in der Liste deiner Activities findest, dann den vermerkten Button freigeben und den Eintrag aus der Miniklassenliste löschen (was die Miniklasseninstanz gleich mit freigibt)

Damit hättest du alle Änderungen von der Activityliste übernommen. Einfacher wäre das ganze, wenn du in der grossen Verwaltung direkt an den beiden möglichen Punkten ansetzen kannst: Also wenn eine Activity hinzugefügt bzw. gelöscht wird. Dann kannst du dir das durchlaufen der Miniklassenliste ersparen.

Als letztes nun noch die Buttons aktualisieren. Durchlaufe die Miniklassenliste und erzeuge einen Button, wo die Instanz Nil ist. Ansonsten übernehme die Caption von der Activity (falls sie sich geändert hat) und positioniere die Buttons anhand der Position in der Miniklassenliste. Der Name der Buttons ist somit egal, da alles über die Instanzen geregelt wird.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


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 17:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz