TEdit-Objekt über Zelle von TStringGrid-Objekt positionieren



  • Hallo,
    war schon lange nicht mehr im Forum. Allerdings habe ich diesesmal wieder eine Frage.
    Ich Habe ein Objekt von der Klasse TStringGrid (SG_2000) und ein Objekt von der Klasse TEdit. Das Objekt von TEdit soll genau über der angeklickten Zelle erscheinen. Bis jetzt hatte es auch ganz gut geklapt. Leider musste ich nun feststellen, dass einige Leute nicht unter Windows die Standart DPI-Größe (96dpi) für die Schriftgröße wählen (stattdessen z.B. 120dpi). Daher stimmt meine Position nicht mehr. Hier erstmal der Quelltext:

    void __fastcall TForm_Main::PlaceEdit2000(void)
    {
    	TRect Rect = SG_2000->CellRect(SG_2000->Col,SG_2000->Row);
    	pEdit->Top = SG_2000->Top;
    	pEdit->Left = SG_2000->Left;
    	pEdit->Text = EmptyStr;
    	pEdit->Top = pEdit->Top + Rect.Top + SG_2000->GridLineWidth + 59;     //<<<<<<----- Problem
    	pEdit->Left = pEdit->Left + Rect.Left + SG_2000->GridLineWidth + 5;   //<<<<<<----- Problem
    	pEdit->Height = (Rect.Bottom - Rect.Top) + 1;
    	pEdit->Width = (Rect.Right - Rect.Left) + 0;
    	pEdit->Visible = true;
    	pEdit->Enabled = true;
    	pEdit->SetFocus();
    }
    

    Wie man sieht habe ich hier die Problemzeile gekenntzeichnet. Ich möchte nun die "+59" und die "+5" nicht mehr nutzen. Daher farge ich euch jetzt, ob es irgend eine andere Möglichkeit für die Positionierung gibt?
    Bitte helft mir.
    Danke!



  • Hallo,

    es gibt doch TStringGrid::ColWidths[]. Darin steht jeweils die Breite der einzelnen Spalten in Pixel. Die würde ich verwenden.



  • Hallo

    Siehe auch hier für eine komplette Demonstration des Inplace-Prinzips.

    bis bald
    akari



  • Erstmnal danke für die Hinweise und die Hilfe. Leider ist es so, dass ich nicht die Größe der Zelle benötige. Da das TEdit-Objekt die genaue größe der Zelle schon besitzt. Das Problem ist eigentlich, dass das TEdit-Objekt horizontal und vertikal abweicht. Habe daher nicht genau den Fehler beschrieben. Sorry.
    Die Seite mit dem Fallbeispiel beschreibt den gleichen Vorgang mit dem +59 un +5. Leider.



  • radian schrieb:

    Die Seite mit dem Fallbeispiel beschreibt den gleichen Vorgang mit dem +59 un +5. Leider.

    Seh ich nicht so?!?


Anmelden zum Antworten