AGB  ·  Datenschutz  ·  Impressum  







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

Resourcestring laden

Ein Thema von Neutral General · begonnen am 15. Mär 2008 · letzter Beitrag vom 18. Mär 2008
Antwort Antwort
Seite 3 von 3     123   
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#21

Re: Resourcestring laden

  Alt 16. Mär 2008, 15:40
Ich finde diese Lösung mit den Strings zu kompliziert. Ich würde entweder eine virtuelle Methode nehmen, die beim Erstellen aufgerufen wird, oder alle als published deklarierten Methoden durchgehen, die in der Form-Klasse definiert werden, und nach 'Create' oder Ähnlichem suchen.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#22

Re: Resourcestring laden

  Alt 16. Mär 2008, 15:52
oder kann man nicht Klassenmethoden nehmen?
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#23

Re: Resourcestring laden

  Alt 16. Mär 2008, 17:03
Hier mal ein neuer Vorschlag...

Delphi-Quellcode:
type
  TMyCustomForm = class(TForm)
  private
    FOnCreate:TNotifyEvent;
  public
    class procedure addOnCreate(EventName:string);
    constructor create(AParent: TControl); reintroduce;
  end;

implementation

var FOnCreateEventName:string;

{ TMyForm }

class procedure TMyCustomForm.addOnCreate(EventName: string);
begin
  FOnCreateEventName := EventName;
end;

constructor TMyCustomForm.create(AParent: TControl);
var _Create: TMethod;
begin
  _Create.Code := MethodAddress(FOnCreateEventName);
  _Create.Data := Self;
  if assigned(_Create.Code) then
    FOnCreate := TNotifyEvent(_Create)
  else
    FOnCreate := nil;

  if assigned(FOnCreate) then
    FOnCreate(Self);
end;
Aufruf...
Delphi-Quellcode:
type
  TMyForm = class(TMyCustomForm)
  published
    procedure FormCreate(Sender: TObject);
  end;

:

begin
  MyForm.addOnCreate('FormCreate');
  MyForm:=TMyForm.create(Self);
end;

procedure TMyForm.FormCreate(Sender: TObject);
begin
  
end;
Bei dieser Vorgehensweise könnte man die Übergabe auch über den Konstruktor machen? oder nicht, weil dann das Application.CreateForm nicht geht?

Ich wollte dir eigentlich konkreter helfen, mit deinem Quellcode. Aber ich finde hier leider nirgends mal einen zusammenhängenden Quellcode von dir und dein Demo ist nur eine EXE. Vermutlich bin ich einfach nur blind.
Naja, egal. Ich vermute mal das dir das sowieso wieder nicht gefällt.

Wir drehen uns hier sowieso im Kreis. Du willst das nicht übergeben aber irgendwo must du das definieren.
Ob nun in einer externen Datei oder direkt beim initialisieren.

Gruss
Thorsten
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#24

Re: Resourcestring laden

  Alt 16. Mär 2008, 17:53
Mir kommt gerade noch eine andere Idee: Eine Funktion schreiben, die für Form-Variablen Create-Handler registriert. Im Konstruktor wird dann geprüft, ob das Self das gleiche ist, was in einer der registrierten Variablen steht, wenn ja, dann wird der Handler aufgerufen. Das setzt aber voraus, das immer schön mit
Delphi-Quellcode:
FormVar := FormClass.NewInstance;
FormVar.Create;
gearbeitet wird, sonst ist die Variable noch nicht zugewiesen.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  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
 
#25

Re: Resourcestring laden

  Alt 16. Mär 2008, 18:09
Zitat von omata:
Hier mal ein neuer Vorschlag...

[...]

Ich wollte dir eigentlich konkreter helfen, mit deinem Quellcode. Aber ich finde hier leider nirgends mal einen zusammenhängenden Quellcode von dir und dein Demo ist nur eine EXE. Vermutlich bin ich einfach nur blind.
Naja, egal. Ich vermute mal das dir das sowieso wieder nicht gefällt.

Wir drehen uns hier sowieso im Kreis. Du willst das nicht übergeben aber irgendwo must du das definieren.
Ob nun in einer externen Datei oder direkt beim initialisieren.

Gruss
Thorsten
Hab ich dir was getan, das bei jeder deiner Antworten mit sowas ankommst? Wieso gehst du davon aus das es mir nicht gefällt? Und glaubst du mir gefällt das irgendwie aus Prinzip nicht weils von dir ist oder was? Wenn mir was nicht gefällt, dann habe ich einen anständigen Grund dazu.

