Dialog: dynamisches Erstellen v. EditBoxen



  • Hi,

    einige von euch kennen sich vielleicht ein wenig mit Access aus. Da ist es eigentlich leicht eine Art Endlos Formular zu erstellen das je nach Anzahl der Daten größer (scrollbar) wird oder bei wenig Daten die Standardgröße hat.

    Nun, sowas möchte ich nun mit einem Dialog in C++ machen. Ich lese auch Daten aus einer Access Datenbank aus und möchte quasi ein Dialog das je nach Anzahl der Daten entweder scrollbar wird um alle Daten anzeigen zu können oder bei wenig Daten eine bestimmte Größe beibehält.

    Die Daten sollten z.B. jeweils in einer Editbox stehen. Wenn wir mal davon ausgehen das ich 5 Datensätze gespeichert habe sollen 5 Editboxen mit dem Inhalt erstellt werden, und je nachdem wieviele Datensätze mit der Zeit hinzukommen soll der Dialog automatisch vergrößert, also um die Editboxen erweitert werden sodass ich nach unten scrollen kann um z.b. die restlichen 15 Datensätze anzuschaun.

    Ich denke das klingt nicht gerade einfach aber hoffentlich kann mir wer von euch helfen, habe auch schon recht lange im Netz nach ein paar Tuts geschaut aber leider nichts gefunden, mag sein das ich vll nach etwas falschen suche.



  • CEdit bla = new CEdit;
    bla.SetWindowPos(...) // parameter siehe msdn
    bla.SetWindowText("Dein Text");
    bla.ShowWindow(SW_SHOW);
    


  • Das hilft mir leider nicht weiter, ich habe ja immer eine andere Anzahl an Datensätzen und somit auch eine andere Anzahl von Edits die erstellt, oder eben nicht erstellt werden müssen. Ist ja kein Akt ne Editbox zu erstellen und die Daten da reinzuhaun. Schwierig wird es erst die benötigte Anzahl erstellen zu lassen.



  • Na willst du ne Komplettlösung? Klar ist es nicht einfach aber
    da kannst du ja vielleicht auch selber drauf kommen.
    Du musst halt die anzahl der Datensätze ermitteln, diese dann irgendwo im Dialog speichern und dann so viele felder erstellen. Das mit dem Scrollen, Positioneren usw. musst du halt mal ausprobieren. Mein gott.



  • Die Anzahl der Edits die in den Dialog reinpassen solltest du ja rauskriegen.

    Musst ein bissle umbauen dann wird's schon was.

    CFont* dlgFont = GetFont();
    	for(int i = 0;i < 10;++i)
    	{
    		CEdit* edit = new CEdit;
    
    		// 23 = Höhe von Edit + 3 Pixel platz
    		// 10 = Platz vorm ersten Edit
    		int top = i * 23 + 10;
    		edit->CreateEx(
    			WS_EX_CLIENTEDGE,
    			"Edit","",
    			WS_CHILD | WS_VISIBLE | WS_TABSTOP,
    			CRect(10,top,10 + 100,top + 20),this,100 + i);
    		edit->SetFont(dlgFont);
    	}
    

    Entweder du speicherst die EditWindows in einer Liste oder du entfernst sie z.B. so:

    delete GetDlgItem(editID);
    


  • Stalin, wenn ich soviel Peilung davon hätte dann wär ich bestimmt nich auf die Idee gekommen hier was zu posten du Nase... Wenn ich nix vernünftiges zu sagen habe dann halt ich auch meinen Mund. ⚠

    Nemesyzz, werde mal versuchen mit deinem Code was anzufangen und danke dir schonmal für deine Hilfe. 👍


Anmelden zum Antworten