AGB  ·  Datenschutz  ·  Impressum  







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

Procedure Problem

Ein Thema von Neutral General · begonnen am 4. Aug 2006 · letzter Beitrag vom 4. Aug 2006
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Neutral General
Neutral General

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

Re: Procedure Problem

  Alt 4. Aug 2006, 20:45
Delphi-Quellcode:
 Proc = procedure;

 TGenericList = class(TObjectList)
  private
   FType: TClass;
   FAdd: Proc;
  public
   property AddObj: Proc read FAdd;
   constructor Create(ObjType: TClass);
 end;

 TProcedures = class
  published
   procedure AddTLabel(ALabel: TLabel);
   procedure AddTButton(AButton: TButton);
 end;

procedure TProcedures.AddTLabel(ALabel: TLabel);
begin
  ShowMessage('AddTLabel!');
end;

procedure TProcedures.AddTButton(AButton: TButton);
begin
   ShowMessage('AddTButton!');
end;

constructor TGenericList.Create(ObjType: TClass);
begin
  FType := ObjType;
  FAdd := TProcedures.MethodAddress('Add' + ObjType.ClassName);
end;
Das geht soweit ja aber ich will halt wenn ich AddObj aufrufe die Parameter sehn die die Procedure hat und dann halt so das ich wenn ich

TGenericList.Create(TLabel) aufrufe auch nur Labels hinzufügen kann in meine liste...

also das dann wenn man AGenericList. schreibt das Menü aufploppt und man halt nur die Procedure AddObj(ALabel: TLabel) zur Auswahl hat.. wenn bei im OnCreate TButton angegeben hat dann halt AddObj(AButton: TButton)
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
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#12

Re: Procedure Problem

  Alt 4. Aug 2006, 21:41
Hmm... ja, das wirst du nur mit templates schaffen. Hab mich da übrigens heute schon sehr intensiv damit beschäftgigt und auch über das nachgedacht, was du gerade versuchst.

Das einzige was da noch "sauber" möglich ist, ist eine Abfrage im Add:

if (item is FType) then
FList.Add()
else
raise EDingsbums.Create('falsche klasse');

dagegen sollte es eigentlcih möglcih sein... hmm... nee... mehr geht nicht. Wie bereits gesagt, templates. Codelib -> typisierte liste
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#13

Re: Procedure Problem

  Alt 4. Aug 2006, 22:25
Das geht schon mit Delphi

Delphi-Quellcode:

procedure A(const Params: array of const);
begin
end;

// Aufruf dann

begin
  A([1]);
  A([1, 'String', #32, nil, TMyObject.Create]);
end;
Gruß Hagen
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#14

Re: Procedure Problem

  Alt 4. Aug 2006, 22:30
wow... tatsächlich... daran hab ich gar nicht gedacht.

Allerdings hilft das beim konkreten problem nicht weiter, man kann eine runtime-typenentscheidung nicht designtime-typesicher machen...
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#15

Re: Procedure Problem

  Alt 4. Aug 2006, 22:32
Zitat:
man kann eine runtime-typenentscheidung nicht designtime-typesicher machen...

DAS, musst du mir nochmal in anderen Worten hin schreiben, ansonsten kapiere ich nicht was du damit meinst

Gruß Hagen
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#16

Re: Procedure Problem

  Alt 4. Aug 2006, 22:34
Übrigens geht auch

Delphi-Quellcode:
procedure A(const Params: array of Variant);
begin
end;
Gruß Hagen
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#17

Re: Procedure Problem

  Alt 4. Aug 2006, 22:49
Ähm.. ich habe das gefühl, NeutralGeneral will eine typensichere Liste machen. Mit voller IDE-Unterstützung, so dass der Compiler schon meckert wenn man den falschen Typ in die Liste wirft. Allerdings soll dieser Typ eben über FType: TClass determiniert werden - zur Laufzeit.

Und das - designtime-typsicherheit, wenn der typ zur runtime gesichert wird - geht wohl nicht.

Was ist denn der Unterschied zwischen array of const und array of variant?
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#18

Re: Procedure Problem

  Alt 4. Aug 2006, 22:57
Der Unterschied definiert sich aus der unterschiedlichen Deklaration eines Array Types. Einmal ein array of const, was nichts anderes ist als ein array of TVarRec -> TVarRec in System.pas nachschauen, und eben dem Typen Variant.

Gruß Hagen
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#19

Re: Procedure Problem

  Alt 4. Aug 2006, 23:00
Zitat:
Ähm.. ich habe das gefühl, NeutralGeneral will eine typensichere Liste machen. Mit voller IDE-Unterstützung, so dass der Compiler schon meckert wenn man den falschen Typ in die Liste wirft. Allerdings soll dieser Typ eben über FType: TClass determiniert werden - zur Laufzeit.

Das nenne ich Datenbank-Komponnete. Verschiedene Klassen vom Basistyp TField definieren die Datenschnittstelle samt Typen für einen Record in der Datenbank. Die Datenbank selber steht in einer TTabel/TQuery und enthält eine Liste von Typsicheren TField's.
Die Datenbank ist unser Listen-Objekt das die Daten Typensicher ausnehmen kann.

Per IDE zur Designzeit kann man einerseits diese TTable/TQuery/TDataSet frei definieren und dann zusäzlich noch gleich mit Daten füllen.


Gruß Hagen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 04:45 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