Zum Inhalt springen

Funktion zu Lesen aus Editfeld in VC++ 5


Net-srac

Empfohlene Beiträge

So, ich wollt mich nun auchmal an den so hochgelobten VC++ machen. Bin allerdings schon bei der leichtesten Aufgabe gescheitert.

Gibts es eine Funktion wie bei Borland mit der ich direkt den Wert aus einem Editfeld hole und auch wieder reinstelle?

Genau das haben die nämlich auch in : "VC++ in 21 Tagen" vergessen.

Thnx4Help

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du musst deinem Edit Feld eine MemberVariale zuweisen (das machst du im ClassWizard)

UpdateData(TRUE);

schreibst du jetzt das was in dem EditFeld steht in die variable

UpdateData(FALSE);

schreibst du dass was in der Variable steht in dein edit Feld

Ist eigentlich ganz einfach

Link zu diesem Kommentar
Auf anderen Seiten teilen

Gehe im Resource-Editor auf den Dialog und wähle das betreffende Fenster aus. Drück Strg-W und rufe so den Class-Wizard auf. Wähle dort die Karte "Member-Variables" und klicke auf die entsprechende Control-ID des Fensters. Drücke "Add Variable" und füge bei m_ irgenwas dahinter wie z.B. m_Fenster (das m_ steht für Member-Variable). Wähle in der Kategorie "Control" aus und Bestätige alles mit "OK". Hiermit ist m_Fenster in Deinem kompletten Source-Code über DDX-Funktionen bekannt (Direct-Data-Exchange) und kann über den Punkt-Operator alle Funktionen die dem Fenster bereitstehen benutzen. So arbeiten die (faulen) Profis!

Viel Spaß!!!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Supi, hab ich jetzt geschnallt. Hab auch schon meinen ersten Rechner gecodet. :P

Aber nochwas, wie mache ich denn, dass der jetzt meine ganzen ergebnisse in einer Datei abspeichert? fopen?fclose?

FILE *MeineDatei;

MeineDatei = fopen("C:\\temp.txt", "w+");

fputc('H', MeineDatei);

fputc('a', MeineDatei);

fputc('l', MeineDatei);

fputc('l', MeineDatei);

fputc('o', MeineDatei);

fclose(MeineDatei);

soweit ist klar, aber wie binde ich das jetzt in mein jetziges Prog ein? .h? oder .cpp? ich bin noch net so fit in Visual.

Muß ich mir da nen Button IDC_SPEICHERN machen und dann den kram in OnSPEICHERN legen?

Thnx4Help

Link zu diesem Kommentar
Auf anderen Seiten teilen

Muß ich mir da nen Button IDC_SPEICHERN machen und dann den kram in OnSPEICHERN legen?

-> Wäre so denkbar...

Alles was den Dialog betrifft würde ich auch da reinsetzen, es sei denn du willst eine universale Speicherfunktion machen, die müstest Du dann mit #include einbinden also eine eigene .CPP und .h dafür anlegen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Eigene cpp und h?

wie kann ich denn das machen? die wird doch dann im Hauptteil included oder? aber doch nur die .h?

PS: Das funktioniert! :D:D:D

Aber wenn ich fputc(m_ergebniss, MeineDatei); schreibe sagt er das das mit der konvertierung von double zu int nicht möglich.

Kann ich denn keine double speichern?

Wie könnte ich denn überhaupt konvertieren.

so Float -> Text?

Thnx4Help

Link zu diesem Kommentar
Auf anderen Seiten teilen

fputc schreibt leider nur ints. Deshalb ist es sinnvoll den double(bei Win98 8 Bytes) in 2 ints(4 Bytes) zu zerlegen. Das geht so:

So kann man sehen, wie groß int oder doubles sind:

int x=sizeof(int); // int anschauen

double y=sizeof(double); // alles klar?

und jetzt das Beispiel:

double m_ergebniss;

int xhi,xlo;

double*p1=&m_ergebniss; // Zeiger auf double

xlo=*(int*)p1; // lo als int auslesen

xhi=*((int*)p1+1); // hi als int auslesen

