Position StringGrid auf Form



  • Hallo,

    ich habe ein StringGrid, das je nach Eingabe des Benutzes die Größe m*n erzeugt.
    Wie kann ich denn das StringGrid so positionieren, damit es bei jeder Größe < Größe der Form zentriert auf diesem liegt?

    Ist es besser ein StringGrid auf dem Form vorher zu platzieren und es dann zu verändern, oder erst bei Eingabe des Benutzers ein StringGrid in der Unit zu erzeugen? (Wie würde man das machen?);

    Danke für jede Antwort
    Todd



  • Zentrieren geht mit der einfachen Formel (nachdem du die Größe gesetzt hast)

    StringGrid->Left = (Form->Width - StringGrid->Width) / 2;
    StringGrid->Top  = (Form->Height - StringGrid->Height) / 2;
    

    Wenn du das StringGrid erst nach Eingabe anzeigen willst, dann kannst du ja im Objektinspektor auf "Visible" auf false setzen (oder im Konstruktor des Forms) und dann nach der Eingabe dann "Visible" auf true bzw. Show() aufrufen.



  • Danke für die schnelle Antwort.
    Werde es gleich mal versuchen.

    Danke Schön und viele Grüße
    Todd



  • Nachdem ich die Position nun gut bestimmt hab, kommt gleich das nächste Problem.

    Wie kann ich denn genau die Breite und Höhe des gesamten StringGrids so anpassen, damit der "Rahmen" genau um die Felder liegt und keine ScrollBars erzeugt werden (gesetzt auf ssNone) und kein Platz zwischen dem letzten rechten und letzten untersten Feld entsteht.

    Habe das so gelöst, aber je nachdem was der Benutzer an Rowcount bzw. Colcount eingibt schlägt es fehl:

    //Auszug aus der Unit

    void __fastcall TForm2::Button1Click(TObject Sender)
    {
    int anzz;int anzs;int i;int left;int top;int strgw;int strgh;
    if (F2Edit1->Text!="" & F2Edit2->Text!="")
    {anzz=StrToInt(F2Edit1->Text)+1;
    anzs=StrToInt(F2Edit2->Text)+1;
    Form3->Show();
    Form2->Close();
    Form3->StringGrid1->ColCount=anzs;
    Form3->StringGrid1->RowCount=anzz;
    Form3->StringGrid1->FixedColor=clWhite;
    strgw=anzs
    (Form3->StringGrid1->DefaultColWidth)+?; //hier liegt das Problem
    strgh=anzz*(Form3->StringGrid1->DefaultRowHeight)+?;//hier liegt das Problem
    Form3->StringGrid1->Width=strgw;
    Form3->StringGrid1->Height=strgh;
    left=(Form3->Width-Form3->StringGrid1->Width)/2;
    top=(Form3->Height-Form3->StringGrid1->Height)/2;
    if (left<0)
    left=0;
    if (top<0)
    top=0;
    Form3->StringGrid1->Left=left;
    Form3->StringGrid1->Top=top;
    Form3->VertScrollBar->Range=strgh;
    Form3->HorzScrollBar->Range=strgw;
    //-----------------------------------------------------------------------------

    Liebe Grüße
    Todd



  • du hast zwar die Größe der Zellen verwendet aber die Linien dazwischen fehlen noch, schau mal nach GridLineWidth in der BCB-Hilfe



  • richtig! 🙂

    '?' = (anzz + 3) bzw. (anss + 3);

    Danke!
    Todd



  • In die Klammer einfügen:

    strgw=anzs*(Form3->StringGrid1->DefaultColWidth + Form3->StringGrid1->GridLineWidth);
    

Anmelden zum Antworten