Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Funktion zu Lesen aus Editfeld in VC++ 5

Empfohlene Antworten

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

UpdateData(TRUE); //fenster->variablen

//daten ändern

UpdateData(FALSE); //variablen->fenster

:rolleyes: Ähm und dass dann bitte nochmal in Deutsch? :)

Ich hab doch erst angefangen mit dem Kram. Gibts da ein 3-zeiler Beispielprogramm?

Thnx4Help

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

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ß!!!

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

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.

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

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.

Ähm :D sorry, aber das war zu viel.

Also das mit dem konvertieren ist klar. Aber welche function,wenn nicht fputc, schreibt denn text in eine Datei? Damit es gleich egal ist was in dem Eingabefeld steht?

Thnx4Help :)

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.

versuchs mal hiermit

fprintf(deinFileStream,"%d", deinedoublevariable);

ist nicht so schoen wie bei crush

aber dafuer ziemlich einfach und schnell kapierbar :rolleyes:

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

Ä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 ]

.

magst jetzt deinen double in ne Datei schreiben oder in eine andere Variable?

und der wert dann als text in einer neuen Variable wieder rauskommt?

naja, also am besten in eine Variable, die ich dann später in eine Datei schreibe.

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?

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

hmm wahrscheinlich muss man mit escape charactern arbeiten,

d.h. um einen backslash zu schreiben muss ich zwei machen

siehe hier :

 

void main()

{


cout << "\\ ein Backslash\n";

cout << "\\\\ zwei Backslash";

}

 

yep, funtzt, jetzt kann ich schonmal die daten auf einem anderen rechner abspeichern. :D:D

Danke, denke das wars erstmal. :D

Greetz

Carsten

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.