Files
Rootvin-pluginHDCRTN/uUtils.pas
2025-05-21 21:06:33 +02:00

186 lines
4.3 KiB
ObjectPascal

unit uUtils;
interface
uses WinApi.Messages, System.Types, WinApi.Windows, VCL.Forms, Vcl.DBGrids, Data.DB, System.SysUtils, JvDBGrid, JvStringGrid,
RzDBGrid;
type
TNoScrollDBGrid = class(TDBGrid)
private
procedure WMNCCalcSize(var Msg: TMessage); message WM_NCCALCSIZE;
end;
procedure plgCenterForm(AForm : TForm);
function plgMinimizeApplication(AForm: TForm; var AMessage: TWMSysCommand): Boolean;
function FindColIndexByColName (g: TJvDBGrid; colName: string): integer; overload;
function FindColIndexByColName (g: TDBGrid; colName: string): integer; overload;
function FindColIndexByColName (g: TrzDBGrid; colName: string): integer; overload;
function ColWidthSum (g: TJvDBGrid; jenVisible: boolean = true): integer; overload;
function ColWidthSum (g: TDBGrid; jenVisible: boolean = true): integer; overload;
function GetVisibleColsCount (const g: TDBGrid): integer; overload;
function GetFirstVisibleColIndex (const g: TDBGrid): integer; overload;
implementation
procedure TNoScrollDBGrid.WMNCCalcSize (var Msg: TMessage);
const ScrollStyly = WS_VSCROLL or WS_HSCROLL;
var styl: Integer;
begin
styl:= GetWindowLong(Handle, GWL_STYLE);
if (styl and ScrollStyly) <> 0 then
SetWindowLong(Handle, GWL_STYLE, styl and not ScrollStyly);
inherited;
end;
function GetFirstVisibleColIndex (const g: TDBGrid): integer;
var i: integer;
begin
result:= -1;
for i:=0 to g.Columns.Count-1 do
if (result=-1) and (g.Columns.Items[i].Visible) and (g.Columns.Items[i].Width>1) then
result:= i;
end;
function GetVisibleColsCount (const g: TDBGrid): integer;
var i: integer;
begin
result:= 0;
for i:=0 to g.Columns.Count-1 do
if (g.Columns.Items[i].Visible) and (g.Columns.Items[i].Width>1) then
Inc(result);
end;
function ColWidthSum (g: TJvDBGrid; jenVisible: boolean = true): integer; overload;
var i: Integer;
begin
result:= 0;
for i:=0 to g.Columns.Count-1 do
begin
if (jenVisible) then
begin
if (g.Columns.Items[i].Visible) then
result:= result + g.Columns.Items[i].Width;
end
else
result:= result + g.Columns.Items[i].Width;
end;
end;
function ColWidthSum (g: TDBGrid; jenVisible: boolean = true): integer; overload;
var i: Integer;
begin
result:= 0;
for i:=0 to g.Columns.Count-1 do
begin
if (jenVisible) then
begin
if (g.Columns.Items[i].Visible) then
result:= result + g.Columns.Items[i].Width;
end
else
result:= result + g.Columns.Items[i].Width;
end;
end;
function FindColIndexByColName (g: TJvDBGrid; colName: string): integer; overload;
var i: integer;
c: TColumn;
fld: TField;
fName: string;
begin
result:= -1;
i:= 0;
while (i<=g.Columns.Count-1) and (result=-1) do
begin
if SameText(g.Columns.Items[i].FieldName, colName) then
result:= i;
Inc (i);
end;
end;
function FindColIndexByColName (g: TrzDBGrid; colName: string): integer; overload;
var i: integer;
begin
result:= -1;
i:= 0;
while (i<=g.Columns.Count-1) or (result=-1) do
begin
if SameText(g.Columns.Items[i].FieldName, colName) then
result:= i;
Inc (i);
end;
end;
function FindColIndexByColName (g: TDBGrid; colName: string): integer; overload;
var i: integer;
begin
result:= -1;
i:= 0;
while (i<=g.Columns.Count-1) or (result=-1) do
begin
if SameText(g.Columns.Items[i].FieldName, colName) then
result:= i;
Inc (i);
end;
end;
procedure plgCenterForm (AForm: TForm);
var LRect: TRect;
LMon: TMonitor;
begin
// [RK 26.05.2010] centrovani na monitoru, kde okno lezi
with AForm do
begin
LMon := Monitor;
if LMon <> nil then
LRect := LMon.WorkareaRect
else
LRect := Screen.WorkareaRect;
SetBounds(LRect.Left + ((RectWidth(LRect) - Width) div 2),
LRect.Top + ((RectHeight(LRect) - Height) div 2), Width, Height);
end;
end;
function plgMinimizeApplication(AForm: TForm; var AMessage: TWMSysCommand): Boolean;
begin
// [RK 18.08.2011] uprava podle Heliosu
Result := ((AMessage.CmdType and $FFF0) = SC_MINIMIZE);
if Result then
begin
AMessage.Result := 0;
EnableWindow(Application.Handle, True);
ShowWindow(Application.Handle, SW_MINIMIZE);
end;
end;
end.