261 lines
6.1 KiB
ObjectPascal
261 lines
6.1 KiB
ObjectPascal
unit OLETable;
|
|
|
|
interface
|
|
|
|
uses KOLEdb, KOL, ListEdit, Windows, Messages;
|
|
|
|
type
|
|
TKOLDataSource = PDataSource;
|
|
TKOLSession = PSession;
|
|
TKOLQuery = PQuery;
|
|
|
|
PListData =^TListData;
|
|
TKOLListData = PListData;
|
|
TListData = object(TObj)
|
|
Owner: PControl;
|
|
LView: PControl;
|
|
OWind: longint;
|
|
NWind: longint;
|
|
fRowC: TOnEvent;
|
|
fQuer: PQuery;
|
|
protected
|
|
destructor destroy; virtual;
|
|
procedure NewWndProc(var Msg: TMessage);
|
|
function GetColor: TColor;
|
|
procedure SetColor(C: TColor);
|
|
function GetCtl3D: boolean;
|
|
procedure SetCtl3D(C: boolean);
|
|
function GetCursor: HIcon;
|
|
procedure SetCursor(C: HIcon);
|
|
function GetEnabled: boolean;
|
|
procedure SetEnabled(E: boolean);
|
|
function GetTransparent: boolean;
|
|
procedure SetTransparent(T: boolean);
|
|
function GetVisible: boolean;
|
|
procedure SetVisible(V: boolean);
|
|
function GetFont: PGraphicTool;
|
|
function GetTextBkColor: TColor;
|
|
procedure SetTextBkColor(C: TColor);
|
|
function GetBkColor: TColor;
|
|
procedure SetBkColor(C: TColor);
|
|
public
|
|
function SetAlign( AAlign: TControlAlign ): PListData;
|
|
function SetPosition(X, Y: integer): PListData;
|
|
function SetSize(X, Y: integer): PListData;
|
|
function CenterOnParent: PListData;
|
|
|
|
procedure Open;
|
|
procedure LVColAdd( const aText: String; aalign: TTextAlign; aWidth: Integer );
|
|
|
|
property Color: TColor read GetColor write SetColor;
|
|
property Ctl3D: boolean read GetCtl3D write SetCtl3D;
|
|
property Cursor: HIcon read GetCursor write SetCursor;
|
|
property Enabled: boolean read GetEnabled write SetEnabled;
|
|
property Transparent: boolean read GetTransparent write SetTransparent;
|
|
property Visible: boolean read GetVisible write SetVisible;
|
|
property Font: PGraphicTool read GetFont;
|
|
property LVTextBkColor: TColor read GetTextBkColor write SetTextBkColor;
|
|
property LVBkColor: TColor read GetBkColor write SetBkColor;
|
|
|
|
property Query: PQuery read fQuer write fQuer;
|
|
property OnRowChanged: TOnEvent read fRowC write fRowC;
|
|
end;
|
|
|
|
function NewKOLTable(s: string): PDataSource;
|
|
function NewListData(AParent: PControl; Style: TListViewStyle; Options: TListViewOptions;
|
|
ImageListSmall, ImageListNormal, ImageListState: PImageList): PListData;
|
|
|
|
implementation
|
|
|
|
uses objects;
|
|
|
|
function NewKOLTable;
|
|
begin
|
|
Result := NewDataSource(s);
|
|
end;
|
|
|
|
function NewListData;
|
|
begin
|
|
New(Result, Create);
|
|
Aparent.Add2AutoFree(Result);
|
|
Result.Owner := Aparent;
|
|
Result.LView := NewListEdit(AParent, Style, Options, ImageListSmall, ImageListNormal, ImageListState);
|
|
Result.fQuer := nil;
|
|
Result.OWind := GetWindowLong(Aparent.Handle, GWL_WNDPROC);
|
|
Result.NWind := LongInt(MakeObjectInstance(Result.NewWndProc));
|
|
SetWindowLong(Aparent.Handle, GWL_WNDPROC, Result.NWind);
|
|
end;
|
|
|
|
destructor TListData.destroy;
|
|
begin
|
|
SetWindowLong(Owner.Handle, GWL_WNDPROC, OWind);
|
|
FreeObjectInstance(pointer(NWind));
|
|
inherited;
|
|
end;
|
|
|
|
procedure TListData.NewWndProc;
|
|
var i: integer;
|
|
n: integer;
|
|
begin
|
|
case Msg.Msg of
|
|
WM_ROWCHANG:
|
|
begin
|
|
n := LView.LVCurItem;
|
|
fQuer.CurIndex := LView.LVItemData[n];
|
|
for i := 1 to fQuer.ColCount - 1 do begin
|
|
fQuer.FieldAsStr[i] := LView.LVItems[n, i - 1];
|
|
LView.LVItems[n, i - 1] := fQuer.FieldAsStr[i];
|
|
end;
|
|
fQuer.Post;
|
|
if Assigned(fRowC) then fRowC(@self);
|
|
end;
|
|
end;
|
|
Msg.Result := CallWindowProc(Pointer(OWind), Owner.Handle, Msg.Msg, Msg.wParam, Msg.lParam);
|
|
end;
|
|
|
|
function TListData.SetAlign;
|
|
begin
|
|
Result := @self;
|
|
LView.SetAlign(AAlign);
|
|
end;
|
|
|
|
function TListData.SetPosition;
|
|
begin
|
|
Result := @self;
|
|
LView.Left := X;
|
|
LView.Top := Y;
|
|
end;
|
|
|
|
function TListData.SetSize;
|
|
begin
|
|
Result := @self;
|
|
LView.Width := X;
|
|
LView.Height := Y;
|
|
end;
|
|
|
|
function TListData.CenterOnParent;
|
|
begin
|
|
Result := @self;
|
|
LView.CenterOnParent;
|
|
end;
|
|
|
|
function TListData.GetColor;
|
|
begin
|
|
Result := LView.Color;
|
|
end;
|
|
|
|
procedure TListData.SetColor;
|
|
begin
|
|
LView.Color := C;
|
|
end;
|
|
|
|
function TListData.GetCtl3D;
|
|
begin
|
|
Result := LView.Ctl3D;
|
|
end;
|
|
|
|
procedure TListData.SetCtl3D;
|
|
begin
|
|
LView.Ctl3D := C;
|
|
end;
|
|
|
|
function TListData.GetCursor;
|
|
begin
|
|
Result := LView.Cursor;
|
|
end;
|
|
|
|
procedure TListData.SetCursor;
|
|
begin
|
|
LView.Cursor := C;
|
|
end;
|
|
|
|
function TListData.GetEnabled;
|
|
begin
|
|
Result := LView.Enabled;
|
|
end;
|
|
|
|
procedure TListData.SetEnabled;
|
|
begin
|
|
LView.Enabled := E;
|
|
end;
|
|
|
|
function TListData.GetTransparent;
|
|
begin
|
|
Result := LView.Transparent;
|
|
end;
|
|
|
|
procedure TListData.SetTransparent;
|
|
begin
|
|
LView.Transparent := T;
|
|
end;
|
|
|
|
function TListData.GetVisible;
|
|
begin
|
|
Result := LView.Visible;
|
|
end;
|
|
|
|
procedure TListData.SetVisible;
|
|
begin
|
|
LView.Visible := V;
|
|
end;
|
|
|
|
function TListData.GetFont;
|
|
begin
|
|
Result := LView.Font;
|
|
end;
|
|
|
|
procedure TListData.LVColAdd;
|
|
begin
|
|
LView.LVColAdd(aText, aAlign, aWidth);
|
|
end;
|
|
|
|
function TListData.GetTextBkColor;
|
|
begin
|
|
Result := LView.LVTextBkColor;
|
|
end;
|
|
|
|
procedure TListData.SetTextBkColor;
|
|
begin
|
|
LView.LVTextBkColor := C;
|
|
end;
|
|
|
|
function TListData.GetBkColor;
|
|
begin
|
|
Result := LView.LVBkColor;
|
|
end;
|
|
|
|
procedure TListData.SetBkColor;
|
|
begin
|
|
LView.LVBkColor := C;
|
|
end;
|
|
|
|
procedure TListData.Open;
|
|
var i: integer;
|
|
n: integer;
|
|
s: string;
|
|
d: double;
|
|
f: integer;
|
|
begin
|
|
if fQuer <> nil then begin
|
|
if fQuer.Session.DataSource.Initialized then begin
|
|
fQuer.Open;
|
|
fQuer.First;
|
|
f := fQuer.FirstColumn;
|
|
while not fQuer.EOF do begin
|
|
s := fQuer.FieldAsStr[f];
|
|
i := LView.LVItemAdd(s);
|
|
LView.LVItemData[i] := fQuer.CurIndex;
|
|
for n := f + 1 to fQuer.ColCount - 1 do begin
|
|
try
|
|
LView.LVItems[i, n - f] := fQuer.FieldAsStr[n];
|
|
except
|
|
LView.LVItems[i, n - f] := '';
|
|
end;
|
|
end;
|
|
fQuer.Next;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
end. |