Autor |
Beitrag |
Luzifer
      
Beiträge: 98
WinXP Pro/ Vista
D5 Enterprise/D7 Enterprise/D2005 Architect
|
Verfasst: Sa 30.12.06 21:03
Hi Leute
ich hab da etwas etwas seltsames vor... Und zwar möchte ich eine (vorbereitete) Istanz einer Klasse createn, die durch eine Variable festgelegt wird.
Delphi-Quelltext 1: 2: 3:
| var myarray : array of TForm; begin myarray[eineZahl]:=TForm((eineZahl)).Create(self); |
ich hoffe ihr versteht worauf ich hinaus will. Ich möchte, wenn "eineZahl" z.B. "2" ist die vorbereitete Form2 createn usw... leider funktioniert das so wie ich es oben geschrieben habe natürlich nicht... (ich habs natürlich ohne doppelte Klammern geschrieben)
thx for help
greez
|
|
Kroko
      
Beiträge: 1284
W98 W2k WXP
Turbo D
|
Verfasst: Sa 30.12.06 21:11
Da wirst Du wohl um ein case schlecht herumkommen,
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| var myarray : array of TForm; begin case eineZahl of 1: myarray[eineZahl]:=TForm1.Create(self); 2: myarray[eineZahl]:=TForm2.Create(self); end; end; |
_________________ Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
|
|
alias5000
      
