Programmieren mit C++

Borland C++ Builder

Oberflächen

Memo-Felder

Wie kann man Spalte und Zeile des Cursors in einem Memo-Feld ermitteln?

Frage

Die TMemo-Komponente selbst enthält kein Property für den Zugriff auf die aktuelle Position. Um diese zu erhalten, muß im Ereignis OnKeyUp mittels API-Funktionen nachgeholfen werden. Die nachfolgenden Zeilen liefern in CurLine und CurCol die aktuelle Zeile und Spalte sowie in CurLineLen die Länge der aktuellen Zeile:

int CurLine, CurCol, CurLineLen;
 
CurLine    = SendMessage(Memo1.Handle,
                          EM_LINEFROMCHAR,
                          Memo1.SetStart, 0);
CurCol     = SendMessage(Memo1.Handle,
                          EM_LINEINDEX, 
                          CurLine, 0);
CurLineLen = SendMessage(Memo1.Handle,
                          EM_LINELENGTH,
                          CurCol, 0);
CurCol     = Memo1.SelStart - CurCol;

Lösung

Wie erhalte ich die erste sichtbare Zeile eines Memo-Felds?

Frage

Die erste sichtbare Zeile eines Memo-Felds kann jederzeit über SendMessage ermittelt werden:

int FirstVisibleLine = SendMessage
       (Memo1.Handle,
       EM_GETFIRSTVISIBLELINE, 0, 0);              

Lösung

Kann in einem Memo-Feld ein Rand gesetzt werden?

Frage

Es ist durchaus möglich, auch in Memo-Feldern einen Rand zu setzen, allerdings wird dies nicht von TMemo direkt unterstützt. Man muß wieder einmal auf direkte Calls zurückgreifen. Über EM_SETRECT kann ein Rand in Pixel gesetzt werden. Die nachfolgende Funktion setzt alle Ränder, sofern der entsprechende Parameter ungleich -1 ist. Abschließend erfolgt ein Refresh der Anzeige:

void SetMemoBorder(TMEMO Memo,
                   int L, int T, 
                   int R, int B)
{
 
  TRECT BorderRect;
 
  SendMessage(Memo.Handle,
              EM_GETRECT, 0,
              (LPARAM) &BorderRect );
 
  if (L != -1) BorderRect.Left   = L;
  if (T != -1) BorderRect.Top    = T;
  if (R != -1) BorderRect.Right  = R;
  if (B != -1) BorderRect.Bottom = B;
 
  SendMessage(Memo.Handle,
              EM_SETRECT, 0,
              (LPARAM) &BorderRect );
 
  Memo->Refresh;
}

Lösung





Sachgebiet


© 2009-2012 by Alojado Publishing. Alle Rechte vorbehalten. Ausgewiesene Marken gehören ihren jeweiligen Eigentümern.
Mit der Benutzung dieser Seite erkennen Sie die Nutzungsbedingungen und die Datenschutzerklärung an. Der Betreiber übernimmt keine Haftung für den Inhalt verlinkter externer Internetseiten.
Seite erzeugt 2012-05-20 02:37:02 von textarchiv.alojado.de