Erfassung von Daten in einem Eingabefenster



  • Hi zusammen,

    ich hab mal wieder ein Problem und hoffe das Ihr mir weiter helfen könnt!
    Mein Programm soll so gestalltet werden, das der Benutzter einige Daten
    einzugeben hat. Die Eingabe soll aber nicht in einem einzigen Fenster statt
    finden, so Soll er z. B. erst seinen Vor- und Nachnamen eingeben
    dann im weiteren Schritt seine Adressanschrift und seine Telefonnummer:

    1. Abfrage

    -------------
    Vorname  |             |
              -------------
              -------------
    Nachname |             |
              -------------
                               |WEITER|
    

    2. Abfrage

    -------------
    Adresse  |             |
             |             |
             |             |
              -------------
              -------------
    Telefon  |             |
              -------------
                     |ZURÜCK| |WEITER|
    

    Zum Aufbau:
    Ich will ein Form1 in welchem beide Abfragen erfolgen.
    So soll in einem einzigem Fenster erst die 1. Abfrage erfolgen
    und wenn man dann auf den Button "WEITER" klickt, soll in dem
    gleichem Fenster der Inhalt von der "1. Abfrage" 'gelöscht' werden
    und der die 2. Abfrage erfolgen.
    In Excel gibt es sowas auch, eine Abfrage von Datensätzen in einem Fenster
    in welchen in einzelnen "Stepps" verschiedene Daten Abgefragt werden.
    Oder von der Installation eines Programms kennt man das auch her, da öffnet
    sich ein fenster, dann wird als erstes ein Copyrigt und weiteres sinnloses Zeugs
    mitgeteilt, dann wenn man auf weiter klickt wird man nach dem Einferständnis
    der Lizensbedingungen gefragt, als dritten schritt soll man dann seinen Namen
    und seine Inizialen eingeben bla bla bla...Ihr wisst schon!

    ICH DANKE EUCH SCHON JETZT EINMAL FÜR EURE VORSCHLÄGE

    P.S. mit mehreren Panels habe ich das schon mal ausprobiert,
    da hab ich dann immer nur ein Panel auf Visible gestallt und die anderen
    einfach ausgeblendet, dann wenn ich auf weiter geklickt hab,
    hat sich das aktuelle Panel ausgeblendet und das nächste wurde eingeblendet.
    Aber wenn man dann viele Datensätze abfragen will, wird das ganz schön unübersichtlich. Da muss es doch was besseres geben oder nicht?
    Hier einmal der Quellcode zu meinen Vorstellungen aber mit Panels:

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    AnsiString E1, E2;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button4Click(TObject *Sender)
    {
      Panel1->Visible = true;          
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
     Panel1->Visible = false;
      Panel2->Visible = true;
      E1 = Edit3->Text;
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button3Click(TObject *Sender)
    {
    Panel2->Visible = false;
      E2 = Edit4->Text;
    
      if((E1 != "")  && (E2 != ""))
      {
        Edit1->Text = E1;
        Edit2->Text = E2;
      }
      else
      {
      }        
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button5Click(TObject *Sender)
    {
    Panel2->Visible = false;
      Panel1->Visible = true;        
    }
    
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
      Form1->Label1->Caption = Label1->Caption;
    }
    //---------------------------------------------------------------------------
    


  • coder-beginner schrieb:

    Aber wenn man dann viele Datensätze abfragen will, wird das ganz schön unübersichtlich. Da muss es doch was besseres geben oder nicht?

    Wenn du die Maske zur Entwurfzeit entwerfen willst (schönes Deutsch ;)), dann bleibt dir eigentlich nichts weiter übrig, als mit mehreren Panels oder sonstigen Containerkomponenten zu arbeiten. Die einzige Alternative ist das Erzeugen und Plazieren der entsprechenden Komponenten zur Laufzeit, was natürlich entsprechend viel Code erfordert.

    Um die Menge der Masken zu reduzieren solltest du dir überlegen, ob sich nicht bestimmte Eingaben zu einem Schritt zusammenfassen lassen.

    PS. Mit 'Datensätzen' bezeichnet man üblicherweise das komplette Ergebnis einer solchen Eintragung (also z.B. Name+Adresse+Tel.nr.+Geb.datum). Ich habe deine oben zitierte Frage so interpretiert, dass du eigentlich 'viele Teilabfragen' meintest.
    Für einen neuen Datensatz brauchst du natürlich keine neuen bzw. zusätzlichen Panels, da fängst du einfach wieder mit dem ersten an.



  • Danke erst mal für Deine Vorschläge,
    stimmt Datensätze ist ein kompletter Block von Sätzen,
    das sagt ja eigentlich auch schon das Wort "Satz" aus 😃
    aber das es keinen Weg um die Panels gibt das ärgert mich dann doch,
    denn das ist ja ganz schäner Fummelkram. Kann ich die Panels nicht
    auch auf einem Form2 "Deponieren" und mir das gewünschte Panel während der
    Laufzeit raus ziehen und auf dem Form1 darsrellen, wenn man dann auf
    |WEITER| klickt wird das Panel wieder zurückgegeben bzw. entfernt und das
    nächste Panel wird dann das dem Form2 in das Form 1 gezogen?
    Ich will dies nämlich eigentlich nicht nur für die Eingabe von Daten
    verwenden, sondern den Aufruf einzellner Programme in meine Programm.
    Das kapiert bestimmt keiner... 😡
    Also was ich meine ist, das ich über die Nav-Leiste Programmteile meines
    Programms aufrufen will. Ich will so z. B. ein Telefonverzeichnisprog,
    einen Kalender etc. in mein Prog einbetten. Soll alles zusammen sein,
    wird also wenn zusammen Compiliert!

    Danke nochmal 👍



  • coder-beginner schrieb:

    Kann ich die Panels nicht
    auch auf einem Form2 "Deponieren" und mir das gewünschte Panel während der
    Laufzeit raus ziehen und auf dem Form1 darsrellen, wenn man dann auf

    Dafür gibt's seit dem BCB 5 Frames.



  • Hi,
    du kannst auch ein PageControl nehmen....
    Zum Designen die Tabs einblenden und denn wenn's fertig ist einfach die Tabs ausblenden und die TabSheets per Code durchschalten...

    MfG

    Alexander Sulfrian



  • Ich danke Euch zweien für Eure konstruktiven Vorschläge.
    Ich würde nun gerne deide einmal ausprobieren, hierzu
    fehlt mir jedoch gerade mal die Routine, da ich ja noch
    mit Frames oder PageControl gearbeitet habe, es hört sich aber
    beides gut an, wenn Ihr vieleicht etwas ausführlicher werden könntet,
    damit ich mir mehr drunter vprstellen kann - ohne jetzt tagelang die
    FAQ oder Hilfe zurate zu ziehen - ?! Das währe super.
    Mit den Frames z. B. ist es damit möglich nicht nur ein eigenständiges Fenster
    zu creieren - das hab ich ja schon ausprobiert - sondern dieses Frame
    in Form1 wie bei HTML einzubetten?!Da kann ich ja auch ein Frame in die
    Main legen - das fällt ja obtisch noch nicht mal auf wenn es bei einem bleibt -

    Danke Euch!



  • coder-beginner schrieb:

    sondern dieses Frame in Form1 [...] einzubetten?!Da kann ich ja auch ein Frame in die Main legen - das fällt ja obtisch noch nicht mal auf wenn es bei einem bleibt

    Genau dafür sind Frames da. Und um das herauszubekommen muss man keineswegs tagelang die Hilfe studieren, da reicht ein kurzer Blick und ggf. 10 Minuten rumprobieren. 😉


Anmelden zum Antworten