Eingabefeld positionieren



  • Hallo.

    Ich will eine Tastatureingabe in ein MSFlexGrid simulieren.

    Dazu will ich auf die gerade makierte Zelle ein Eingabefeld legen.

    Ich bekomme vom MSFlexGrid die Koordinaten der Zelle.
    CRect rect;
    rect.left = flex.GetCellLeft();
    rect.top = flex.GetCellTop();
    rect.right = flex.GetCellWidth();
    rect.bottom = flex.GetCellHeight();

    Diese haben die Einheit TWIP. Ich kenne mich damit nicht aus. Was muß ich damit anstellen, damit ich damit ein Eingabefeld positionieren kann?

    Bitte, jeder kleine Hinweis oder Tipp ist willkommen.

    Cu
    Oli 😕



  • Soweit ich weis man kann es in Eingeschalten einstellen ??



  • Kannst Du mir die Einstellung sagen.



  • Kann mir den keiner weiter helfen?

    Es ist dringend.



  • Hallo !

    Google sagt:

    Sowohl die Positions- als auch die Größenangaben werden in Twips angegeben. Twip ist das Maß, das Visual Basic für Bildschirmmaße verwendet. Ein Inch besteht aus ungefähr 1440 Twips. Ein Twip enstpricht damit ungefähr 1/20 eines Pixels, daher hat er auch seinen Namen.

    Ist zwar für VB, aber Einheiten sollten doch eigentlich unabhängig von der Programmiersprache sein... Vielleicht kannst du ja damit deine Einheiten umrechnen.

    Tschüss



  • Hallo.
    Danke erstaml für Deine Antwort.

    Das mir die Daten in der Einheit TWIP geliefert werden, wußte ich.
    Daher habe ich ja auch folgende Rechnung ausgeführt:

    rect.left = rect.left/(1440/xtwip);
    rect.top =  rect.top/(1440/ytwip);
    rect.right = (rect.right /(1440/xtwip));
    rect.bottom =(rect.bottom /(1440/ytwip));
    

    Leider erscheint das Eingabefeld trotsdem nicht dort, wo ich es gern hätte.

    Habe ich noch irgendwas vergessen?

    Cu
    Oli



  • Habe ich noch irgendwas vergessen?

    Vielleicht

    GetDlgItem(IDC_EDIT1)->MoveWindow(&rect);
    

    ?



  • 😃

    Nein, das habe ich nicht vergessen.
    Mein Eingabefeld braucht ein extra Dialogfeld, da sonst das Eingabefeld durchfällt und somit durch das MSFlexGrid verdeckt ist.

    Ich übergebe also das rect an das andere Dialogfeld und führe dort den MoveWindow(&rect) aus.

    Wäre ja auch zu einfach oder??
    Hast Du sonst noch einen Hinweis?

    Cu
    Oli



  • Jetzt fällt mir höchstens noch das hier ein:
    mit MoveWindow(&rect) kannst du ein Steuerelement positionieren. Du möchtest anscheinend einen Dialog (mit dem Editfeld) positionieren.
    Probier doch mal den hier aus:

    SetWindowPos( const CWnd* pWndInsertAfter, int x, int y, int cx, int cy, UINT nFlags );
    

    mit pWndInsertAfter = NULL, nFlags = 0 und die x/y-Dinger kommen aus dem rect.

    [edit]
    Wenn der Dialog im Vordergrund stehen soll, muss man als ersten Parameter evtl. nicht NULL, sondern äh,... etwas anderes übergeben (siehe MSDN).
    [/edit]

    [ Dieser Beitrag wurde am 05.12.2002 um 11:53 Uhr von isabeau editiert. ]



  • Hallo.

    Mit SetWindowPos() un Deinen Einstellungen, wird mein Eingabefeld nicht angezeigt.
    Ich hab es so programmiert, sobald das Eingabefeld den Focus verliert wird es geschlossen. Es kann also sein, das es hinter der Tabelle ist und somit gleich wieder den Focus verliert.

    Muß es noch anderen Einstellungen testen.

    Cu
    Oli


Anmelden zum Antworten