Form runtime erstellen



  • 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.



  • @WebFritzi

    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!


Anmelden zum Antworten