Windows Taschenrechner



  • kpeter schrieb:

    TEdit rechtsbündig:

    im Konstruktor vom Hauptformular setzen

    SetWindowLong( Edit1->Handle, GWL_STYLE, GetWindowLong( Edit1->Handle, GWL_STYLE ) | ES_RIGHT );
    

    Das klappt bei mir im DeveloperStudio2006 auch nicht. Kann es sein, dass dazu mehr gehört als nur diese eine Zeile?



  • Kolumbus schrieb:

    ...Also nochmal mein Vorschlag - einfach ein TPanel als Anzeige nehmen!

    Nur dann erstellt er den Rechner nicht 1:1 als 100%ige Kopie wie als Aufgabe gestellt...



  • Warum denn das bitte nicht? Wo steht denn geschrieben, dass der Taschenrechner ein TEdit als Display haben muss?



  • Kolumbus schrieb:

    Kann es sein, dass dazu mehr gehört als nur diese eine Zeile?

    Nein, mehr nicht. Aber tausche mal GWL_STYLE mit GWL_EXSTYLE.



  • Kolumbus schrieb:

    Warum denn das bitte nicht? Wo steht denn geschrieben, dass der Taschenrechner ein TEdit als Display haben muss?

    Schon klar, nirgends. Zumal das Display kein Eingabe- sondern ein Anzeigeelement ist. Es bekommt keinen Focus.
    Er muss das Design nur so hinbekommen.

    Am Ende ist es ein sogar ein Panel oder ein Label. Je länger man drüber nachdenkt...

    Edit Grammatik 😉



  • kpeter schrieb:

    TEdit rechtsbündig:

    im Konstruktor vom Hauptformular setzen

    SetWindowLong( Edit1->Handle, GWL_STYLE, GetWindowLong( Edit1->Handle, GWL_STYLE ) | ES_RIGHT );
    

    Kolumbus schrieb:

    Das klappt bei mir im DeveloperStudio2006 auch nicht. Kann es sein, dass dazu mehr gehört als nur diese eine Zeile?

    kpeter schrieb:

    Nein, mehr nicht. Aber tausche mal GWL_STYLE mit GWL_EXSTYLE.

    SetWindowLong(Edit1->Handle, GWL_EXSTYLE, GetWindowLong(Edit1->Handle, GWL_EXSTYLE ) | ES_RIGHT );
    Edit1->Repaint();
    

    Auch das führt bei mir im BDS2006 leider nicht zu rechtsbündigem Text im Edit. Wofür steht GWL_STYLE / GWL_EXSTYLE?

    Hier noch ein Vorschlag, wenn man unbedingt den Text rechtsbündig in einem Edit haben möchte, aber nicht an den Komponenten rumbiegen kann / will:
    Man wähle in der Font-Eigenschaft des Edit eine Schriftart fester Zeichenbreite (proportionale Schriftart?) zB. Courier New. Dann lege man die Breite des Edit so fest, dass beispielsweise 20 Zeichen genau hineinpassen (kurz probieren).
    Dann kann man, nachdem sich der Inhalt der Text-Eigenschaft des Edit geändert hat, Folgendes machen:

    Edit1->Text= "1234567890"                         // beispielhafte Änderung von Edit1->Text
    for(int i= Edit1->Text.Length(); i < 20; i++){
        Edit1->Text.Insert(" ", 1);
    }
    

    Mir ist klar, dass der Taschenrechner wahrscheinlich keine Schriftart fester Zeichenbreite nutzt, aber das ist trotzdem ein schöner Trick den ich gern für rechtsbündige Edit's verwende.

    MfG

    Edit: Code ergänzt



  • Ich habe die WindowStyles unter BCB6 und CG2007 ausprobiert, da funktionieren beide nicht. Mit WinSpector hab ich den Stil mal während der laufenden Applikation geändert, führte aber auch zu nichts, das Edit hatte immer ein gesetztes WS_EX_LEFT Flag.
    Weder die normalen ES Styles (ES_LEFT ausmaskiert, ES_RIGHT gesetzt) noch die WS_EX Styles (WS_EX_LEFT gelöscht) hatten irgendeine Auswirkung.

    @Kolumbus:
    Mit der Funktion SetWindowLong kann man bestimmte Eigenschaften von Fenstern abfragen bzw. setzen. Der Index GWL_STYLE greift auf die Fensterstile zu, GWL_EXSTYLE auf die erweiterten Fensterstile. In der MSDN gibts mehr darüber zu lesen.



  • Is dann halt noch fraglich, warum es bei kpeter funktioniert!? 😕



  • Kolumbus@loggedoff schrieb:

    Is dann halt noch fraglich, warum es bei kpeter funktioniert!? 😕

    Jungs, ich flunker nicht.
    Wie gesagt, im BCB 3 und BCB 2009 geht der Code ohne Probleme. Auf dem Laptop hab ich ne BCB6 Version, ich werf den mal an...

    Edit : negativ mit BCB6! Man sollte der Sache auf den Grund gehen



  • Windows Xp Pro mit BCB 6 funktioniert.

    __fastcall TForm1::TForm1(TComponent* Owner)
       : TForm(Owner)
    {
       SetWindowLong( Edit1->Handle, GWL_STYLE, GetWindowLong( Edit1->Handle, GWL_STYLE ) | ES_RIGHT );
    }
    


  • destan schrieb:

    Windows Xp Pro mit BCB 6 funktioniert.

    Aha, bei mir geht BCB6 noch auf Win98 (grusel.)



  • Kolumbus schrieb:

    Du bist ja ein Experte... 😃 Die Zahlen werden beim Windows-Taschenrechner im Normalfall per Button-Click eingegeben.

    Also ich kann bei mir auch per Tatatur Zahlen eingeben. Aber davon abgesehen hast du natuerlich recht: Das Feld als solches kann man nicht auswaehlen.

    Ich kenne niemanden, der versucht direkt ins Display zu klicken und dann seine Aufgabe einzutippen - Nimm mal deinen Taschenrechner aus der Schublade und versuche mit einem Stift direkt ins Display zu schreiben... Merkste was? :p

    Also bei meinem funktioniert's. 🙄



  • heini schrieb:

    Kolumbus schrieb:

    Du bist ja ein Experte... 😃 Die Zahlen werden beim Windows-Taschenrechner im Normalfall per Button-Click eingegeben.

    Also ich kann bei mir auch per Tatatur Zahlen eingeben. [...]

    Jepp, dafür kann man ja dann den Tastendruck von der Tastatur abfangen und programmseitig einen Button-Click simulieren... 😉

    heini schrieb:

    Kolumbus schrieb:

    Ich kenne niemanden, der versucht direkt ins Display zu klicken und dann seine Aufgabe einzutippen - Nimm mal deinen Taschenrechner aus der Schublade und versuche mit einem Stift direkt ins Display zu schreiben... Merkste was? :p

    Also bei meinem funktioniert's. 🙄

    Bin jetzt vom Ottonormal-Taschenrechner ausgegangen... Ausgeschlossen sind dabei:
    * sehr starkes Aufdrücken mit dem Kugelschreiber auf's Taschenrechnerdisplay (wobei das Rechenergebnis dann wohl nicht vom Taschenrechner angezeigt wird) 🤡
    * Taschenrechner mit Touch-Display
    * mit wasserfestem Marker aufs Display schreiben (siehe Hinweis zum Rechenergebnis oben)

    MfG



  • Kolumbus@loggedoff schrieb:

    * mit wasserfestem Marker aufs Display schreiben (siehe Hinweis zum Rechenergebnis oben)

    Mit wasserlöslichem Marker gehts... aber ich musste das Ergebnis von Hand eintragen 😃

    PS:
    Ich probier das nochmal mit dem BCB6. Ein Win32 EDIT verhält sich unter Win95/98 allerdings anders als unter XP/2K, dort (Win95/98) funktioniert das ES_RIGHT Flag nur in Verbindung mit ES_MULTILINE. Steht jedenfalls so in der MSDN.



  • 😕 Jetzt gehts auch mit BCB6/XP... werd ich langsam senil oder habe ich das wirklich nur unter CG2007 getestet?

    Nachtrag:
    Es lag am fehlenden Repaint().


Anmelden zum Antworten