TStringGrid



  • Hallo,

    1. Was funktioniert nicht. Korrekte Fehlerbeschreibungen sind wichtig.
    2. Ist bei Options goEditing und nicht goAlwaysShowEditor gesetzt?



  • Wie akari schon geschrieben hat: TStringGrid::Options, goEditing bestimmt, ob das Grid bearbeitet werden kann.



  • Danke für die Schnellen Antworten. Leider möchte ich ja nur die letzte Spaltenreihe des StringGrids bearbeiten. Sobald ich

    void __fastcall TForm_Main::STringGrid1SelectCell(TObject *Sender, int ACol,
          int ARow, bool &CanSelect)
    {
    	if (ACol == 2)
        {
        	STringGrid1->EditorMode = true;
            STringGrid1->Options << goEditing;
    
        }
    }
    

    In den Quelltext einfüge ist es ja so, dass ich bei einmaliger anwahl der zweiten Spaltenreihe, grundsätzlich alle Zellen geändert werden können.
    Wenn ich allerdings

    STringGrid1->Options >> goEditing;
    

    wieder einfüge, kann ich nichts ändern. Gibt es dort einen Tip von euch, wie ich eine ganze Spaltenreihe ändern kann und den Rest nicht?



  • Nein Du kannst immer nur das komplette Grid editierbar machen. Wo ist denn das Problem? Abhänging von der Spalte, in die der User klickt, machst Du das Grid editierbar, oder eben nicht editierbar.

    void __fastcall TForm_Main::STringGrid1SelectCell(TObject *Sender, int ACol,
          int ARow, bool &CanSelect)
    {
        if (ACol == 2)
            StringGrid1->Options << goEditing;
        else
            StringGrid1->Options >> goEditing;
    }
    


  • Hallo

    Die Bedingung hat natürlich zwei Seiten. Desweiteren ist das mit dem "reinschieben" von Werten in VCL-Properties nicht so einfach.

    void __fastcall TForm_Main::STringGrid1SelectCell(TObject *Sender, int ACol,
          int ARow, bool &CanSelect)
    {
        if (ACol == 2)
        {
            StringGrid1->EditorMode = true;
            StringGrid1->Options = StringGrid1->Options << goEditing;
        }
        else
        {
            StringGrid1->EditorMode = false;
            StringGrid1->Options = StringGrid1->Options >> goEditing;
        }
    }
    

    bis bald
    akari



  • Ach klar,
    danke euch. Da hätte ich ja drauf kommen müssen.



  • StringGrid1->Options = StringGrid1->Options << goEditing;
    

    Zu meiner eigenen großen Überraschung funktioniert es in diesem Fall auch ohne die Zuweisung, also so, wie ein meinem Beispiel. Zumindest im BCB6.



  • Hallo

    Hm, im BCB5 gehts auch ohne extra Zuweisung... erstaunlich.

    bis bald
    akari



  • Habe nun ein weiteres Problem, welches ich nicht ganz beheben kann.
    Möchte ja nun die einegegeben Werte Überprüfen ob sie
    1. Zahlen Werte sind
    2. Nicht unter bzw. über einen Wertebereich kommen.

    In einem meiner Verusche habe ich dieses hier probiert. Leider völlig blöde und unpraktisch. Zusätzlich auch noch fehlerhaft.

    void __fastcall TForm_Main::STringGrid1SetEditText(TObject *Sender, int ACol,
          int ARow, const AnsiString Value)
    {
         if (Value < 0 || Value >1)
         {
          	STringGrid1->Cells[ACol][ARow] = "0";
         }
    }
    

    Hat jemand von euch ein Tip oder ein Beispiel?



  • Hallo

    siehe die Funktion StrToIntDef in der BCB-Hilfe

    bis bald
    akari



  • Klasse, das war ein guter Tip.
    Danke dir.



  • Das ist mir shon fast peinlich, aber ich habe noch eine, für euch, einfache Frage.

    Ich möchte nun die Anzahl der einzugebenen Zeichen auf eins beschränken und gleichzeitig verhindern das Buchstaben eingegben werden könnnen.

    Könntet ihr mir dabei nochmal helfen? Verspreche, ich werde versuchen dann nicht mehr fragen.
    Das ganze muss wohl bei 'OnSetEditText' passieren?



  • Hallo

    Siehe den Event TStringGrid::OnGetEditMask. Dort gibst du eine Maske an, wie du es bei TMaskEdit machen würdest.

    bis bald
    akari


Anmelden zum Antworten