📄 iwwebgrid.pas
字号:
FSortSettings := TTIWRGSortSettings.Create(Self);
FStretchColumn := -1;
FHeaderStyle := hsRaised;
FSelectPersistent := True;
FRowOffset := 0;
FBands := TTIWAdvWebGridBands.Create(Self);
FGlyphs := TTIWRGGlyphs.Create(Self);
FColumnHeaderColor := clBtnFace;
FShowColumnHeader := True;
FHoverColor := clNone;
FHoverFontColor := clNone;
FSelectColor := clHighlight;
FSelectFontColor := clHighlightText;
FEditColor := clNone;
FActiveRowColor := clNone;
FActiveRowFontColor := clNone;
FDecimalPoint := '.';
FDateSeparator := '/';
FColumnHeaderFont := TIWFont.Create;
FFooterBorders := TTIWRGBorders.Create(Self);
FFooterBorders.FCollapsed := true;
FFooterFont := TIWFont.Create;
FFooterColor := clBtnFace;
Width := 384;
Height := 260;
FSelectList := TIntList.Create;
FDynEdits := TStringList.Create;
FDefaultRowHeight := 22;
FCache := TStringList.Create;
FPostData := TStringList.Create;
FActiveColumn := -1;
FRadioSelection := -1;
FCheckTruePicture := TIPicture.Create;
FCheckFalsePicture := TIPicture.Create;
FShowSelect := True;
FDirectPost := True;
FNodes := TIWGridNode.Create(Self);
FBackground := TIWGridBackground.Create;
FClientEvents := TIWGridClientEvents.Create;
if (csDesigning in ComponentState) then
begin
maxid := 0;
for i := 1 to Owner.ComponentCount do
if (Owner.Components[i - 1] is TTIWCustomWebGrid) then
begin
if Owner.Components[i - 1] <> Self then
if maxid <= (Owner.Components[i - 1] as TTIWCustomWebGrid).ID then
maxid := (Owner.Components[i - 1] as TTIWCustomWebGrid).ID + 1;
end;
ID := maxid;
end;
FOuterBorder := TTIWWebGridOuterBorder.Create;
FColumnHeaderBorders := TTIWRGBorders.Create(Self);
FColumnHeaderBorders.Collapsed := true;
FRowHeader := TTIWWebGridRowHeader.Create(Self);
FScroll := TTIWWebGridScroll.Create;
FSCroll.OnChange := ControllerChanged;
FScroll.FScrollbar3DLightColor := clNone;
FScroll.FScrollbarArrowColor := clNone;
FScroll.FScrollbarBaseColor := clNone;
FScroll.FScrollbarTrackColor := clNone;
FScroll.FScrollbarDarkshadowColor := clNone;
FScroll.FScrollbarFaceColor := clNone;
FScroll.FScrollbarHighlightColor := clNone;
FScroll.FScrollbarShadowColor := clNone;
FDetailStates := TIntList.Create;
if DesignMode then
begin
Columns.Add;
Columns.Add;
Columns.Add;
end;
if not (csDesigning in Componentstate) then
begin
{$IFDEF TMSIW51}
TIWServer.AddInternalFile('IW_JS_TMSGRID','/js/TMSGRID.js');
{$ELSE}
GIWServer.AddInternalFile('IW_JS_TMSGRID');
{$ENDIF}
end;
{$IFDEF TMSIW7}
SupportsPartial := true;
{$ENDIF}
end;
destructor TTIWCustomWebGrid.Destroy;
begin
ic.Free;
FController.Free;
FColumns.Free;
FRowHeader.Free;
FColumnHeaderFont.Free;
FFooterFont.Free;
FBands.Free;
FBorders.Free;
FOuterBorder.Free;
FColumnHeaderBorders.Free;
FFooterBorders.Free;
FIndicators.Free;
FSortSettings.Free;
FGlyphs.Free;
FSelectList.Free;
FDynEdits.Free;
FCache.Free;
FPostData.Free;
FCheckTruePicture.Free;
FCheckFalsePicture.Free;
FNodes.Free;
FBackground.Free;
FClientEvents.Free;
FScroll.Free;
FDetailStates.Free;
inherited;
end;
function TTIWCustomWebGrid.ImageHTML(const ASrc: string; AWidth, AHeight:
Integer; UseSize: Boolean; Hint: string): TIWHTMLTag;
begin
Result := TIWHTMLTag.CreateTag('IMG');
Result.AddStringParam('SRC', ASrc);
Result.AddStringParam('NAME', HTMLName);
Result.AddStringParam('ALIGN', 'MIDDLE');
Result.AddIntegerParam('BORDER', 0 {iif(UseBorder, 1, 0)});
//hint is set on TD tag, so no need to set it again on IMG tag
// if Hint <> '' then
// Result.AddStringParam('TITLE', Hint);
if (AWidth > 0) and UseSize then
Result.AddIntegerParam('WIDTH', AWidth);
if (DefaultRowHeight > 0) and (AHeight = 0) and UseSize then
Result.AddIntegerParam('HEIGHT', DefaultRowHeight)
else
begin
if (AHeight > 0) and UseSize then
Result.AddIntegerParam('HEIGHT', AHeight);
end;
end;
function TTIWCustomWebGrid.OutputBMP(ACacheName: string; ABitmap: TBitmap;
UseSize: Boolean; Hint: string): string;
var
TempFilename: string;
IWHTMLTag: TIWHTMLTag;
i: Integer;
begin
if ABitmap.Empty then
Result := '>'
else
begin
for i := 1 to FCache.Count do
begin
if pos(ACacheName + ';', FCache.Strings[i - 1]) = 1 then
begin
TempFileName := FCache.Strings[i - 1];
Delete(TempFileName, 1, Length(ACacheName) + 1);
Result := TempFileName;
Exit;
end;
end;
{$IFDEF TMSIW71}
TempFilename := TIWServerControllerBase.NewCacheFile('bmp',true);
{$ELSE}
TempFilename := TIWServerControllerBase.NewCacheFile('bmp');
{$ENDIF}
ABitmap.SaveToFile(TempFilename);
TempFileName := GetCacheDir(Self) + ExtractFilename(TempFilename);
IWHTMLTag := ImageHTML(TempFilename, ABitmap.Width, ABitmap.Height, UseSize, Hint);
Result := IWHTMLTag.Render;
IWHTMLTag.Free;
FCache.Add(ACacheName + ';' + Result);
end;
end;
function TTIWCustomWebGrid.OutputBMPEx(ACacheName: string; ABitmap: TBitmap;
UseSize: Boolean; Hint: string; Height, Width: Integer): string;
var
TempFilename: string;
IWHTMLTag: TIWHTMLTag;
i: Integer;
begin
if ABitmap.Empty then
Result := '>'
else
begin
for i := 1 to FCache.Count do
begin
if pos(ACacheName + ';', FCache.Strings[i - 1]) = 1 then
begin
TempFileName := FCache.Strings[i - 1];
Delete(TempFileName, 1, Length(ACacheName) + 1);
Result := TempFileName;
Exit;
end;
end;
{$IFDEF TMSIW71}
TempFilename := TIWServerControllerBase.NewCacheFile('bmp',true);
{$ELSE}
TempFilename := TIWServerControllerBase.NewCacheFile('bmp');
{$ENDIF}
ABitmap.SaveToFile(TempFilename);
TempFileName := GetCacheDir(Self) + ExtractFilename(TempFilename);
if (Width = 0) or (Height = 0) then
IWHTMLTag := ImageHTML(TempFilename, ABitmap.Width, ABitmap.Height, False, Hint)
else
IWHTMLTag := ImageHTML(TempFilename, Width, Height, UseSize, Hint);
Result := IWHTMLTag.Render;
IWHTMLTag.Free;
FCache.Add(ACacheName + ';' + Result);
end;
end;
function TTIWCustomWebGrid.GradientStyle(Color1,Color2: TIWColor; Direction: TTIWGradientDirection):string;
begin
if (Color1 <> clNone) and (Color2 <> clNone) then
Result := ' style="FILTER: progid:DXImageTransform.Microsoft.Gradient(GradientType=' +
IntToStr(1 - Integer(Direction)) + ', StartColorStr='#39 + HTMLClr(Color1) + #39', EndColorStr='#39 + HTMLClr(Color2) + #39');'
else
Result := ' style="';
end;
function TTIWCustomWebGrid.CellColor(Color,Color1,Color2: TIWColor; Direction: TTIWGradientDirection):string;
begin
if (Color1 <> clNone) and (Color2 <> clNone) then
Result := ' style="FILTER: progid:DXImageTransform.Microsoft.Gradient(GradientType=' +
IntToStr(1 - Integer(Direction)) + ', StartColorStr='#39 + HTMLClr(Color1) + #39', EndColorStr='#39 + HTMLClr(Color2) + #39');'
else
Result := ' style="background-color:' + HTMLClr(Color)+';';
end;
function TTIWCustomWebGrid.RaisedStyle:string;
begin
Result := ' border:1px solid;border-color:ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight;';
end;
function TTIWCustomWebGrid.OutputPic(ACacheName: string; APicture: TIPicture;
UseSize: Boolean; Hint: string): string;
var
TempFilename: string;
IWHTMLTag: TIWHTMLTag;
i: Integer;
begin
if APicture.Empty then
Result := '>'
else
begin
for i := 1 to FCache.Count do
begin
if Pos(ACacheName + ';', FCache.Strings[i - 1]) = 1 then
begin
TempFileName := FCache.Strings[i - 1];
Delete(TempFileName, 1, Length(ACacheName) + 1);
Result := TempFileName;
Exit;
end;
end;
if APicture.IsGIF then
{$IFDEF TMSIW71}
TempFilename := TIWServerControllerBase.NewCacheFile('gif',true)
{$ELSE}
TempFilename := TIWServerControllerBase.NewCacheFile('gif')
{$ENDIF}
else
{$IFDEF TMSIW71}
TempFilename := TIWServerControllerBase.NewCacheFile('jpg',true);
{$ELSE}
TempFilename := TIWServerControllerBase.NewCacheFile('jpg');
{$ENDIF}
APicture.SaveToFile(TempFilename);
TempFileName := GetCacheDir(Self) + ExtractFilename(TempFilename);
IWHTMLTag := ImageHTML(TempFilename, 0, 0, UseSize, Hint);
Result := IWHTMLTag.Render;
IWHTMLTag.Free;
FCache.Add(ACacheName + ';' + Result);
end;
end;
function TTIWCustomWebGrid.GetCellData(ACol, ARow: integer): string;
begin
// implemented in descendent grids
end;
function HTMLStrip(s: string): string;
var
TagPos: integer;
begin
Result := '';
// replace line breaks by linefeeds
while (pos('<BR>', uppercase(s)) > 0) do
s := StringReplace(s, '<BR>', chr(13) + chr(10), [rfIgnoreCase]);
while (pos('<HR>', uppercase(s)) > 0) do
s := StringReplace(s, '<HR>', chr(13) + chr(10), [rfIgnoreCase]);
// remove all other tags
while (VarPos('<', s, TagPos) > 0) do
begin
Result
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -