1
0
Files
aarre
applications
bindings
components
ZVDateTimeCtrls
acs
beepfp
chelper
cmdline
cmdlinecfg
colorpalette
csvdocument
epiktimer
fpsound
fpspreadsheet
freetypepascal
geckoport
gradcontrols
iosdesigner
iphonelazext
jujiboutils
jvcllaz
kcontrols
lazbarcodes
manualdock
mplayer
multithreadprocs
nvidia-widgets
onguard
orpheus
tests
ORBLUEDOT.bmp
ORBTNCAL.bmp
ORBTNCLC.bmp
ORCOLUMNMOVECURSOR.cur
ORLEFTARROW.bmp
ORLEFTARROWS.bmp
ORREDDOT.bmp
ORREVERT.bmp
ORRIGHTARROW.bmp
ORRIGHTARROWS.bmp
ORROWMOVECURSOR.cur
ORTCCHECKGLYPHS.bmp
ORTCCOMBOARROW.bmp
ORTODAY.bmp
OrphStatus.html
README.txt
TO32FLEXEDIT.bmp
TO32TCFLEXEDIT.bmp
TOVCCALENDAR.bmp
TOVCCONTROLLER.bmp
TOVCDATEEDIT.bmp
TOVCLABEL.bmp
TOVCROTATEDLABEL.bmp
TOVCSIMPLEFIELD.bmp
TOVCSPINNER.bmp
TOVCTABLE.bmp
TOVCTCBITMAP.bmp
TOVCTCCHECKBOX.bmp
TOVCTCCOLHEAD.bmp
TOVCTCCOMBOBOX.bmp
TOVCTCGLYPH.bmp
TOVCTCICON.bmp
TOVCTCMEMO.bmp
TOVCTCROWHEAD.bmp
TOVCTCSIMPLEFIELD.bmp
TOVCTCSTRING.bmp
TOVCURL.bmp
TOVCVIRTUALLISTBOX.bmp
alltests-carbon.sh
alltests-gtk.sh
alltests-win.bat
makebaseres.bat
makeregres.bat
mymin.pas
mymisc.pas
myovcreg.pas
myovctbpe1.lfm
myovctbpe1.lrs
myovctbpe1.pas
myovctbpe2.lfm
myovctbpe2.lrs
myovctbpe2.pas
o32bordr.pas
o32editf.pas
o32flxed.pas
o32intdeq.pas
o32intlst.pas
o32ovldr.pas
o32pvldr.pas
o32rxngn.pas
o32rxvld.pas
o32sr.inc
o32sr.pas
o32tcflx.pas
o32vldtr.pas
o32vlop1.pas
o32vlreg.pas
o32vpool.pas
orpheus.lpk
orpheus.pas
ovc.inc
ovcabot0.lfm
ovcabot0.lrs
ovcabot0.pas
ovcbase.lrs
ovcbase.pas
ovcbase.res
ovcbcalc.pas
ovcbordr.pas
ovccal.pas
ovccalc.pas
ovccaret.pas
ovcclrcb.pas
ovccmbx.pas
ovccmd.pas
ovccolor.pas
ovcconst.pas
ovcdata.pas
ovcdate.pas
ovcdrag.pas
ovcedcal.pas
ovcedclc.pas
ovceditf.pas
ovcedpop.pas
ovcedtim.pas
ovcef.pas
ovcexcpt.pas
ovcintl.pas
ovclabel.pas
ovclbl0.lfm
ovclbl0.lrs
ovclbl0.pas
ovclbl1.lfm
ovclbl1.lrs
ovclbl1.pas
ovclbl2.pas
ovcmisc.pas
ovcnf.pas
ovcpb.pas
ovcreg.lrs
ovcrlbl.pas
ovcsc.pas
ovcsf.pas
ovcspary.pas
ovcstr.pas
ovctable.pas
ovctbclr.pas
ovctbcls.pas
ovctbpe1.pas
ovctbpe2.pas
ovctbrws.pas
ovctcary.pas
ovctcbef.pas
ovctcbmp.pas
ovctcbox.pas
ovctccbx.pas
ovctcedt.pas
ovctcell.pas
ovctcgly.pas
ovctchdr.pas
ovctcico.pas
ovctcmmn.pas
ovctcsim.pas
ovctcstr.pas
ovctgpns.pas
ovctgres.pas
ovctsell.pas
ovcurl.pas
ovcuser.pas
ovcver.pas
ovcvlb.pas
powerpdf
rgbgraphics
richmemo
richview
rtfview
rx
smnetgradient
spktoolbar
svn
tdi
thtmlport
tparadoxdataset
tvplanit
virtualtreeview
virtualtreeview-new
xdev_toolkit
zlibar
examples
lclbindings
wst
lazarus-ccr/components/orpheus/ovctcgly.pas

