//edit by cxg. 2008-04-19 10:01:52
//增加保存"显示标题"procedure TCustomDBGridEh.SaveColumnsLayoutProducer(ARegIni: TObject; Section: String; DeleteSection: Boolean);var I: Integer; S: String;begin if (ARegIni is TRegIniFile) then TRegIniFile(ARegIni).EraseSection(Section) else if DeleteSection then TCustomIniFile(ARegIni).EraseSection(Section);with Columns do
begin for I := 0 to Count - 1 do begin if ARegIni is TRegIniFile then TRegIniFile(ARegIni).WriteString(Section, Format('%s.%s', [Name, Items[I].FieldName]), Format('%d,%d,%d,%d,%d,%d,%d,%s', [Items[I].Index, Items[I].Width, Integer(Items[I].Title.SortMarker), Integer(Items[I].Visible), Items[I].Title.SortIndex, Items[I].DropDownRows, Items[I].DropDownWidth,Items[I].Title.Caption])) { TRegIniFile(ARegIni).WriteString(Section, Format('%s.%s', [Name, Items[I].FieldName]), Format('%d,%d,%d,%d,%d,%d,%d', [Items[I].Index, Items[I].Width, Integer(Items[I].Title.SortMarker), Integer(Items[I].Visible), Items[I].Title.SortIndex, Items[I].DropDownRows, Items[I].DropDownWidth])) } else begin S := Format('%d,%d,%d,%d,%d,%d,%d,%s', [Items[I].Index, Items[I].Width, Integer(Items[I].Title.SortMarker), Integer(Items[I].Visible), Items[I].Title.SortIndex, Items[I].DropDownRows, Items[I].DropDownWidth,Items[i].Title.Caption]); { S := Format('%d,%d,%d,%d,%d,%d,%d', [Items[I].Index, Items[I].Width, Integer(Items[I].Title.SortMarker), Integer(Items[I].Visible), Items[I].Title.SortIndex, Items[I].DropDownRows, Items[I].DropDownWidth]); } if S <> '' then begin if ((S[1] = '"') and (S[Length(S)] = '"')) or ((S[1] = '''') and (S[Length(S)] = '''')) then S := '"' + S + '"'; end; end; if ARegIni is TCustomIniFile then TCustomIniFile(ARegIni).WriteString(Section, Format('%s.%s', [Name, Items[I].FieldName]), S); end; end;end;//edit by cxg. 2008-04-19 10:02:13
//增加恢复"显示标题"procedure TCustomDBGridEh.RestoreColumnsLayoutProducer(ARegIni: TObject; Section: String; RestoreParams: TColumnEhRestoreParams);type TColumnInfo = record Column: TColumnEh; EndIndex: Integer; SortMarker: TSortMarkerEh; SortIndex: Integer; end; PColumnArray = ^TColumnArray; TColumnArray = array[0..0] of TColumnInfo;const Delims = [' ', ','];var I, J: Integer; S: string; ColumnArray: array of TColumnInfo; AAutoFitColWidth: Boolean;begin AAutoFitColWidth := False; BeginUpdate; try if (AutoFitColWidths) then begin AutoFitColWidths := False; AAutoFitColWidth := True; end; with Columns do begin SetLength(ColumnArray, Count); try for I := 0 to Count - 1 do begin if (ARegIni is TRegIniFile) then S := TRegIniFile(ARegIni).ReadString(Section, Format('%s.%s', [Name, Items[I].FieldName]), '') else S := TCustomIniFile(ARegIni).ReadString(Section, Format('%s.%s', [Name, Items[I].FieldName]), ''); ColumnArray[I].Column := Items[I]; ColumnArray[I].EndIndex := Items[I].Index; if S <> '' then begin ColumnArray[I].EndIndex := StrToIntDef(ExtractWord(1, S, Delims), ColumnArray[I].EndIndex); if (crpColWidthsEh in RestoreParams) then Items[I].Width := StrToIntDef(ExtractWord(2, S, Delims), Items[I].Width); if (crpSortMarkerEh in RestoreParams) then Items[I].Title.SortMarker := TSortMarkerEh(StrToIntDef(ExtractWord(3, S, Delims), Integer(Items[I].Title.SortMarker))); if (crpColVisibleEh in RestoreParams) then Items[I].Visible := Boolean(StrToIntDef(ExtractWord(4, S, Delims), Integer(Items[I].Visible))); if (crpSortMarkerEh in RestoreParams) then ColumnArray[I].SortIndex := StrToIntDef(ExtractWord(5, S, Delims), 0); if (crpDropDownRowsEh in RestoreParams) then Items[I].DropDownRows := StrToIntDef(ExtractWord(6, S, Delims), Items[I].DropDownRows); if (crpDropDownWidthEh in RestoreParams) then Items[I].DropDownWidth := StrToIntDef(ExtractWord(7, S, Delims), Items[I].DropDownWidth); Items[I].Title.Caption:=ExtractWord(8, S, Delims);//add by cxg end; end; if (crpSortMarkerEh in RestoreParams) then for I := 0 to Count - 1 do Items[I].Title.SortIndex := ColumnArray[I].SortIndex; if (crpColIndexEh in RestoreParams) then for I := 0 to Count - 1 do for J := 0 to Count - 1 do if ColumnArray[J].EndIndex = I then begin ColumnArray[J].Column.Index := ColumnArray[J].EndIndex; Break; end;finally
//FreeMem(Pointer(ColumnArray)); SetLength(ColumnArray, 0); end; end; finally EndUpdate; if (AAutoFitColWidth = True) then AutoFitColWidths := True else LayoutChanged; end;end;