Announcement

Collapse
No announcement yet.

TMemo-Komponente soll nicht den Focus erhalten

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • TMemo-Komponente soll nicht den Focus erhalten

    Ich hätte gerne so ein kleines Log-Element, was die letzten 3 Nachrichten (jemals eine pro Zeile) anzeigt. Der Benutzer soll nicht reinklicken können und auch nicht scrollen können.

    Ich dachte erst das Memo-Element scheint sehr gut geeignet für zu sein, jedoch hab ich einige Probleme festgestellt:
    Ich kann nicht verhindern, dass der Benutzer reinklickt (der Cursor wird angezeigt) oder einen Textteil markiert. Enabled auf false setzen löst dieses Problem zwar, aber dann ist der Text leider nicht mehr in der Farbe, die ich will.
    Außerdem habe ich festgestellt, das bei einem Memo die letzte Zeile immer leer ist, wenn ich eine neue Nachricht durch "Add" hinzufüge und ich scheine diese letzte Zeile nicht löschen zu können. Kann man irgendwie immer nach einem neuen Eintrag automatisch eine Zeile nach oben scrollen?

    Eventuell ist das Memo-Element einfach nicht geeignet dafür. Im Notfall könnte ich es auch über ein Label lösen, aber dort kann man nicht so schön neue Zeilen hinzufügen und automatisch nach unten scrollen.

    Gibt es C++ Builder Elemente die besser dafür geeignet sind?

  • #2
    Schon mal im TMemo "ReadOnly" gesetzt??
    Christian

    Comment


    • #3
      Ja das bringt aber nichts, man kann trotzdem noch reinklicken und der Cursor wird angezeigt und markieren kann man auch.

      Comment


      • #4
        Dann würde ich eine eigene Komponente von TMemo ableiten die deine Anforderungen erfüllt. Ggf. das Copy unterbinden
        Christian

        Comment


        • #5
          Wenn ich die Klasse ableite, welche Methoden muss ich denn dann überschreiben, damit das Memo nicht anklickbar ist?

          Comment


          • #6
            Nun den Focus darf es nicht mehr bekommen
            Christian

            Comment


            • #7
              Ja ich meine dazu müsste ich wissen in welcher Klasse es den Focus zugewiesen bekommt und wenn es nur über Ereignisse läuft müsste ich die Klasse ja nicht mal ableiten, sondern einfach im Ereignis den Focus entfernen, wobei ich mir da auch nicht ganz sicher bin, ob das geht.

              Comment


              • #8
                sondern einfach im Ereignis den Focus entfernen, wobei ich mir da auch nicht ganz sicher bin, ob das geht.
                Wie sollte das gehen? Wenn das Steuerelement das Ereignis verarbeitet, hat es schon den Focus. Des Weiteren gibt es m.E. kein Ereignis was dazu rausgereicht wird
                Christian

                Comment


                • #9
                  Ein Workaround ist bei einem OnEnter den Focus einem anderen Element zuzuweisen:

                  void __fastcall TForm1::Memo1Enter(TObject *Sender)
                  {
                  Button1->SetFocus();
                  }
                  //---------------------------------------------------------------------------
                  Christian

                  Comment


                  • #10
                    Hm das ist ja was ich meinte, somit hast du dir deine eigene Frage schon selbst beantwortet. ;-)
                    Ich bin mir nur nicht sicher, ob das so wirklich fehlerfrei funktioniert.

                    Comment


                    • #11
                      Mit dem setzenvon Read-only funktioniert das einwandfrei.

                      Ich bin mir nur nicht sicher, ob das so wirklich fehlerfrei funktioniert.
                      Da hilft einfügen und testen.

                      Wenn es bei DIR nicht läuft musst du dann nun wirklich eine eigene Komponente schreiben
                      Zuletzt editiert von Christian Marquardt; 18.09.2009, 16:17.
                      Christian

                      Comment


                      • #12
                        Von der Benutzung her funktioniert ReadOnly, aber trotzdem blinkt und springt der Cursor immer durch das Memo-Feld. ;-)

                        Comment


                        • #13
                          Siehe Beitrag 9, damit wird der Cursor nicht mehr gesetzt und das Markieren ist auch nicht mehr möglich
                          Zuletzt editiert von Christian Marquardt; 23.09.2009, 17:08. Reason: Rechtschreibung
                          Christian

                          Comment

                          Working...
                          X