AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Prozeduren(-pointer) von Instanzen einer Class unterscheiden
Thema durchsuchen
Ansicht
Themen-Optionen

Prozeduren(-pointer) von Instanzen einer Class unterscheiden

Ein Thema von HeinerGrimm · begonnen am 15. Nov 2004 · letzter Beitrag vom 15. Nov 2004
Antwort Antwort
HeinerGrimm

Registriert seit: 13. Sep 2004
5 Beiträge
 
#1

Prozeduren(-pointer) von Instanzen einer Class unterscheiden

  Alt 15. Nov 2004, 18:34
Hallo alle zusammen,

es geht um ein MainForm (TMainForm), mit dem beliebig viele SubForms (TSubForm) erzeugt werden können. Jedes erzeugte Subform übergibt dem unten definierten TTestObj (in einer DLL) die Prozedur Test(per AddProc). Diese wird in einer Liste (ProcList) gespeichert. Per CallProcs (nur zum Testen, später soll auf Ereignisse reagiert werden) werden alle gespeicherten Prozeduren aufgerufen. Beim Schließen eines SubForm soll per DelProc die betr. Prozedur wieder aus der Liste entfernt werden, damit es keine Zugriffsverletzung beim nächsten CallProcs gibt.

Funzt auch ganz schön, nur: In DelProc klappt offenbar die Unterscheidung zwischen den Prozeduren aus Instanzen der gleichen Klasse (hier TSubForm) nicht, so dass alle zu den existierenden TSubForm-Instanzen zeigenden Prozeduren aus der Liste gelöscht werden. Danach reagieren die verbliebenen TSubForm-Instanzen nicht mehr auf CallProcs.

Die Prozeduren anderer Instanzen (hier TMainForm) bleiben erhalten.

Die naheliegende Lösung, AddProc zu einer Funktion zu machen, die dem betr. Form eine eindeutige ID zurückgibt, die dann bei DelProc statt der prozedur übergeben wird, soll möglichst nicht verwendet werden (frage mich bitte keiner, warum, ich weiß es auch nicht).

Gibt es eine Lösung, bei der wie gehabt nur Prozeduren übergeben werden, in DelProc jedoch nur die "richtige" gelöscht wird?

Im Voraus schon mal vielen Dank für eure Tipps!

Grüße Heiner



Die DLL-Unit auszugsweise:

Delphi-Quellcode:
Type

  TProcRec = Record
    Proc: TTestProc;
  end;

  PProcRec = ^TProcRec;

  TTestObj = Class

  Private
    ProcList: TList;
    A: Integer;
  Public
    Procedure AddProc(Proc: TTestProc);
    Procedure DelProc(Proc: TTestProc);
    Procedure CallProcs;
    Constructor Create;
    Destructor Destroy; Override;
  End; // TTestObj

Var
  TestObj: TTestObj;


procedure TTestObj.AddProc(Proc: TTestProc);
Var
  ProcR: PProcRec;
begin
  New(ProcR);
  ProcR^.Proc := Proc;

  ProcList.Add(ProcR);
end;


procedure TTestObj.DelProc(Proc: TTestProc);
Var
  I: Integer;
  Pr, DelPr: TTestProc;
  PrP, DelPrP: PTestProc;
  Ptr, DelPtr: Pointer;
begin
  I := ProcList.Count - 1;

  While (I >= 0) do begin
    Pr := TProcRec(ProcList.Items[I]^).Proc;
    PrP := @Pr;
    Ptr := @PrP;
    DelPr := Proc;
    DelPrP := @DelPr;
    DelPtr := @DelPrP;
    If (Ptr = DelPtr) then begin
      ProcList.Delete(I); // Item wird entfernt.
    end;
    Dec(I);
  end;
end;


procedure TTestObj.CallProcs;
Var
  I: Integer;
  ProcR: TProcRec;
  Proc: TTestProc;
begin
  A := A + 1000000;

  For I := 0 to ProcList.Count - 1 do begin
    ProcR := TProcRec(ProcList.Items[I]^);
    Proc := ProcR.Proc;
    Proc(A + I, ProcList.Count);
  end;
end;
[edit=Christian Seehase]Delphi-Tags gesetzt. Bitte künftig selber machen. Danke. Mfg, Christian Seehase[/edit]
  Mit Zitat antworten Zitat
HeinerGrimm

Registriert seit: 13. Sep 2004
5 Beiträge
 
#2

Re: Prozeduren(-pointer) von Instanzen einer Class untersche

  Alt 15. Nov 2004, 18:38
Pardon, in einer der Prozeduren befand sich noch Müll aus einem gescheiterten Versuch. Hier die Prozedur, wie sie gedacht war:

Delphi-Quellcode:
procedure TTestObj.DelProc(Proc: TTestProc);
Var
  I: Integer;
  Pr: TTestProc;
begin
  I := ProcList.Count - 1;

  While (I >= 0) do begin
    Pr := TProcRec(ProcList.Items[I]^).Proc;
    If (Pr = Proc) then begin
      ProcList.Delete(I); // Item wird entfernt.
    end;
    Dec(I);
  end;
end;
[edit=Christian Seehase]Delphi-Tags gesetzt. BBCode aktivieren könnte hierfür nicht schaden. Mfg, Christian Seehase[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: Prozeduren(-pointer) von Instanzen einer Class untersche

  Alt 15. Nov 2004, 19:03
Willkommen in der Delphi-Praxis

Bitte Delphi-tags benutzen
Dadurch ist der Code besser lesbar
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:57 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