FreePascal Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
FreePacal 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

FreePascal 팁&트릭
[21] 라자루스용 EhLib의 몇 가지 버그 해결하기 ( 9.5.018 버전 기준 )
어느좋은날 [freepascal] 1220 읽음    2020-06-13 22:20
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번을 제외한 내용을 짧은 영어를 동원해서 개발자에게 보냈는데 아직 답변이 없어서 일단 팁란에 올려놓습니다. ^^

+ -

관련 글 리스트
21 라자루스용 EhLib의 몇 가지 버그 해결하기 ( 9.5.018 버전 기준 ) 어느좋은날 1220 2020/06/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.