Memofeld reaktivieren



  • Hi Leute,

    folgendes kleines Problem:

    Ich habe eine Anwendung geschrieben, in der ich ein TMemo verwende. Nachdem ich einen Buchstaben eingetippt habe sezte ich die Eigenschaft Memo->Enabled = false. Nach einer gewissen Zeit setze ich diese dann wieder auf true zurück. Jetzt ist aber der Cursor aus dem Memofeld verschwunden, und ich kann nicht mehr ohne neu reinzuklicken weiterschreiben. SetFocus alleine reich auch nicht aus, um nach dem Enablen den Cursor hinter dem letzten Zeichen zu positionieren.

    Was kann ich tun?



  • Schau dir mal die Eigenschaft "SelStart" von TMemo an.



  • SelStart = Wert; bringt keinen Erfolg.



  • F98 schrieb:

    SetFocus alleine reich auch nicht aus, um nach dem Enablen den Cursor hinter dem letzten Zeichen zu positionieren.

    Ist nicht nachzuvollziehen.
    SetFocus() bringt den Cursor wieder zum Vorschein, genau an der Stelle, an der er zuvor stand. Dito für das Durchschalten per Tab-Taste.

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      Memo1->Enabled ^= 1; // Ein/Ausschalten
      if (Memo1->Enabled)
        Memo1->SetFocus();
    }
    


  • Man könnte natürlich auch folgendes machen:

    Memo1->Enabled = !Memo1->Enabled;
    if (Memo1->CanFocus())
       Memo1->SetFocus();
    


  • Man könnte sich auch einen Knopf an die Backe nähen, was aber mehr weh tun würde. 😉
    Das war doch lediglich als Illustration gedacht, um zu zeigen, dass der Cursor durchaus ordnungsgemäss erscheint, nicht als Programmiervorschlag.



  • 😉 ...

    Aber ernsthaft, man sollte mit CanFocus() prüfen, ob einer Komponente mit SetFocus() der Fokus zugewiesen werdem kann. Spart einem die häßliche Fehlermeldung, sollte tatsächlich mal der Fall eintreten, dass die Komponente im Moment nicht den Fokus zugewiesen bekommen kann. Mach ich nur noch so...

    Grüße Joe_M.


Anmelden zum Antworten