델파이 XE6 버전 이후, 처음으로 파이어몽키를 사용해볼 생각을 하게되었습니다. 일단, 과거 2006년경 작업했던 프로그램을 재작성해보고 있는데요. 여기저기 문제점들이 터져나오네요. ^^
기존 프로그램 구성은 홈페이지 + 웹서비스 미들웨어(ISAPI) + 클라이언트 입니다. DB 는 MySQL 입니다. 과거 델파이 2005 에서 작업한 프로그램인데요. 일단, 새로이 추가된 DataSnap Server 로 미들웨어를 구성하고 파이어몽키로 다이내믹한 UI 작업을 해보고 있습니다.(추후, 정리해서... 별도 포스팅하겠습니다.)
일단, Frame 으로 별도 창을 만들어 사용해보았는데요. 탭키로 컨트롤 간 이동이 되지 않더라구요. 관련 버그는 Update 1 에서 고쳐졌다고하는데 아직 확인해보지 못했습니다.(123635 Tab Key does not work in Frames FireMonkey) 그리고 페이스북에 글을 남긴적이 있는데... 세벌식 한글 입력을 사용할 경우, 콤마나 스페이스 등 한글 자모와 관련없는 키입력에 문제가 있습니다. 두번을 연속해서 입력해야되는 등...
그리고 오늘 포스팅 주제인데요. MySQL 의 기본 문자셋이 UTF-8 로 세팅되어있는 반면, 파이어몽키에서의 문자열 기본은 UnicodeString (UTF-16) 입니다. 일단, TSQLConnection 에서 ServerCharSet 을 추가하고 utf8 로 설정합니다.
일단 이렇게하면, TEdit 등에서 한글은 깨지지 않고 출력됩니다. 하지만, TMemo 에서는 한글이 깨져 나오더군요. 별 수 없이 추적을 해보았습니다. 그리고 응급처치를 했습니다.(델마당 등 커뮤니티에서는 변태상속이라고 부르죠? 제 개인적으로는 데코레이터 패턴이랑 유사한 부분이 있어 데코레이터로 네임스페이스를 분류해서 사용합니다. 주로, 컴포넌트 등에 버그가 있을 때 패치 방법으로 많이 쓰고 있습죠. ^^)
unit Decorator.TWideMemoField;
interface
uses
System.SysUtils, System.Classes, Data.Db;
type
TWideMemoField = class(Data.DB.TWideMemoField)
protected
function GetAsWideString: string; override;
procedure SetAsWideString(const Value: string); override;
end;
implementation
{ TWideMemoField }
function TWideMemoField.GetAsWideString: string;
var
Len: Integer;
LStream: TStream;
Data: AnsiString;
begin
LStream := DataSet.CreateBlobStream(Self, bmRead);
try
Len := LStream.Size;
SetString(Data, nil, Len div SizeOf(AnsiChar));
LStream.ReadBuffer(Pointer(Data)^, Len);
finally
LStream.Free;
end;
Result := UTF8ToString(Data);
end;
procedure TWideMemoField.SetAsWideString(const Value: string);
begin
SetAsBytes(TEncoding.UTF8.GetBytes(Value));
end;
end.
상기 유닛을 interface 영역에 추가해주면, 일단 한글 문제는 해결이 됩니다. 제가 처한 급한 불만 끄면되기에... 전체적으로 문제가 없는 방법인지는 모르겠습니다. ^^ 해야할 작업들이 너무 많아서... 이 외에도 자잘한 버그들이 있는데 이래저래 잡아가면서 할 수는 있더군요. 완성도 측면에서 좀 아쉬운 부분이 있지만... 망했다 정도까지는 아닌 것 같습니다. 처음 봤을때 보다는 확실히 나아진 부분이 보이네요. UI 작업에 있어 상상하며 구현할 수 있는 재미가 있다고할까요? ^^
현재 테스트 삼아 작업해보고 있는 UI 의 스샷입니다.
'프로그래밍 > PC' 카테고리의 다른 글
Visual Studio 2022 gRPC 서버 TLS 사용 (0) | 2022.02.21 |
---|---|
Visual Studio 2022 gRPC 클라이언트 개발 (0) | 2022.02.06 |
FPC 로 OS 커널 만들기... - 3 - (0) | 2014.04.30 |
FPC 오브젝트(object) 형 (0) | 2014.04.17 |
FPC 로 OS 커널 만들기... - 2 - (0) | 2014.04.11 |
댓글