kurze frage wegen parameter von CEdit::Create()



  • Ähhh ja...
    Ein Zeiger zeigt auf einen Speicherbereich.
    Dieser Speicherbereich wird mit new "angelegt" und existiert solange, bis man ihn mit delete "löscht" oder das Programm beendet wird.
    Du könntest das Objekt auch "normal" anlegen:
    CEdit Edit;

    nur würde dieses dann gelöscht, wenn du die Funktion verlässt, und das willst du ja nicht (da das Edit dann "verschwinden" würde)

    Grüße Rapha



  • hmm ja klingt logisch...

    noch ne frage... 😉 :

    Wie ich gerade merke, ist dieses Textfeld vom Aussehen (die Schrift) her nicht dasselbe wie man es sonst im "Baukasten" einer Dialoganwendung dabei hat. [?]

    Nicht das mich das wegen dem Aussehen gross stört, aber die Handhabung ist total anders. Ich habe ja keine Membervariabel der ich jetzt etwas zuweisen kann... ausser irgendwie

    pEdit->Insert_oder_so_ähnlich();
    

    wie man das ja mit den listboxen so macht.

    Gibt es irgendeine Möglichkeit, dass ich da dynamisch ein Textfeld erstellen kann dass ich dann über eine Membervariabel steuern kann?

    thx 🙂



  • Nicht das ich wüsste.
    Du kannst aber doch per SetDlgItemText und GetDlgItemText auf das Control zugreifen!

    Grüße Rapha



  • Hallo zusammen..

    wie muss ich es anstellen, dass ein loop eine ganze menge dieser textfelder generiert?

    Ich hab da mal 2 "von Hand" gemacht:

    CEdit* pEdit = new CEdit; 
    pEdit->Create(WS_CHILD | WS_VISIBLE | WS_BORDER, CRect(15,300,120,320), this, 1);
    SetDlgItemText( 1, "Hallo ID 1" );
    
    CEdit* pEdit2 = new CEdit;
    pEdit2->Create(WS_CHILD | WS_VISIBLE | WS_BORDER, CRect(165, 300, 270, 320), this, 67);
    SetDlgItemText( 67, "Hallo ID 67");
    

    Aber sowas krieg ich doch unmöglich in eine while - schlaufe !
    Ich kann ja nicht dynamisch variabeln erstellen... und mit einem array kann man das ja auch nich kombinieren. Zudem besteht ja da immernoch das problem, das gewisse ID's bereits von irgendwelchen Buttons besetzt sind, und es so zu konfklikten kommt ⚠

    Kann mir da jemand ein Tipp geben?



  • also ich hab das jetzt so gemacht:

    CEdit pEdit2[10];
    
    for(int j=0; j++; j<10){
         pEdit2[j].Create(WS_CHILD | WS_VISIBLE | WS_BORDER, CRect((15+(j*150)), 300, (120+(j*150)), 320),this, (j+200));
         SetDlgItemText((j+200),"hallo");
    }
    

    Das Zeug wird fehlerfrei kompiliert, aber wie Rapha gesagt hat, sieht man anschliessend nichts, weil :

    Du könntest das Objekt auch "normal" anlegen:
    CEdit Edit;

    nur würde dieses dann gelöscht, wenn du die Funktion verlässt, und das willst du ja nicht (da das Edit dann "verschwinden" würde)

    Wie kann ich diesen Code jetzt für nen Zeiger machen? 😕
    Hab da nicht den überblick

    Danke



  • Hi,

    entweder du machst aus dem pEdit2 Array eine Membervariable, oder du verwendest folgenden Code:

    CEdit* pEdit2[10]; 
    
    for(int j=0; j<10;j++){ 
    	pEdit2[j] = new CEdit;
    
         pEdit2[j]->Create(WS_CHILD | WS_VISIBLE | WS_BORDER, CRect((15+(j*150)), 300, (120+(j*150)), 320),this, (j+200)); 
         SetDlgItemText((j+200),"hallo"); 
    }
    

    Du brauchst hier übrigends kein Array (wenn du Zeiger verwendest), da die Zeiger selber ja sowiso temporär sind.

    Du kannst übrigends das Aussehen des Eingabefelds mit den Parametern so anpassen, wie du willst.

    Grüße Rapha



  • 👍 thx !

    öhmmm... 🤡 ich erlaube mir da noch ne Frage:

    Das ganze sollte eigentlich für jedes Feld eines mySQL datensatzes ein eigenes Textfeld generieren...

    CEdit Edit[4];			 
    
    Row = mysql_fetch_row(result);
    
    if(Row)		//falls Zeile vorhanden:
    {
    
    	int z = 0;
    	do{					
    
    		for(int j=0; j++; j<rows){
    		           CEdit *pEdit = &Edit[j];
    
    		           pEdit->Create(WS_CHILD | WS_VISIBLE | WS_BORDER, CRect(15+j*100,300,120+j*100,320), this, (j+200));
                      }
    
    		Row = mysql_fetch_row(result);
    		z++;
    
    	}while(z<rows);
    
    	UpdateData(FALSE);
    }
    

    hmm naja und da ich ja net weiss wieviel felder nu die Tabelle in der Datenbank hat, sollte ich den Buffer von "CEdit Edit" irgendwie dynamisch kriegen...
    Das mit std::vector geht nicht weil der irgendwie CEdit als Typ nich akzeptiert...
    Es gibt in dem Forum hier zwar schon ein paar threads über dieses Thema, aber bei den andern erklärungen weiss ich nich wie ich das hier genau anwenden soll, da ich ja bereits einen pointer habe 😕

    hat vielleicht jemand die Zeit den obigen code mit nem dynamischen "CEdit Edit" zu ergänzen? 🙂

    Thx _Rainer__



  • huups, hab ne deklaration vergessen:

    CEdit* pEdit = new CEdit;
    


  • Hmm also... ich hab mir dieses Zeigerzeugs nochma angeguckt...hab also mal versucht, "CEdit Edit" dynamisch hinzukriegen. Kompilieren tut er, aber wenn ich das prog starte, stürzt es ab.

    rows =		mysql_num_rows(result);		//Anzahl Zeilen
    fields =	mysql_num_fields(result);	//Anzahl Spalten
    
    CEdit *Edit = new CEdit;
    Edit = (CEdit*)malloc(fields*sizeof(CEdit));
    
    Row = mysql_fetch_row(result);
    
    if(Row)		//falls Zeile vorhanden:
    {
    	int z = 0;
    	do{					
    
    		for(unsigned int j=0; j++; j<rows){
    				CEdit *pEdit = &Edit[j];
    
    				pEdit->Create(WS_CHILD | WS_VISIBLE | WS_BORDER, CRect(15+j*100,300,120+j*100,320), this, (j+200));
    				pEdit->SetDlgItemText((j+200),Row[j]);
    		}
    
    		Row = mysql_fetch_row(result);
    		z++;
    
    	}while(z<rows);
    
    	UpdateData(FALSE);
    
    }
    

    Was mache ich falsch? 😕

    thx



  • ja ok die for() schleife is nicht korrekt... aber das is sowieso egal, weil ich die immer auskommentiert// hab.
    ⚠



  • Hi,

    bei deinem Code ist mehreres "falsch".

    Wieso reservierst du den Speicher doppelt? (new und malloc)

    Folgender Code funktioniert:

    int rows = 12; 
    	int fields = 3;
    
    	CEdit *pEdit = NULL; 
    
    //	Row = mysql_fetch_row(result); 
    
    //if(Row)        //falls Zeile vorhanden: 
    { 
        int z = 0; 
        do{                     
    
            for(int j=0; j<rows; j++){ 
                    pEdit = new CEdit;
                    pEdit->Create(WS_CHILD | WS_VISIBLE | WS_BORDER, CRect(15+j*100,300,120+j*100,320), this, (j+200)); 
                    pEdit->SetDlgItemText((j+200),"Hallo"); 
            } 
    
     //       Row = mysql_fetch_row(result); 
            z++; 
    
        }while(z<rows); 
    
        UpdateData(FALSE);
    

    Grüße Rapha


Anmelden zum Antworten