Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Ich möchte, dass das Programm einen Warnhinweis ausschreibt, wenn ein bestimmtes Feld leer ist.

if(edtLadeU == ??)

?? - wie drück ich es aus das dies passieren soll, wenn das Feld leer ist....also nix drin steht ??

Geschrieben

Du kannst ja mit der Felddefinition einen definierten Anfangszustand schaffen. (Die Definition schafft den Zustand). Dieser Zustand wird veraendert wenn in das Feld geschrieben wird. Du musst also pruefen ob sich das Feld im Ausgangszustand befindet.

char Feld[FELDLAENGE]={'\0'};

if(! (Feld[0])){

cout<<"Feld ist noch leer!";

}

Für Felder anderer Datentypen ergeben sich natürlich andere Notwendigkeiten.

Geschrieben

Hab's jetzt auf null gesetzt (edtLadeU == 0), jetzt fängt er zwar noch net das Ereignis ab, wenn gar nix drin steht aber das kann ich später noch machen.

Was anderes:

Ich möchte ganz gerne einen "Druck" - Button einbauen.

Daraufhin soll ein schon vordefinierter Text mit einer Tabelle ausgedruckt werden. In den Text soll'n aber Werte aus dem Programm übernommen werden.

Bsp:

Bei einer Ladespannung von jetzt eben der Wert den der Benutzer im Programm eingegeben hat (LadeU) beträgt die Spannung nach eingegebene Sekunden (Sekunden) und danach den berechneten Wert (Spannung) --> Bei einer Spannung von 220 beträgt die Spannung nach 6 Sekunden 3.49.

Geschrieben

edtLadeU ist also vom Typ TEdit, das solltest Du dazuschreiben. Denn dann ist edtLadeU == "" tatsächlich Unfug. Aber was sicherlich funktioniert ist folgendes:

if ( edtLadeU -> Text == "" )

//...

if ( edtLadeU == 0 ) ist auch keine tolle Idee (zumindestens in diesem Zusammenhang). Hier wird nur geschaut, ob edtLadeU kein Null-Zeiger ist. Davon darf man ruhig ausgehen, es sei denn, Du hast das TEdit zur Laufzeit erzeugt.

HTH

Jan

Geschrieben

@Orffi

Hab's jetzt so geändert, nur wenn ich keinen Wert eingeben, kommt folgende BorlandC++ - Fehlermeldung:

Exception der Klasse EConvertError......"ist kein gültiger Gleitkommawert"

(hab's mal gekürzt)

Geschrieben

Ich habe jetzt nicht ganz vor Augen, wie Dein Quelltext aussieht und was Du wann machen willst. Aber Du hast ein TEdit (edtLadeU) Dort sollen Zahlen eingegeben werden, die Du dann mit StrToFloat in eine Fließkommazahl umwandelst. Das schließe ich jetzt einfach mal aus Deiner Exception. Diese Exception wird, wie Du schon richtig bemerkt hast, geworfen wenn ein leerer String in float (StrToFloat gibt long double zurück) umgewandelt werden soll. Aber auch bei "abc" wird natürlich eine Exception geworfen, weil auch "abc" nicht in float umgewandelt werden kann. Wenn Du jetzt eine OnClick-Methode für einen Button hast, die mit der Zahl von edtLadeU Berechnungen durchführen soll, dann kannst Du folgendes tun:


if ( Edit1 -> Text == "" )

{

   Application -> MessageBox ( "Kein Wert in LadeU!", "Fehler", MB_OK );

   edtLadeU -> SetFocus ();

   return;

}

float LadeU = StrToFloat ( edtLadeU -> Text );

//...

Dies prüft wie gesagt nur, ob Du überhaupt etwas eingegeben hast. Oder Du arbeitest komplett mit Exceptions, was ja auch ganz schön ist:

float LadeU;

try

{

   LadeU = StrToFloat ( Edit1 -> Text );

}

catch ( EConvertError &e )

{

   Application -> MessageBox ( e.Message.c_str(), "Fehler", MB_OK );

   edtLadeU -> SetFocus ();

   return;

}

//keine Fehler... Berechnung kann durchgeführt werden...

HTH

Jan

Geschrieben

scheint vielleicht albern zu klingen, aber... aehm... was haeltst du noch von einem else

mir scheint, du schreibst deine warnung... und versuchst anschliessend doch noch den inhalt in einen float wert umzuwandeln

;o)

Uruz

Geschrieben

Bitte beachte das return im if-Block. Ich steige bei einem leeren edtLadeU -> Text also aus der Funktion aus und brauche deswegen kein else. Das Gleiche gilt übrigens auch für die try-catch-Version.

HTH

Jan

Geschrieben

Du hast Du zwei Möglichkeiten:

Als erstes kannst Du mit TMaskEdit im Bereich Zusätzliches arbeiten. Dort gibt es im Objektinspektor eine Eigenschaft EditMask. Dort kannst Du ein paar Sachen festlegen.

Zweite Möglichkeit:

LONG dwStyle = GetWindowLong ( Edit1->Handle, GWL_STYLE );

Hier sicherst Du die alten Style-angaben vom Edit-Feld (hier Edit1). Danach benutzt Du das logische oder um, den Style "nur Zahlen" (ES_NUMBER) hinzuzufügen.

SetWindowLong ( Edit1->Handle, GWL_STYLE, dwStyle | ES_NUMBER );

HTH

Jan

Geschrieben

Wenn ich die zweite Möglichkeit versuch anzuwenden, kommt folgende Fehlermeldung:

Zeiger auf Struktur auf linker Seite von -> oder ->* erforderlich

Es hat doch vorher geklappt, wieso hat er jetzt damit Probleme ??

Nachtrag: Die Fehlermeldung erscheint bei

LadeU = StrToFloat(edtLadeU->Text);

und auch bei deinen beiden Codezeilen

Geschrieben

Wo hast Du denn die beiden Codezeilen hingeschrieben?

Sie müssen in den Konstruktor der Form auf der edtLadeU liegt. (Hatte ich vergessen dazu zu schreiben).

HTH

Jan

Geschrieben
Original geschrieben von toppy

Ähm hüstel wo müssen die liegen !? :confused:

Das war jetzt zu fachmännisch für mich ausgedrückt, also bitte net böse sein, wenn ich nerv.....

Das Formular, auf dem dein Eingabefeld liegt, hat eine Funktion wie FormCreate (nennt sich auch konstruktor bzw constructor)...

da musst du das dann rein schreiben ;o)

Geschrieben

Wow, klappt supiiii.......Danke vielmals euch beiden :)

So, jetzt läuft das Proggy eigentlich so wie ich es haben will, d.h. mir fällt erstma kein weiteres Problem ein :D

Achja, Danke nochmals für eure Geduld mit mir DAU - Programmierer ;)

Geschrieben
Das Formular, auf dem dein Eingabefeld liegt, hat eine Funktion wie FormCreate (nennt sich auch konstruktor bzw constructor)...

Das ist leider nicht richtig! Die Funktion FormCreate wird auf das Ereignis OnCreate aufgerufen. Ein Konstruktor wird beim Erzeugen des Objekts aufgerufen. Es ist zwar egal, wo man es nun hineinschreibt, aber es ist nicht das Gleiche!

Jan

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...