UNIT Unit1;
{$MODE OBJFPC}{$H+}{$J-}
Interface
USES
Classes, SysUtils, Forms, Controls, LCLType, ExtCtrls, StdCtrls, Types;
TYPE
TForm1 = Class(TForm)
Label1: TLabel;
Procedure FormCreate (Sender: TObject);
Procedure FormKeyDown (Sender: TObject; Var Key: Word;
Shift : TShiftState);
Procedure FormMouseWheelUp (Sender: TObject; Shift: TShiftState;
MousePos: TPoint; Var Handled: Boolean);
Procedure FormMouseWheelDown (Sender: TObject; Shift: TShiftState;
MousePos: TPoint; Var Handled: Boolean);
Procedure ScrollUp (cSpeed: Cardinal);
Procedure ScrollDown (cSpeed: Cardinal);
PRIVATE
iFontHeight: Integer;
End;
VAR
Form1: TForm1;
Implementation
{$R *.LFM}
Procedure TForm1.FormCreate(Sender: TObject);
Var
str: String;
i : Integer;
Begin
DoubleBuffered:= True;
KeyPreview := True;
For i:= 1 To 500
Do str:= str+'Hello World Hello Hello Hello'+IntToStr(i)+sLineBreak;
Label1.Caption:= str+'END of TEXT';
Label1.SetBounds(0, 0, ClientWidth, ClientHeight);
iFontHeight:= Label1.Canvas.TextHeight('HITMqQiyYöÖ');
End;
Procedure TForm1.ScrollUp(cSpeed: Cardinal);
Var
c: Cardinal;
Begin
For c:= 0 To cSpeed
Do
Begin
If Label1.Top >= 0 Then Exit;
Label1.Top:= Label1.Top + iFontHeight;
End;
End;
Procedure TForm1.ScrollDown(cSpeed: Cardinal);
Var
c: Cardinal;
Begin
For c:= 0 To cSpeed
Do
Begin
If Label1.Top <= ClientHeight - Label1.Height Then Exit;
Label1.Top:= Label1.Top - iFontHeight;
End;
End;
Procedure TForm1.FormKeyDown(
Sender: TObject; Var Key: Word; Shift: TShiftState);
Begin
If Not (ssCTRL In Shift)
Then
Begin
If Key = VK_UP
Then ScrollUp(1);
If Key = VK_DOWN
Then ScrollDown(1);
End;
If (ssCtrl In Shift)
Then
Begin
If Key = VK_UP
Then ScrollUp(10);
If Key = VK_DOWN
Then ScrollDown(10);
End;
End;
Procedure TForm1.FormMouseWheelUp(Sender: TObject; Shift: TShiftState;
MousePos: TPoint; Var Handled: Boolean);
Var
Key: Word;
Begin
Key:= VK_UP;
FormKeyDown(Self, Key, Shift);
End;
Procedure TForm1.FormMouseWheelDown(Sender: TObject; Shift: TShiftState;
MousePos: TPoint; Var Handled: Boolean);
Var
Key: Word;
Begin
Key:= VK_DOWN;
FormKeyDown(Self, Key, Shift);
End;
END.