Beiträge: 2145
WinXP Prof SP2, Ubuntu 9.04
C/C++(Code::Blocks, VS.NET),A51(Keil),Object Pascal(D2005PE, Turbo Delphi Explorer) C# (VS 2008 Express)
|
Verfasst: Sa 30.12.06 21:38
Je nach Benennung, möglich wäre ja theoretisch:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| var i: integer myarray: array[2..4] of TForm; begin for i 2 to 4 do begin myarray[i] := TForm('Form' + inttostr(i)).Create(Application; end; |
Kommt aber drauf an, ob sowas Sinn macht.
_________________ Programmers never die, they just GOSUB without RETURN
|
|
Kroko
      
Beiträge: 1284
W98 W2k WXP
Turbo D
|
Verfasst: Sa 30.12.06 21:44
Delphi-Quelltext 1:
| myarray[i] := TForm('Form' + inttostr(i)).Create(Application; |
einen String in Tform typecasten, das soll gehen ? Habe ich noch nie gesehen bzw. gehört!
_________________ Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
|
|
alias5000
      
Beiträge: 2145
WinXP Prof SP2, Ubuntu 9.04
C/C++(Code::Blocks, VS.NET),A51(Keil),Object Pascal(D2005PE, Turbo Delphi Explorer) C# (VS 2008 Express)
|
Verfasst: Sa 30.12.06 22:37
Iss ungetestet, aber ich hab sowas glaub schonmal gesehen.
Ansonsten darfst du meinen Info- Lehrer höchst persönlich ankreiden^^
_________________ Programmers never die, they just GOSUB without RETURN
|
|
Luzifer 
      
Beiträge: 98
WinXP Pro/ Vista
D5 Enterprise/D7 Enterprise/D2005 Architect
|
Verfasst: Sa 30.12.06 22:45
ja gut das mit dem case wird wohl funktionieren, aber leider sind das nen paar hundert......
das andere funktioniert so leider auch nicht
|
|
Bernhard Geyer
      
Beiträge: 721
Erhaltene Danke: 3
|
Verfasst: Sa 30.12.06 22:53
Und wenn Du von deinen Lehrer überraschen willst, dann wende gleich das Fabrikmuster ( de.wikipedia.org/wiki/Fabrikmuster) an.
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Sa 30.12.06 23:36
Bist du dir sicher, dass du ein paar hundert verschiedene Form-Klassen benötigst? Was ist das denn für ein Monster-Projekt mit 100 Units (vorausgesetzt, für jede Form eine Unit) 
_________________ We are, we were and will not be.
|
|
Luzifer 
      
Beiträge: 98
WinXP Pro/ Vista
D5 Enterprise/D7 Enterprise/D2005 Architect
|
Verfasst: So 31.12.06 00:24
naja sie werden ja nicht alle gleichzeitig benötigt, aber es gibt leider so viele verschiedene Möglichkeiten.... wo wir grad bei Möglichkeiten sind: Gibt es denn keine andere Lösung als die Case of Methode?
|
|
Bernhard Geyer
      
Beiträge: 721
Erhaltene Danke: 3
|
Verfasst: So 31.12.06 01:20
Luzifer hat folgendes geschrieben: | naja sie werden ja nicht alle gleichzeitig benötigt, aber es gibt leider so viele verschiedene Möglichkeiten.... wo wir grad bei Möglichkeiten sind: Gibt es denn keine andere Lösung als die Case of Methode? |
Die Frage ist aber ob dein Ansatz (mit verschiedenen Formularen) nicht falsch ist. Dazu ist es aber nötig mehr über die Aufgabe zu wissen. Evtl. ist ja ein(e) Formular(klasse) ausreichend welche über Properties konfiguriert ist ausreichend.
|
|
Luzifer 
      
Beiträge: 98
WinXP Pro/ Vista
D5 Enterprise/D7 Enterprise/D2005 Architect
|
Verfasst: Mo 01.01.07 04:30
ok ich werde das problem wohl anders lösen müssen, aber eine Frage hab ich dann doch noch (bzw eine ist noch aufgetaucht):
Delphi-Quelltext 1: 2: 3:
| var myvariab : TForm; begin myvariab:=TForm2.Create(self); |
das funktioniert
Delphi-Quelltext 1: 2: 3:
| var myarray : array of TForm; begin myarray[0]:=TForm2.Create(self); |
das nicht (Fehlermeldung: Exception der Klasse EAccessViolation mit der Meldung "Zugriffsveretzung bei....")
Wieso nicht??
|
|
Martok
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: Mo 01.01.07 04:37
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
Luzifer 
      
Beiträge: 98
WinXP Pro/ Vista
D5 Enterprise/D7 Enterprise/D2005 Architect
|
Verfasst: Mo 01.01.07 18:12
danke dir für deine Lösung! (Hätte man auch selber drauf kommen können)
Mein Prob ist noch immer das aus dem ersten Post...
|
|
Martok
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: Mo 01.01.07 18:14
Luzifer hat folgendes geschrieben: | Mein Prob ist noch immer das aus dem ersten Post... |
Schon klar. Aber wieso hast du 100 Form-Klassen? Das größte Projekt was ich kenne hat 25, grob geschätzt. Wie schonmal gesagt wurde: da kann man was dran ändern.
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
Luzifer 
      
Beiträge: 98
WinXP Pro/ Vista
D5 Enterprise/D7 Enterprise/D2005 Architect
|
Verfasst: Mo 01.01.07 21:38
naja es gäbe schon die Möglichkeit die Formen zu sparen, aber dann müsste ich andere Komponenten in ähnlicher Weise createn. (Es soll eine Art Enzyklopädie für die Bibel werden, ich mache das ehrenamtlich für die Kirche.... *Bitte keine Anspielungen auf meinen Nick*  )
Das Prob an sich würde also weiterhin bestehen. Und selbst, wenn sich das Problem mit einer anderen Methode in diesem Fall umgehen lässt, würde mich (muss ich zugeben) die Frage im allgemeinen interessieren ob sowas überhaupt geht.
|
|
alias5000
      
Beiträge: 2145
WinXP Prof SP2, Ubuntu 9.04
C/C++(Code::Blocks, VS.NET),A51(Keil),Object Pascal(D2005PE, Turbo Delphi Explorer) C# (VS 2008 Express)
|
Verfasst: Mo 01.01.07 21:48
Ja irgendwie sicher. Trotzdem was anderes. Ich ahne, was du machen willst:
du hast irgendwelche Informationsboxen, sagen wir mal z.B. Erläuterungen zu Bibeltexten. Jede Form ist eine Erläuterung, du hast dort im Formdesigner für jede Erläuterung/Form einen Text in eine Komponente (Label, Memo,...) eingegeben. D.h. du hast dann z.B. 100 ERläuterungen, also 100 Forms, in denen der Text statisch (jede Form hat einen fest zugeordneten Text) eingetragen ist.
Haut das vom Prinzip her hin, oder liege ich vollkommen abseits? Bibeltexte hab ich jetzt nur als Beispiel genommen, kann alles mögliche sein.
Sollte dies der Fall sein, könntest du doch die entsprechenden Texte (und/oder Grafiken, was auch immer du hast), als Dateien ablegen und dann einfach in eine Form laden, die für alle Erläuterungen dienen soll.
Gruß alias5000
_________________ Programmers never die, they just GOSUB without RETURN
|
|