leider muß man den Pointer definieren, da sonst versucht wird den kompletten double auf int zu kürzen. Das heißt der integer-Wert von m_ergebniss wird in den int übertragen und der Exponent in den Gulli geworfen - das wäre falsch (Information geht verloren). Ein double y=5 ist nämlich byteweise nicht 5 sondern:

Hi int Lo int

00 00 00 00 | 00 00 14 40

oder am besten gleich in den fputc setzen:

int xhi,xlo;

double*p1=&m_ergebniss;

fputc(*((int*)p1+1), MeineDatei); // lo

fputc(*(int*)p1, MeineDatei); // hi

Ich hab´s jetzt nicht getestet aber der fputc sollte es so fressen ansonsten halt ein int xhi,und ein int xlo einlesen über als m_ergebniss abspeichern.

Das Einlesen muß also auch wieder als xlo und xhi erfolgen und dann muß ein double im speicher so gefüllt werden. Klappt 100%ig!

Die Methode ist zwar ein wenig brutal, aber so funktionierts bestimmt.

P.S.:

Bei STL lassen sich CObjects ganz einfach in Dateien streamen - da ist dann wurst ob´s ints doubles oder strings sind.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ach so, das geht dann so:

Mit Strings:

fputs, fputws

Write a string to a stream.

int fputs( const char *string, FILE *stream );

ACHTUNG: Es werden 0-terminierte-Strings geschrieben!!! Man muß hier falls nicht vorhanden 0er setzen.

Oder so mit unformatierten Daten aller Art:

fwrite

Writes data to a stream.

size_t fwrite( const void *buffer, size_t size, size_t count, FILE *stream );

Parameters:

buffer Pointer to data to be written

size Item size in bytes

count Maximum number of items to be written

stream Pointer to FILE structure

Das ist feiner, so kann man die Schreib-Länge im Aufruf bestimmen.

Vielleicht hilft Dir das weiter? Aber auch hier muß ein Pointer auf den double gesetzt werden. Da kommt man einfach nicht rum.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ähm, :( ich habs immernoch nicht verstanden :(

Könnt ihr vielleicht mal nen 3-zeiler schreiben mit nem beispiel, wo oben irgendein Zahlenwert z.B. double reinkommt und der wert dann als text in einer neuen Variable wieder rauskommt? So, mit deklaration und so? :(

Das wäre tierisch guat von euch.

Thnx4Help

[ 07. Juni 2001: Beitrag editiert von: FaFo ]

Link zu diesem Kommentar
Auf anderen Seiten teilen

zum schreiben in einen Buffer(char) schau dir das an :


#include <stdio.h>


void main( void )

{

   char  buffer[200], s[] = "computer", c = 'l';

   int   i = 35, j;

   float fp = 1.7320534f;


   /* Format and print various data: */

   j  = sprintf( buffer,     "\tString:    %s\n", s );

   j += sprintf( buffer + j, "\tCharacter: %c\n", c );

   j += sprintf( buffer + j, "\tInteger:   %d\n", i );

   j += sprintf( buffer + j, "\tReal:      %f\n", fp );


   printf( "Output:\n%s\ncharacter count = %d\n", buffer, j );

}

  
zum schreiben des Buffers oder des Double in die datei les mal das:

#include <stdio.h>

#include <process.h>


FILE *stream;


void main( void )

{

   int    i = 10;

   double fp = 1.5;

   char   s[] = "this is a string";

   char   c = '\n';


   stream = fopen( "fprintf.out", "w" );

   fprintf( stream, "%s%c", s, c );

   fprintf( stream, "%d\n", i );

   fprintf( stream, "%f\n", fp );

   fclose( stream );

   system( "type fprintf.out" );

}



  

OK?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Supi, hab es heut früh probiert und es so umgebaut, das es auch wirklich mein ergebniss als char bla[...] speichert. Dankeschön.

Auf einen im Netz stehenden Rechner kann man das nicht speichern? oder? ich hab das schonmal probiert, denke aber, dass ich die adresse falsch eingegeben hab. eigentlich müßte doch: \\X0529AP\C\temp.txt auch reichen oder?

Greetz

Carsten

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...