![]() |
beliebig viele forms zur Laufzeit erstellen
Hallo zusammen,
ich bin grtade dabei ein Programm zu schreiben bei dem ich beliebig viele forms zur laufzeit erstellen möchte die in etwa gleich aussehen und die selben komponenten haben. wie kann ich diese kopieren, so das sich die komponenten nicht überschreiben und ich induviduell auf diese zugrewifen kann ich habe mir gedacht das ich einen globalen counter nehmen kann und diesen bei neu erstellung um eins erhöhe und das an die komponenten dran hänge gibts da eine möglichkeit oder laufe ich damit in eine sackgasse und wemm ja wie kann ich das anders lösen schonmal vielen dank Manuel |
Re: beliebig viele forms zur Laufzeit erstellen
Warum nimmst du kein dynamisches Array oder eine TObjectList?
|
Re: beliebig viele forms zur Laufzeit erstellen
ja aber ist das dann auch dynamisch, weil ich will auf all diesen forms ein twebbrowser erzeugen ... nicht das sich das auf alle übertregt
|
Re: beliebig viele forms zur Laufzeit erstellen
Ja, es geht ja nur um die Ablage der Formularreferenzen
|
Re: beliebig viele forms zur Laufzeit erstellen
okay ich die letzte zeit mal gegoogelt aber nichts nütliches gefunden könntet ihr mir vill ein Beispiel geben?
wäre super nett danke schonmal |
Re: beliebig viele forms zur Laufzeit erstellen
Delphi-Quellcode:
Formulare[i] := <Formularklasse>.Create(<Owner>);
|
Re: beliebig viele forms zur Laufzeit erstellen
sorry aber mit der thematik bin ich noch nicht so wirklich in kontakt gekommen kannst du mir das vill konkreter schildern
|
Re: beliebig viele forms zur Laufzeit erstellen
Wozu brauchst du überhaupt einen Speicher für die verschiedenen Form-Instanzen?
Nehmen wir an, die Applikation hat ein MainForm vom Typ TForm1 und soll beliebig viele Instanzen vom Typ TForm2 aufmachen können. Das Erzeugen eines neuen Forms machen wir in einem ButtonClick vom MainForm:
Delphi-Quellcode:
Falls du auf die Form-Instanzen zugreifen willst, kannst du das über Screen.Forms.
procedure TForm1.Button1Click(Sender: TObject);
begin TForm2.Create(Application).Show; end; |
Re: beliebig viele forms zur Laufzeit erstellen
funzt es auch dann weil die sache ist die das dieses fenster beliebig oft aufgemacht werden kann weil ich ein webbrowserinterface aufrufen möchte zur gleichen zeit und diese unabhängig von einander
|
Re: beliebig viele forms zur Laufzeit erstellen
Ich weiß ja nicht, ob du das meinst, aber wenn du im TForm2 einen TWebbrowser rein setzt, dann hast du mit jedem geöffnetet Form eine eigene Instanz und kannst so jeweils unabhängig voneinander surfen.
|
Re: beliebig viele forms zur Laufzeit erstellen
Hallo zusammen
Das hat super funktioniert habe aber momentan folgendes problem: Wenn ich einen neuen Browser öffne möchte ich gleich eine adresse mitgeben auf die er gehen soll ... hier einmal der Quelltext
Delphi-Quellcode:
procedure Tform3.Combobox1Select(Sender: TObject);
begin Tform2.Create(Application).show; form2.webbrowser1.navigate(Combobox1.items[combobox1.itemindex]); end; Leider ruft er dann die adresse die in der Combobox steht nicht auf ... kann es daran liegen das ich nur form2 anspreche ? schonmal vielen Dank Manu |
Re: beliebig viele forms zur Laufzeit erstellen
Delphi-Quellcode:
Du musst den webbrowser natürlich auf die Instanz aufrufen, die du gerade erstellt hast. Also brauchst du eine lokale variable oder du nimmst with .. do ;)
procedure Tform3.Combobox1Select(Sender: TObject);
begin with Tform2.Create(Application) do begin Show(); webbrowser1.navigate(Combobox1.items[combobox1.itemindex]); end; end; |
Re: beliebig viele forms zur Laufzeit erstellen
super Danke das hat funktioniert ... jetzt wollte ich einen CMD befehl mit shellexecute übergeben aber er kennt shellexecute nicht .... hab ich in den uses was vergessen unter umständen oder warum erkennt er das bei mir nicht ?
|
Re: beliebig viele forms zur Laufzeit erstellen
Hi,
Delphi-Quellcode:
;)
uses ShellAPI;
|
Re: beliebig viele forms zur Laufzeit erstellen
alles klar ^^ leider stellt er sich jetzt etwas an weil ich einen String übergeben möchte er aber Pchar will
der Entsprechende Code
Delphi-Quellcode:
gibt es für den Befehl ShellExecute auch ne Möglichkeit ein Programm mit "ausführen als" zu starten ... mit Variablen die vorher festgelegt wurden, ohne das sich der Dialog öffnet, also das ich Benutzer, PW und Domain direkt übergebe ?
shellexecute(application.handle,nil,('mstsc.exe'), ('/v ' + ((combobox1.items[combobox1.ItemIndex]))),nil,sw_Normal);
Gruß und vielen Dank Manu |
Re: beliebig viele forms zur Laufzeit erstellen
Zitat:
|
Re: beliebig viele forms zur Laufzeit erstellen
Das PChar Problem lässt sich mit einem einfachen Cast auf PChar beheben:
Delphi-Quellcode:
Zu deiner anderen Frage, habe ich leider keine Antwort.
shellexecute(application.handle,nil,('mstsc.exe'),PChar('/v ' + ((combobox1.items[combobox1.ItemIndex]))),nil,sw_Normal);
|
Re: beliebig viele forms zur Laufzeit erstellen
alles klar super das klappt ^^ nur das createproccessasuser bereitet mir kopfschmerzen ... bin total überfordert und desto länger ich nach suche desto schlimmer wird es hier schonmal was ich habe
Delphi-Quellcode:
wie ich aber nun mit diesen daten ein programm aufrufe weis ich nicht :(, weil ich kann mit diesen daten nichts im "createprocessasuser" anfangen ... kann man nicht auch runas dafür nehmen ?
logonuser(PChar(form1.edit1.text),Pchar('hsvv.hessen.de'),Pchar(form1.edit2.text),<LOGON32_LOGON_BATCH or LOGON32_LOGON_NETWORK or LOGON32_LOGON_INTERACTIVE>,
<LOGON32_PROVIDER_DEFAULT>, AdminToken)); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:13 Uhr. |
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