home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2001 October
/
Chip_2001-10_cd1.bin
/
zkuste
/
delphi
/
kolekce
/
d56
/
TDSOFT.ZIP
/
TDSuperEdit.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
2001-05-30
|
8KB
|
332 lines
unit TDSuperEdit;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TTDSuperEdit = class(TEdit)
private
OldWidth, OldHeight: Cardinal;
OldColor: TColor;
FDialogFrame: Boolean;
FSizeBox: Boolean;
FMultiLine: Boolean;
FOnlyNumber: Boolean;
FAlignment: TAlignment;
FFloat: Boolean;
FHScroll: Boolean;
FVScroll: Boolean;
FOnFocusColor: TColor;
FToRightWinControl: TWinControl;
FToLeftWinControl: TWinControl;
FToUpWinControl: TWinControl;
FToDownWinControl: TWinControl;
FUseArrowNavigation: Boolean;
procedure SetDialogFrame(const Value: Boolean);
procedure SetSizeBox(const Value: Boolean);
procedure SetMultiLine(const Value: Boolean);
procedure SetOnlyNumber(const Value: Boolean);
procedure SetAlignment(const Value: TAlignment);
procedure SetFloat(const Value: Boolean);
procedure SetHScroll(const Value: Boolean);
procedure SetVScroll(const Value: Boolean);
procedure SetOnFocusColor(const Value: TColor);
procedure SetToDownWinControl(const Value: TWinControl);
procedure SetToLeftWinControl(const Value: TWinControl);
procedure SetToRightWinControl(const Value: TWinControl);
procedure SetToUpWinControl(const Value: TWinControl);
{ Private declarations }
protected
{ Protected declarations }
procedure CreateParams(var Params: TCreateParams); override;
procedure WMLBUTTONDOWN (var Msg: TMessage); message WM_LBUTTONDOWN;
procedure WMLBUTTONUP (var Msg: TMessage); message WM_LBUTTONUP;
procedure WMSETFOCUS (var Msg: TMessage); message WM_SETFOCUS;
procedure WMKILLFOCUS (var Msg: TMessage); message WM_KILLFOCUS;
procedure WMKEYDOWN (var Msg: TMessage); message WM_KEYDOWN;
procedure SaveSize;
procedure RestoreSize;
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
published
{ Published declarations }
property DialogFrame: Boolean read FDialogFrame write SetDialogFrame;
property SizeBox: Boolean read FSizeBox write SetSizeBox;
property MultiLine: Boolean read FMultiLine Write SetMultiLine;
property OnlyNumber: Boolean read FOnlyNumber write SetOnlyNumber;
property Alignment: TAlignment read FAlignment write SetAlignment;
property Float: Boolean read FFloat write SetFloat;
property HScroll: Boolean read FHScroll write SetHScroll;
property VScroll: Boolean read FVScroll write SetVScroll;
property OnFocusColor: TColor read FOnFocusColor write SetOnFocusColor;
property ToUpControl: TWinControl read FToUpWinControl write SetToUpWinControl;
property ToDownControl: TWinControl read FToDownWinControl write SetToDownWinControl;
property ToLeftControl: TWinControl read FToLeftWinControl write SetToLeftWinControl;
property ToRightControl: TWinControl read FToRightWinControl write SetToRightWinControl;
property UseArrowNavigation: Boolean read FUseArrowNavigation write FUseArrowNavigation;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('TDSoft', [TTDSuperEdit]);
end;
{ TTDSuperEdit }
constructor TTDSuperEdit.Create(AOwner: TComponent);
begin
inherited;
FOnFocusColor:=clGreen;
FUseArrowNavigation:=True;
end;
procedure TTDSuperEdit.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.Style:= WS_CHILD or WS_OVERLAPPED;
if FFloat then
Params.Style:= Params.Style or WS_CAPTION
else
Params.Style:= Params.Style and (not WS_CAPTION);
if FMultiLine then
Params.Style:= Params.Style or ES_MULTILINE
else
Params.Style:= Params.Style and (not ES_MULTILINE);
if FDialogFrame then
Params.Style:= Params.Style or WS_DLGFRAME
else
Params.Style:= Params.Style and (not WS_DLGFRAME);
if FSizeBox then
Params.Style:= Params.Style or WS_SIZEBOX
else
Params.Style:= Params.Style and (not WS_SIZEBOX);
if FOnlyNumber then
Params.Style:= Params.Style or ES_NUMBER
else
Params.Style:= Params.Style and (not ES_NUMBER);
if FHScroll then
Params.Style:= Params.Style or WS_HSCROLL
else
Params.Style:= Params.Style and (not WS_HSCROLL);
if FVScroll then
Params.Style:= Params.Style or WS_VSCROLL
else
Params.Style:= Params.Style and (not WS_VSCROLL);
case FAlignment of
taLeftJustify:
begin
Params.Style:= Params.Style or ES_LEFT;
Params.Style:= Params.Style and (not ES_RIGHT);
Params.Style:= Params.Style and (not ES_CENTER);
end;
taCenter:
begin
Params.Style:= Params.Style or ES_CENTER;
Params.Style:= Params.Style and (not ES_RIGHT);
Params.Style:= Params.Style and (not ES_LEFT);
end;
taRightJustify:
begin
Params.Style:= Params.Style or ES_RIGHT;
Params.Style:= Params.Style and (not ES_LEFT);
Params.Style:= Params.Style and (not ES_CENTER);
end;
end;
end;
procedure TTDSuperEdit.RestoreSize;
begin
SetWindowPos(handle,HWND_TOP,
Left,Top,OldWidth,OldHeight,
SWP_SHOWWINDOW );
end;
procedure TTDSuperEdit.SaveSize;
begin
OldWidth:=Width;
OldHeight:=Height;
end;
procedure TTDSuperEdit.SetAlignment(const Value: TAlignment);
begin
FAlignment := Value;
SaveSize;
RecreateWnd;
RestoreSize;
end;
procedure TTDSuperEdit.SetDialogFrame(const Value: Boolean);
begin
FDialogFrame := Value;
SaveSize;
RecreateWnd;
RestoreSize;
end;
procedure TTDSuperEdit.SetFloat(const Value: Boolean);
begin
FFloat := Value;
if Value then FDialogFrame:=Value;
SaveSize;
RecreateWnd;
RestoreSize;
end;
procedure TTDSuperEdit.SetHScroll(const Value: Boolean);
begin
FHScroll := Value;
SaveSize;
RecreateWnd;
RestoreSize;
end;
procedure TTDSuperEdit.SetMultiLine(const Value: Boolean);
begin
FMultiLine := Value;
SaveSize;
RecreateWnd;
RestoreSize;
end;
procedure TTDSuperEdit.SetOnFocusColor(const Value: TColor);
begin
FOnFocusColor := Value;
end;
procedure TTDSuperEdit.SetOnlyNumber(const Value: Boolean);
begin
FOnlyNumber := Value;
SaveSize;
RecreateWnd;
RestoreSize;
end;
procedure TTDSuperEdit.SetSizeBox(const Value: Boolean);
begin
FSizeBox := Value;
SaveSize;
RecreateWnd;
RestoreSize;
end;
procedure TTDSuperEdit.SetToDownWinControl(const Value: TWinControl);
begin
FToDownWinControl := Value;
end;
procedure TTDSuperEdit.SetToLeftWinControl(const Value: TWinControl);
begin
FToLeftWinControl := Value;
end;
procedure TTDSuperEdit.SetToRightWinControl(const Value: TWinControl);
begin
FToRightWinControl := Value;
end;
procedure TTDSuperEdit.SetToUpWinControl(const Value: TWinControl);
begin
FToUpWinControl := Value;
end;
procedure TTDSuperEdit.SetVScroll(const Value: Boolean);
begin
FVScroll := Value;
SaveSize;
RecreateWnd;
RestoreSize;
end;
procedure TTDSuperEdit.WMKEYDOWN(var Msg: TMessage);
begin
if not FUseArrowNavigation then Exit;
case Msg.wParam of
VK_RETURN:
begin
SelStart:=0;
SelLength:=0;
end;
VK_UP:
if Assigned(ToUpControl) then
begin
ToUpControl.SetFocus;
end;
VK_DOWN:
if Assigned(ToDownControl) then
begin
ToDownControl.SetFocus;
end;
VK_LEFT:
if Assigned(ToLeftControl) then
if (SelStart=0) or (SelLength=Length(Text)) then
begin
ToLeftControl.SetFocus;
end;
VK_RIGHT:
if Assigned(ToRightControl) then
if Length(Text)=SelStart + SelLength then
begin
ToRightControl.SetFocus;
end;
end;
inherited;
end;
procedure TTDSuperEdit.WMKILLFOCUS(var Msg: TMessage);
begin
inherited;
Color:=OldColor;
end;
procedure TTDSuperEdit.WMLBUTTONDOWN(var Msg: TMessage);
begin
Windows.SetFocus(handle);
inherited;
end;
procedure TTDSuperEdit.WMLBUTTONUP(var Msg: TMessage);
begin
inherited;
Perform(WM_PAINT,0,0);
end;
procedure TTDSuperEdit.WMSETFOCUS(var Msg: TMessage);
begin
inherited;
OldColor:=Color;
Color:=FOnFocusColor;
end;
end.