EhLib 9.3 이후 버전에서는 라자루스를 지원합니다. 그런데 9.5.018 버전을 기준으로 사용상 불편한 몇 가지 버그가 있어서 그 해결 방법을 올려봅니다.
1. 디자인시 Column의 OnGetCellParams Event에 코드를 작성한 후 다시 폼을 열고 Column을 수정하려고보면 해당 Event가 지워진 상태로 나타납니다. 물론 코드가 지워진건 아니고 객체의 속성에서만 빠져있기때문에 다시 넣어주면 됩니다. Column 수정 작업을 할때마다 매번 다시 지정하는게 불편하면 폼 생성시 해당 Event가 등록되어있는지 체크한 후 없으면 등록하는 코드를 넣어주면 됩니다.
if DBGridEh1.Columns[0].OnGetCellParams = nil then
DBGridEh1.Columns[0].OnGetCellParams := @DBGridEh1Columns0GetCellParams;
2. 복사한 텍스트를 붙여넣기하면 두 번 붙여넣기 되는 버그가 있습니다. - 9.5.027 버전에서 해결 됨.
3. Filter에 Like가 지원 안 되는데 사용자 설정 창에 해당 문구가 그대로 나타나는 문제가 있습니다. Like가 지원 안 된다기보다는 델파이의 DataSet의 Filter 처럼 '*'로 Like와 같은 처리가 가능합니다. 따라서 DBGridEhSimpleFilterDlg.pas의 소스를 직접 고쳐서 문구만 변경해주면 자연스럽게 해결이 됩니다.
// DBGridEhSimpleFilterDlg.pas
procedure TDBGridEhSimpleFilterDialog.ResourceLanguageChanged;
// 2020.05.31 by K.I.S -- begin
{$IFDEF FPC}
var
l_Gap: Integer;
{$ENDIF}
// 2020.05.31 by K.I.S -- end
begin
Caption := EhLibLanguageConsts.DBGridEhSimpleFilterDialog_Caption;
Label1.Caption := EhLibLanguageConsts.DBGridEhSimpleFilterDialog_ShowRecordsWhere;
// 2020.05.31 by K.I.S -- begin
{$IFDEF FPC}
Label2.Visible := False;
Label3.Caption := EhLibLanguageConsts.DBGridEhSimpleFilterDialog_SeveralCharsWildcardInfo;
Label3.Caption := StringReplace(Label3.Caption, '%', '*', [rfReplaceAll]);
l_Gap := Label3.Top - Label2.Top;
Label3.Top := Label2.Top;
bOk.Top := bOk.Top - l_Gap;
bCancel.Top := bCancel.Top - l_Gap;
Self.Height := Self.Height - l_Gap;
{$ELSE}
Label2.Caption := EhLibLanguageConsts.DBGridEhSimpleFilterDialog_OneCharWildcardInfo;
Label3.Caption := EhLibLanguageConsts.DBGridEhSimpleFilterDialog_SeveralCharsWildcardInfo;
{$ENDIF}
// 2020.05.31 by K.I.S -- end
rbOr.Caption := EhLibLanguageConsts.DBGridEhSimpleFilterDialog_Or_Caption;
rbAnd.Caption := EhLibLanguageConsts.DBGridEhSimpleFilterDialog_And_Caption;
bOk.Caption := EhLibLanguageConsts.OKButtonEh;
bCancel.Caption := EhLibLanguageConsts.CancelButtonEh;
end;
4. 라자루스에는 Delphi의 AlignWithMargins 및 Margins와 비슷한 처리를 할 수 있는 BorderSpacing이라는 속성이 있는데 EhLib에 있는 컴퍼넌트에는 모두 빠져있습니다.
BorderSpacing 속성을 각 컴퍼넌트의 published에 추가해주면 BorderSpacing을 사용할 수 있습니다.
// DBGridsEh.pas : TDBGridEh
// DBCtrlsEh.pas : TDBEditEh, TDBDateTimeEditEh, TDBComboBoxEh, TDBNumberEditEh, TDBCheckBoxEh, TDBMemoEh, TDBImageEh, TDBRadioGroupEh
// DBVertGridsEh.pas : TDBVertGridEh
// PlannerCalendarPickerEh.pas : TPlannerCalendarPickerEh
// PivotGridsEh.pas : TPivotGridEh
// PlannersEh.pas : TPlannerControlEh
published
:
{$IFDEF FPC}
property BorderSpacing; // 2020.05.31 by K.I.S
{$ELSE}
버그는 아니지만 DBGridEh Filter의 크기가 고정되어있어서 불편한데 Column 크기에 맞게 변경되게 하려면 DBGridsEh.pas에 아래 코드를 추가해주면 됩니다.
// DBGridsEh.pas
procedure TCustomDBGridEh.InTitleFilterDropDownFormForRect(Column: TColumnEh; ForRect: TRect);
:
ADropDownForm := DBGridFilterDropDownFormProc();
ADropDownForm.Font.Assign(Font); // 2017.04.15 by K.I.S
ADropDownForm.BiDiMode := BidiMode;
ADropDownForm.Column := Column;
// 2020.05.31 by K.I.S -- begin
if Column.Width < 200 then ADropDownForm.Width := 200
else ADropDownForm.Width := Column.Width;
// 2020.05.31 by K.I.S -- end
1번과 2번을 제외한 내용을 짧은 영어를 동원해서 개발자에게 보냈는데 아직 답변이 없어서 일단 팁란에 올려놓습니다. ^^