Also zu deinem Vorschlag: Bei deinem ursprünglichen Vorschlag ist das Problem, das ich ein Problem bekomme, wenn es mehr als nur eine TNVCLForm-Klasse gibt (Mit unterschiedlich benannten OnCreate Methoden).

Die Idee mit dem Konstruktor hatte ich auch schon aber, tut mir Leid, auch die gefällt mir irgendwie nicht so ganz Abgesehn davon das die Forms ja durch Application.CreateForm erstellt werden und Application.CreateForm ruft ja erst den Konstruktor der Form auf. Von daher kann der "Benutzer" da auch nicht viel steuern, außer man übergibt dem Application.CreateForm diesen String. Aber mhh.. ich weiß nicht. Ich finde das irgendwie unschön.

Also ich wills nochmal betonen. Ich lehne hier keine Vorschläge aus Prinzip ab! Die bisherigen sind meiner Meinung nach einfach zu unbefriedigend.

Gruß
Neutral General

EDIT: Da kam kein roter kasten -.-

Zitat von Apollonius:
Mir kommt gerade noch eine andere Idee: Eine Funktion schreiben, die für Form-Variablen Create-Handler registriert. Im Konstruktor wird dann geprüft, ob das Self das gleiche ist, was in einer der registrierten Variablen steht, wenn ja, dann wird der Handler aufgerufen. Das setzt aber voraus, das immer schön mit
Delphi-Quellcode:
FormVar := FormClass.NewInstance;
FormVar.Create;
gearbeitet wird, sonst ist die Variable noch nicht zugewiesen.
Ich werde mir deine Idee mal durchn Kopf gehn lassen
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
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#26

Re: Resourcestring laden

  Alt 16. Mär 2008, 19:35
Zitat von Neutral General:
Hab ich dir was getan...
Nein, ich war nur etwas genervt. Ich wollte das mal mit einem konkreten Beispiel ausprobieren. Ich finde aber kein vollständiges, um es mal mit deinen Quellcode-Schnipseln testen zu können.
Wenn ich mir dann mal andere nonVCL-Beispiele ansehe, kann ich das nicht mit deinem Quellcode vereinbaren.

Du benutzt immer noch TApplication? Dafür benötigst du dann die Unit Forms diese enthält dann die Units SysUtils, Classes. Ich dachte auf diese könnte man dann verzichten und erhält somit eine kleinere EXE?
Wo liegt denn jetzt genau der Unterschied zwischen der VCL- und deiner nonVCL-Geschichte?

Ich frage deshalb, weil ich sonst den Vorschlag hätte das Application-Objekt abzuleiten und um eine eigene CreateForm-Methode zu erweitern. Aber wenn du doch alles vom Delphieditor automatisch erstellen lassen möchtest, dann geht das natürlich nicht.

Das verwirrt mich bzw. verstehe ich einfach immer noch nicht, sorry.

Gruss
Thorsten
  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
 
#27

Re: Resourcestring laden

  Alt 18. Mär 2008, 12:56
Hi,

Also omata: Application ist eine eigene Klasse Ich binde natürlich nicht die VCL-Unit Forms ein, das würde mein Projekt ja total in totale Sinnlosigkeit stürzen^^

Also ich habe die Sache jetzt gelöst.

Im TNVCLForm constructor:

Delphi-Quellcode:
begin
  Methods := GetMethods(ClassType); // Alle Methoden auflisten
  n := -1;
  for i:= 0 to High(Methods) do
    if (Methods[i].ParamCount = 1) and (Methods[i].Params[0].Typ = 'TNVCLForm') then
    begin
      // Wenn eine Methode nur ein Parameter hat und der vom Typ TNVCLForm ist
      // Sprich: die Methode ein TCreateEvent ist,
      _Create.Code := MethodAddress(Methods[i].Name);
      _Create.Data := Self;
      FOnCreate := TCreateEvent(_Create); //... dann wird sie dem OnCreate zugewiesen
      break;
    end;
Hab mir ne eigene RTTI Unit gebaut und damit + {$MethodInfo ON} funktioniert es. Also es wird die erstbeste Methode der Klasse genommen, die ein TCreateEvent ist.

Ich werde in absehbarer Zeit eine Alpha-Version meiner VCL hochladen, und dann könnt ihr sie selbst mal ausprobieren. Dann wird das ganze vielleicht (wenn auch im Nachhinein^^) klarer

Gruß
Neutral General
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
Seite 3 von 3     123   


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 06:02 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