// Wenn man ein
TEdit
(mit AutoSize =
False) in der
Höhe
// ändert, dann kann man die Schrift nicht vertikal zentrieren.
// Nimmt man stattdessen ein TMemo, so erreicht man den Effekt
// bei Anwendung des folgenden Codes:
// Getestet mit D4 und D7 unter XP
type
TForm1 = class(TForm)
Edit1: TEdit;
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure Memo1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private-Deklarationen }
public
{ Publice-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure SetVCenter(M: TMemo; Hoehe: integer);
var
rt: TRect;
s: string;
oben: integer;
begin
s := M.Text;
M.Text := '';
M.Height := Hoehe;
oben := M.clientheight div 2 - M.Font.Size;
M.ScrollBars := ssNone;
M.WantReturns := false;
M.WordWrap := false;
rt := rect(0, oben, M.clientwidth, M.clientheight);
sendmessage(M.handle, em_setrect, 0, integer(@rt));
M.Text := TrimRight(s);
s := '';
if M.Parent.visible then M.SetFocus;
M.selstart := Length(M.Text);
end;
procedure Abfang(M: TMemo; var Key: Word);
var
amEnde: boolean;
lg: Integer;
begin
M.Text := Trimright(M.Text);
lg := Length(M.Text);
amEnde := M.selstart = lg;
case key of
VK_UP: Key := VK_LEFT;
VK_DOWN: begin
if not amEnde then Key := VK_RIGHT
else Key := 0;
end;
VK_RIGHT: if amEnde then Key := 0;
VK_END: begin
Key := 0;
M.selstart := lg;
end;
end;
end;
procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
Abfang(TMemo(Sender), Key);
end;
// Beispielaufruf
procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.Font.Size := 20; // z.B.
SetVCenter(Memo1, 100); // z.B.
end;
|