Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Komponenten freigeben - Invalid pointer operation (https://www.delphipraxis.net/78863-komponenten-freigeben-invalid-pointer-operation.html)

pertzschc 12. Okt 2006 12:06

Re: Komponenten freigeben - Invalid pointer operation
 
Danke für den Tipp!
So werde ich das umsetzen.

Gruß,
Christoph

roth 12. Okt 2006 12:39

Re: Komponenten freigeben - Invalid pointer operation
 
ich lasse den index [0] frei damit ich bessere übersicht habe...sollte ja nichts machen oder!?

und ja der fehler kommt auch wenn ich nichts mache beim beenden!?

:wall:

Luckie 12. Okt 2006 12:44

Re: Komponenten freigeben - Invalid pointer operation
 
Dann liegt der Fehler wo anders.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  edttest: TEdit;
begin
  edtTest := TEdit.Create(self);
  edtTest.Parent := Form1;
end;
Geht wunderbar ohne Absturz beim Beenden.

roth 12. Okt 2006 12:51

Re: Komponenten freigeben - Invalid pointer operation
 
okey! trotzdem vielen dank für eure mühe!

pertzschc 17. Okt 2006 11:45

Re: Komponenten freigeben - Invalid pointer operation
 
Zitat:

Zitat von Muetze1
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.

Nun habe ich noch 2 Fragen:
- welchen (eindeutigen) Namen würdest Du den Buttons geben?
- Wie bekomme ich am einfachsten die Activity-Instanz des gedrückten Buttons heraus?

Gruß,
Christoph

Muetze1 17. Okt 2006 12:18

Re: Komponenten freigeben - Invalid pointer operation
 
Zitat:

Zitat von pertzschc
- welchen (eindeutigen) Namen würdest Du den Buttons geben?

Gar keinen. Du hast eine Liste mit allen Instanzen, daher kannst du auch immer wieder in dieser nachschauen wenn du einen brauchst bzw. ansprechen willst. Daher ist der Name Schall und Rauch.

Zitat:

Zitat von pertzschc
- Wie bekomme ich am einfachsten die Activity-Instanz des gedrückten Buttons heraus?

Sender beim Click gibt dir die Instanz des auslösenden Objektes mit, in deinem Fall also die Instanz des Buttons. Daher kannst du einfach durch deine Miniklassenliste laufen und vergleichen ob Sender = Buttoninstanz in deiner Miniklasse ist. Wenn dem so ist, dann hast du in der Miniklasse auch die Activity Instanz parat.

pertzschc 17. Okt 2006 12:55

Re: Komponenten freigeben - Invalid pointer operation
 
Zitat:

Zitat von Muetze1
Sender beim Click gibt dir die Instanz des auslösenden Objektes mit, in deinem Fall also die Instanz des Buttons. Daher kannst du einfach durch deine Miniklassenliste laufen und vergleichen ob Sender = Buttoninstanz in deiner Miniklasse ist. Wenn dem so ist, dann hast du in der Miniklasse auch die Activity Instanz parat.

Ja, okay soweit verstanden. Gib mir bitte noch eine Zeile Coding wie ich die Instanzen vergleichen kann, ich blicke es gerade nicht.

Danke,
Christoph

Muetze1 17. Okt 2006 13:01

Re: Komponenten freigeben - Invalid pointer operation
 
Delphi-Quellcode:
Procedure TFormX.ButtonXClick(Sender: TObject);
Var
  i: Integer;
  lActivity: TActivity;
Begin
  lActivity := Nil;

  For i := 0 To Pred(Miniklassenlist.Count) Do
    If ( Miniklassenliste[i] As TMiniklasse ).Button = Sender Then
    Begin
      lActivity := ( Miniklassenliste[i] As TMiniklasse ).Activity;
      Break; // Weiter brauchen wir nicht zu suchen, haben es ja gefunden
    End;

  If Assigned(lActivity) Then
    ShowMessage('Die Activity war ' + lActivity.Blubb ); // was du auch immer von den Daten der Klasse anzeigen lassen könntest...
End;

pertzschc 17. Okt 2006 13:49

Re: Komponenten freigeben - Invalid pointer operation
 
Danke!!!

Sidorion 17. Okt 2006 14:06

Re: Komponenten freigeben - Invalid pointer operation
 
Das schaut mir verdächtig nach ner ActionList aus.
Schau mal in der IDE nach, da gibt es eine Komponente namens TActionList. In diese TActionList kannst Du TActions einfügen. Diese sind sozusagen Deine Applikationsereignisse. Hier gibt es vorgefertigte, wie FileIO, aber auch die Möglichkeit, eigene Events an die Actions zu knüpfen.
Nun zu den Knöpfen. Diese haben eine Property namens Action. Falls Du eine deiner Actions in der ActionList dem Knopf zuweist, ruft dieser dann die execute-Methode dieser Action. Um die Freigabe musst Du Dich überhaupt nicht kümmern. Entweder der Knopf geht bei der Freigabe der Form flöten (vorrausgesetzt Du hast diese als Owner anggegeben) oder Du gibst ihn von Hand frei. Hier würde ich nicht empfehlen, die Knöpfe separtat nochmal zu speichern, sondern die Controls-Liste des jeweiligen Parents durchzugehen, bis der entsprechende Knopf gefunden ist und den hier freizugeben.
Die Sache mit den Actions hat folgenden Vorteil: Du kannst diese Actions auch als Menü darstellen lassen bzw. die execute-Methode direkt aus dem Programm rufen. Ausserdem bietet Delphi die Möglichkeit, die Anordnung des Menüs usw. auch vom Nutzer vornehmen zu lassen und speichert diese auf Platte.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:50 Uhr.
Seite 3 von 4     123 4      

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