469 lines
14 KiB
ObjectPascal
Raw Normal View History

{*********************************************************}
{* OVCTCGLY.PAS 4.06 *}
{*********************************************************}
{* ***** BEGIN LICENSE BLOCK ***** *}
{* Version: MPL 1.1 *}
{* *}
{* The contents of this file are subject to the Mozilla Public License *}
{* Version 1.1 (the "License"); you may not use this file except in *}
{* compliance with the License. You may obtain a copy of the License at *}
{* http://www.mozilla.org/MPL/ *}
{* *}
{* Software distributed under the License is distributed on an "AS IS" basis, *}
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License *}
{* for the specific language governing rights and limitations under the *}
{* License. *}
{* *}
{* The Original Code is TurboPower Orpheus *}
{* *}
{* The Initial Developer of the Original Code is TurboPower Software *}
{* *}
{* Portions created by TurboPower Software Inc. are Copyright (C)1995-2002 *}
{* TurboPower Software Inc. All Rights Reserved. *}
{* *}
{* Contributor(s): *}
{* *}
{* ***** END LICENSE BLOCK ***** *}
{$I OVC.INC}
{$B-} {Complete Boolean Evaluation}
{$I+} {Input/Output-Checking}
{$P+} {Open Parameters}
{$T-} {Typed @ Operator}
{.W-} {Windows Stack Frame}
{$X+} {Extended Syntax}
unit ovctcgly;
{-Orpheus Table Cell - Glyph type}
interface
uses
{$IFNDEF LCL} Windows, Messages, {$ELSE} LclIntf, LMessages, LclType, MyMisc, {$ENDIF}
SysUtils, Graphics, Classes, Controls,
OvcTCmmn, OvcTCell, OvcTGRes, OvcTCBmp;
type
TOvcTCGlyphEdit = class(TCustomControl)
protected {private}
{.Z+}
FValue : Integer;
FCell : TOvcBaseTableCell;
FRow : TRowNum;
FCol : TColNum;
FCellAttr : TOvcCellAttributes;
{.Z-}
{$IFDEF LCL}
FCtl3D : Boolean;
{$ENDIF}
protected
{.Z+}
procedure SetValue(V : integer);
procedure WMGetDlgCode(var Msg : TMessage); message WM_GETDLGCODE;
procedure WMKeyDown(var Msg : TWMKey); message WM_KEYDOWN;
procedure WMKillFocus(var Msg : TWMKillFocus); message WM_KILLFOCUS;
procedure WMLButtonDown(var Msg : TWMMouse); message WM_LBUTTONDOWN;
procedure WMSetFocus(var Msg : TWMSetFocus); message WM_SETFOCUS;
{.Z-}
public
constructor Create(AOwner : TComponent); override;
procedure Paint; override;
property CellOwner : TOvcBaseTableCell
read FCell write FCell;
property Value : integer
read FValue write SetValue;
{$IFDEF LCL}
property Ctl3D : Boolean read FCtl3D write FCtl3D;
{$ENDIF}
end;
TOvcTCCustomGlyph = class(TOvcTCBaseBitMap)
protected {private}
{.Z+}
FCellGlyphs : TOvcCellGlyphs;
FEdit : TOvcTCGlyphEdit;
{.Z-}
protected
{.Z+}
function GetCellEditor : TControl; override;
procedure SetCellGlyphs(CBG : TOvcCellGlyphs);
procedure GlyphsHaveChanged(Sender : TObject);
{painting}
procedure tcPaint(TableCanvas : TCanvas;
const CellRect : TRect;
RowNum : TRowNum;
ColNum : TColNum;
const CellAttr : TOvcCellAttributes;
Data : pointer); override;
{.Z-}
{properties}
property CellGlyphs : TOvcCellGlyphs
read FCellGlyphs write SetCellGlyphs;
public
{create/destroy}
constructor Create(AOwner : TComponent); override;
destructor Destroy; override;
function CreateEditControl : TOvcTCGlyphEdit; virtual;
function CanAssignGlyphs(CBG : TOvcCellGlyphs) : boolean; virtual;
function EditHandle : THandle; override;
procedure EditHide; override;
procedure EditMove(CellRect : TRect); override;
procedure SaveEditedData(Data : pointer); override;
procedure StartEditing(RowNum : TRowNum; ColNum : TColNum;
CellRect : TRect;
const CellAttr : TOvcCellAttributes;
CellStyle: TOvcTblEditorStyle;
Data : pointer); override;
procedure StopEditing(SaveValue : boolean;
Data : pointer); override;
end;
TOvcTCGlyph = class(TOvcTCCustomGlyph)
published
{properties inherited from custom ancestor}
property AcceptActivationClick default True;
property Access default otxDefault;
property Adjust default otaDefault;
property CellGlyphs;
property Color;
property Hint;
property Margin default 4;
property ShowHint default False;
property Table;
property TableColor default True;
{events inherited from custom ancestor}
property OnClick;
property OnDragDrop;
property OnDragOver;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnKeyDown;
property OnKeyPress;
property OnKeyUp;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnOwnerDraw;
end;
implementation
{===TOvcTCCustomGlyph creation/destruction===========================}
constructor TOvcTCCustomGlyph.Create(AOwner : TComponent);
begin
inherited Create(AOwner);
FCellGlyphs := TOvcCellGlyphs.Create;
FCellGlyphs.OnCfgChanged := GlyphsHaveChanged;
FAcceptActivationClick := true;
end;
{--------}
destructor TOvcTCCustomGlyph.Destroy;
begin
FCellGlyphs.Free;
inherited Destroy;
end;
{--------}
function TOvcTCCustomGlyph.CanAssignGlyphs(CBG : TOvcCellGlyphs) : boolean;
begin
Result := true;
end;
{--------}
function TOvcTCCustomGlyph.CreateEditControl : TOvcTCGlyphEdit;
begin
Result := TOvcTCGlyphEdit.Create(FTable);
end;
{--------}
function TOvcTCCustomGlyph.GetCellEditor : TControl;
begin
Result := FEdit;
end;
{--------}
procedure TOvcTCCustomGlyph.GlyphsHaveChanged(Sender : TObject);
begin
tcDoCfgChanged;
end;
{--------}
procedure TOvcTCCustomGlyph.SetCellGlyphs(CBG : TOvcCellGlyphs);
begin
if CanAssignGlyphs(CBG) then
FCellGlyphs.Assign(CBG);
end;
{====================================================================}
{===TOvcTCCustomGlyph painting================================}
procedure TOvcTCCustomGlyph.tcPaint(TableCanvas : TCanvas;
const CellRect : TRect;
RowNum : TRowNum;
ColNum : TColNum;
const CellAttr : TOvcCellAttributes;
Data : pointer);
var
B : ^integer absolute Data;
BitMapInfo : TCellBitMapInfo;
begin
{set up a bitmap info record}
with BitMapInfo do
begin
BM := FCellGlyphs.BitMap;
ActiveCount := FCellGlyphs.ActiveGlyphCount;
Count := FCellGlyphs.GlyphCount;
if (Data = nil) then
begin
if (csDesigning in ComponentState) then
Index := (RowNum mod ActiveCount) {for testing purposes}
else
Index := -1
end
else
Index := B^;
if (Index >= ActiveCount) then
Index := pred(ActiveCount);
end;
inherited tcPaint(TableCanvas, CellRect, RowNum, ColNum, CellAttr, @BitMapInfo);
end;
{====================================================================}
{===TOvcTCCustomGlyph editing========================================}
function TOvcTCCustomGlyph.EditHandle : THandle;
begin
if Assigned(FEdit) then
Result := FEdit.Handle
else
Result := 0;
end;
{--------}
procedure TOvcTCCustomGlyph.EditHide;
begin
if Assigned(FEdit) then
with FEdit do
begin
SetWindowPos(FEdit.Handle, HWND_TOP,
0, 0, 0, 0,
SWP_HIDEWINDOW or SWP_NOREDRAW or SWP_NOZORDER);
end;
end;
{--------}
procedure TOvcTCCustomGlyph.EditMove(CellRect : TRect);
var
EditHandle : HWND;
begin
if Assigned(FEdit) then
begin
EditHandle := FEdit.Handle;
with CellRect do
SetWindowPos(EditHandle, HWND_TOP,
Left, Top, Right-Left, Bottom-Top,
SWP_SHOWWINDOW or SWP_NOREDRAW or SWP_NOZORDER);
InvalidateRect(EditHandle, nil, false);
UpdateWindow(EditHandle);
end;
end;
{--------}
procedure TOvcTCCustomGlyph.SaveEditedData(Data : pointer);
begin
if Assigned(Data) then
Integer(Data^) := FEdit.Value;
end;
{--------}
procedure TOvcTCCustomGlyph.StartEditing(RowNum : TRowNum; ColNum : TColNum;
CellRect : TRect;
const CellAttr : TOvcCellAttributes;
CellStyle: TOvcTblEditorStyle;
Data : pointer);
begin
FEdit := CreateEditControl;
with FEdit do
begin
CellOwner := Self;
if Data = nil then
Value := 0
else
Value := Integer(Data^);
FRow := RowNum;
FCol := ColNum;
FCellAttr := CellAttr;
Color := CellAttr.caColor;
Ctl3D := false;
case CellStyle of
tes3D : Ctl3D := true;
end;{case}
Left := CellRect.Left;
Top := CellRect.Top;
Width := CellRect.Right - CellRect.Left;
Height := CellRect.Bottom - CellRect.Top;
Hint := Self.Hint;
ShowHint := Self.ShowHint;
Parent := FTable;
Visible := true;
TabStop := false;
OnClick := Self.OnClick;
OnDblClick := Self.OnDblClick;
OnDragDrop := Self.OnDragDrop;
OnDragOver := Self.OnDragOver;
OnEndDrag := Self.OnEndDrag;
OnEnter := Self.OnEnter;
OnExit := Self.OnExit;
OnKeyDown := Self.OnKeyDown;
OnKeyPress := Self.OnKeyPress;
OnKeyUp := Self.OnKeyUp;
OnMouseDown := Self.OnMouseDown;
OnMouseMove := Self.OnMouseMove;
OnMouseUp := Self.OnMouseUp;
end;
end;
{--------}
procedure TOvcTCCustomGlyph.StopEditing(SaveValue : boolean;
Data : pointer);
begin
if SaveValue and Assigned(Data) then
Integer(Data^) := FEdit.Value;
FEdit.Free;
FEdit := nil;
end;
{====================================================================}
{---TOvcTCGlyphEdit===========================================}
constructor TOvcTCGlyphEdit.Create(AOwner : TComponent);
begin
inherited Create(AOwner);
ControlStyle := ControlStyle - [csDoubleClicks];
end;
{--------}
procedure TOvcTCGlyphEdit.Paint;
var
R : TRect;
begin
{$IFNDEF LCL}
Windows.GetClientRect(Handle, R);
{$ELSE}
LclIntf.GetClientRect(Handle, R);
{$ENDIF}
FCell.Paint(Canvas, R, FRow, FCol, FCellAttr, @FValue);
end;
{--------}
procedure TOvcTCGlyphEdit.SetValue(V : integer);
begin
if (V <> FValue) then
begin
if (V < 0) then
V := 0
else if (V >= TOvcTCGlyph(CellOwner).CellGlyphs.ActiveGlyphCount) then
V := TOvcTCGlyph(CellOwner).CellGlyphs.ActiveGlyphCount;
FValue := V;
if HandleAllocated then
begin
Invalidate;
Update;
end;
end;
end;
{--------}
procedure TOvcTCGlyphEdit.WMGetDlgCode(var Msg : TMessage);
begin
Msg.Result := DLGC_WANTARROWS;
if CellOwner.TableWantsTab then
Msg.Result := Msg.Result or DLGC_WANTTAB;
if CellOwner.TableWantsEnter then
Msg.Result := Msg.Result or DLGC_WANTALLKEYS;
end;
{--------}
procedure TOvcTCGlyphEdit.WMKeyDown(var Msg : TWMKey);
var
GridReply : TOvcTblKeyNeeds;
GridUsedIt : boolean;
begin
GridUsedIt := false;
GridReply := otkDontCare;
if (CellOwner <> nil) then
GridReply := CellOwner.FilterTableKey(Msg);
case GridReply of
otkMustHave :
begin
CellOwner.SendKeyToTable(Msg);
GridUsedIt := true;
end;
otkWouldLike :
if Msg.CharCode <> VK_SPACE then
begin
CellOwner.SendKeyToTable(Msg);
GridUsedIt := true;
end;
end;{case}
if not GridUsedIt then
begin
inherited;
if (Msg.CharCode = VK_SPACE) then
begin
inc(FValue);
if (FValue >= TOvcTCGlyph(FCell).FCellGlyphs.ActiveGlyphCount) then
FValue := 0;
Invalidate;
Update;
if ((@TOvcTCGlyph(FCell).FOnClick) <> nil) then
OnClick(Self);
end
else if (Msg.CharCode = VK_BACK) then
begin
dec(FValue);
if (FValue < 0) then
FValue := pred(TOvcTCGlyph(FCell).FCellGlyphs.ActiveGlyphCount);
Invalidate;
Update;
if ((@TOvcTCGlyph(FCell).FOnClick) <> nil) then
OnClick(Self);
end;
end;
end;
{--------}
procedure TOvcTCGlyphEdit.WMLButtonDown(var Msg : TWMMouse);
begin
inc(FValue);
if (FValue >= TOvcTCGlyph(FCell).FCellGlyphs.ActiveGlyphCount) then
FValue := 0;
Invalidate;
Update;
inherited;
end;
{--------}
procedure TOvcTCGlyphEdit.WMKillFocus(var Msg : TWMKillFocus);
begin
inherited;
CellOwner.PostMessageToTable(ctim_KillFocus, Msg.FocusedWnd, 0);
end;
{--------}
procedure TOvcTCGlyphEdit.WMSetFocus(var Msg : TWMSetFocus);
begin
inherited;
CellOwner.PostMessageToTable(ctim_SetFocus, Msg.FocusedWnd, 0);
end;
{====================================================================}
end.