Ein Phänomen mit Combotext und StrToIntDef



  • Hallo,

    ich stehe vor einem absoluten Rätsel.
    Eine Combobox befülle ich mit den Werten 9,10,11,20,21,100,250,500

    Diese heisst frm1_cb2_Faktor und über einen Button frm1_btn2_Faktor
    lese ich nach einer Auswahl in der Combobox diese mit der Funktion aus:

    void __fastcall TForm1::frm1_btn2_FaktorClick(TObject *Sender)
    {Integer i2; AnsiString z1;                                                     // Vars definieren
    
     z1=frm1_cb2_Faktor->Text;                                                      // aktueller Faktor?
     ShowMessage("Faktor z1: "+z1);
     i2=StrToIntDef(z1,100);                                                        // umwandeln in int, falls User falsche Werte eingegeben hat
    
     ShowMessage("Faktor i2: "+IntToStr(i2));
     Grafiken(0,i2,0,0,"",frm1_img2_Plan,1);                                        // und Grafik neu skalieren
    }
    

    Der aktuelle gewählte Wert der Combo wird ausgelesen (z1), dieser dann
    in i2 (Integer) umgewandelt.
    Mit Grafiken() bearbeite ich eine Grafik (Imagecontrol) neu (Funktion Grafiken).

    Dies funktioniert mit allen Werten hervorragend; nur mit der 10 NICHT!
    Dort wird i2 immer 100, egal was ich mache. Die beiden ShowMessage zeigen
    es dabei eindeutig: Alle Werte ausser 10 werden korrekt umgewandelt; nur
    die 10 nicht. Also entweder liegt es an meinem Glühwein oder ich verstehe
    die Welt nicht mehr..

    Für jeden Tipp dankbar; bin total ratlos...

    Grüsse, Stefan 😕



  • Kannst du die Implementierung von Grafiken() mal zeigen?

    PS:
    Oder kommentier den Aufruf von Grafiken mal aus und teste die 10 dann.
    Im BCB6 hier und ohne Grafiken() kann ich das Problem jedenfalls nicht nachvollziehen, beide ShowMessages zeigen 10.



  • Hallo, Jansen

    meinst Du so?

    Header von Funktionen.hpp

    Boolean Grafiken(int p1, int p2, int b, int h, AnsiString pt1,TObject *Sender,int pForm);  // Funktion definieren
    

    Die beiden ShowMessage() zeigen mir die Verfälschung aber schon vor
    dem Aufruf der Funktion Grafiken() an.

    Gruss, Stefan



  • Das ist die Deklaration, die Implementierung ist der eigentliche Code.
    Aber probier erstmal das auskommentieren, siehe den Edit in meinem obigen Beitrag.



  • Hei, Jansen

    also so

    void __fastcall TForm1::frm1_btn2_FaktorClick(TObject *Sender)
    {Integer i2; AnsiString z1;                                                     // Vars definieren
    
     z1=frm1_cb2_Faktor->Text;                                                      // aktueller Faktor?
     ShowMessage("Faktor z1: "+z1);
     i2=StrToIntDef(z1,100);                                                        // unverändert lassen
    
     ShowMessage("Faktor i2: "+IntToStr(i2));
     //Grafiken(0,i2,0,0,"",frm1_img2_Plan,1);                                        // und Grafik neu skalieren
    }
    

    geht es auch nicht. Wenn das kein echtes Phänomen ist...
    Habe übrigens den BCB6 Personal

    Grüsse, Stefan



  • Bist du sicher, dass hinter der 10 in der ComboBox nicht noch ein oder mehrere Leerzeichen stehen, oder irgendwas anderes, das eine saubere Umwandlung verhindert?



  • ...wieder Glühwein beim Programmieren; ich schwör's 😉

    Hallo, Jansen
    ein Leerzeichen dahinter ist die Lösung *grmpf*

    Danke für den Tip! Manchmal ist man echt doooooof.

    Gruss Stefan :xmas1:


Anmelden zum Antworten