Form runtime erstellen
-
Ich meine wohl den Instanznamen. Ich hätte mir das so auf die art vorgestellt;
AnsiString name="Formular1" TForm *name = new TForm(Application); Formular1->Visible=true;
Nur den Namen ändern wäre doch einfach nur so;
name->Name="Formular1";
-
Nein, das geht natürlich nicht.
-
Hm Schade, aber ehrlich gesagt hab ich mir diese Antwort ja eh gedacht.
-
Du kannst es aber wie folgt handeln:
lege eine StringList an in der die Namen gespeichert sind und
TForm als Array, wobei der Index übereinstimmt, somit kannst
du dich anhand des Indexwerts haltenz.B.
TStringList *UserNamen = new TStringList(); UserNamen->Add("User-Micha"); //..... TForm *UserWindow[5]; //Max Anzahl, oder per const int von StringList Count UserWindow[0] = new TForm(Application); UserWindow[0]->Caption = UserNamen->Strings[0]; UserWindow[0]->Show();
-
Soweit so gut. Habe jetzt ein Form gemacht und gleich ein richedit sowie ein editfeld draufgehauen.
Nun möchte ich aber mit z.B.: einem Tastendruck etwas in dieses richedit feld reinschreiben. Wie mach ich das? einfach form->richedit... geht ja leider nicht da ich alles runtime gemacht habe.
-
Öhhh, wozu bitte die StringList?
-
edit: unnötig
-
WebFritzi schrieb:
Öhhh, wozu bitte die StringList?
Userliste speichern, laden etc. halt einfach damit handtieren
@Gen.d.Pz...
Du mußt dich mal klarer ausdrücken! Hast du jetzt Richedit etc. auf
der HauptForm oder auf eine LaufzeitForm?Egal wo auch immer kannst du mit Form->Komponente->... zugreifen
UserWindow[0]->RichEdit->Text = "blabla";
und wenn du nur wissen möchtest wie man eine Komponente auf eine
LaufzeitForm bekommt, so:TButton *OKButton[5]; OKButton[0] = new TButton(UserWindow[0]); OKButton[0]->Parent = UserWindow[0]; OKButton[0]->Caption = "OK"; //..u.s.w.
-
promicha schrieb:
Du mußt dich mal klarer ausdrücken! Hast du jetzt Richedit etc. auf der HauptForm oder auf eine LaufzeitForm?
Das hat er klar und deutlich ausgedrückt.
-
Ja, ich habe mich blöd ausgedrückt, ich meinte ob er mit nem Button im
LaufzeitFenster in die HauptForm schreiben will, da das nicht da bei stand,
was er von wo aus machen will.
-
Ich schildre einfach mal alles genauer;
So erstelle ich meine form;
TForm *form = new TForm(Application); form->Name=name; TRect *rect = new TRect; SystemParametersInfo(SPI_GETWORKAREA,0,rect,0);form->Height=300; form->Width=500; form->Left=rect->Width()/2-Width/2; form->Top=rect->Height()/2-Height/2; delete rect;
Soweit geht es.
Jetzt möchte ich mit einem Button auf dem Hauptform etwas das richedit auf der runtime erstellten form schreiben.
Aber es gibt kein form->.... da das ja erst runtime erstellt wird.Wie mach ich das nun??
-
Jetzt möchte ich mit einem Button auf dem Hauptform etwas das richedit auf der runtime erstellten form schreiben.
Wenn du schon Hilfe willst, dann drück dich wenigstens ordentlich aus! Das versteht ja kein Mensch, was du da schreibst. Und in deinem Code ist nirgends die Erstellung eines RichEdits zu sehen.
-
@WebFritzi
siehste das meinte ich, ich weiß noch immer nicht was er genau will.Sooooooo,
ich versuche das jetzt mal zu entziffern:IstKlar: Du möchtest ein zweites Fenster öffnen und in ihr ein RichEdit setzen.
DenkeIstKlar: du möchtest jetzt per Button-Klick auf der HauptForm einen Text
in diese erstellte RichEdit schreiben.Frage: Ist diese RichEdit schon vorhanden???
Wenn du ein neues Fenster erstellst mußt du auf ihr diese Komponenten setzen,
.... FORM ERSTELLEN WIE OBEN .... TRichEdit *REdit = new TRichEdit(Form); REdit->Parent = Form; //...weitere Einstellungen...
ach jetzt Begreife ich erst, ich glaub es liegt am Anfängerblut,
wenn er die Form mit Komponenten per z.B. Button1-Click ersttelt,
und mit Button2->Click darauf zugreifen will, erscheint kein
Hilfe-Popup nach dem >;//>>>>>> Unit1.h <<<<<< #ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> #include <ComCtrls.hpp> //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // Von der IDE verwaltete Komponenten TButton *Button1; TButton *Button2; void __fastcall Button1Click(TObject *Sender); void __fastcall Button2Click(TObject *Sender); void __fastcall FormClose(TObject *Sender, TCloseAction &Action); private: // Anwender-Deklarationen TForm *Form; //<<<<<<<<<< Hier den Zeiger deklarieren! TRichEdit *REdit; //<<<<<<<<< DITO public: // Anwender-Deklarationen __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif //.. //>>>>>>>>> Unit1.cpp <<<<<<<<<<< //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { Form = new TForm(Application); TRect *rect = new TRect; SystemParametersInfo(SPI_GETWORKAREA,0,rect,0); Form->Height=300; Form->Width=500; Form->Left=rect->Width()/2-Width/2; Form->Top=rect->Height()/2-Height/2; delete rect; REdit = new TRichEdit(Form); REdit->Parent = Form; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { REdit->Text = "Na weißt du jetzt Bescheid?"; } //--------------------------------------------------------------------------- void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) { delete REdit; delete Form; } //---------------------------------------------------------------------------
Verstehst es Jetzt? Kommt jetzt die Schreibhilfe nach dem ">"?
-
J danke genau das meinte ich. Jetzt gehts!
-
Jetzt nutzen mehrere Forms dieselbe Funktion. Wie kann ich nun mit TObjekt *Sender herausfinden welches Editfeld (auf welcher Form) die Funktion aufgerufen hat??
Mich bringt die FAQ nicht wirklich weiter.
-
Schmeiß mal die BCB-Hilfe auf dynamic_cast an. Oder schau im RichEdit Beispiel. Da wird sowas gemacht.
-
Jup, danke, das wars. Jetzt da ich endlich die Grundlagen beinander hab kann ich ja mit dem programmieren anfangen!