한글 자소
function DivHan(Han : String) : String;
const
ChoSung: WideString = 'ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ';
JungSung: WideString = 'ㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠㅡㅢㅣ';
JongSung: WideString = ' ㄱㄲㄳㄴㄵㄶㄷㄹㄺㄻㄼㄽㄾㄿㅀㅁㅂㅄㅅㅆㅇㅈㅊㅋㅌㅍㅎ';
var
i : Integer;
Temp : WideString;
WC : Integer;
IntChoSung, IntJungSung, IntJongSung : Integer;
begin
Temp := Han;
for i := 1 to Length(Temp) do
begin
WC := Ord(Temp[i]) - $AC00;
IntChoSung := WC div (21 * 28);
IntJungSung := (WC Mod (21 * 28)) div 28;
IntJongSung := WC mod (21 * 28) mod 28;
Result := Result + ChoSung[IntChoSung + 1] + JungSung[IntJungSung + 1] + JongSung[IntJongSung + 1];
end;
end;
예제)
procedure TAutoManinForm.Button1Click(Sender: TObject);
begin
EditHanGul2.Text := DivHan(EditHangle.Text);
end;
[Delphi] 한글 초성+중성+종성 조합하여 모든 글자 출력
Delphi 2009/04/18 20:39
초성, 중성, 종성의 상수테이블 정의
const 초성: array [0..18] of WideString =
('ㄱ','ㄲ','ㄴ','ㄷ','ㄸ','ㄹ','ㅁ','ㅂ','ㅃ','ㅅ',
'ㅆ','ㅇ','ㅈ','ㅉ','ㅊ','ㅋ','ㅌ','ㅍ','ㅎ');
중성: array [0..20] of WideString =
('ㅏ','ㅐ','ㅑ','ㅒ','ㅓ','ㅔ','ㅕ','ㅖ','ㅗ','ㅘ',
'ㅙ','ㅚ','ㅛ','ㅜ','ㅝ','ㅞ','ㅟ','ㅠ','ㅡ','ㅢ',
'ㅣ');
종성: array [0..27] of WideString =
('','ㄱ','ㄲ','ㄳ','ㄴ','ㄵ','ㄶ','ㄷ','ㄹ','ㄺ','ㄻ',
'ㄼ','ㄽ','ㄾ','ㄿ','ㅀ','ㅁ','ㅂ','ㅄ','ㅅ','ㅆ',
'ㅇ','ㅈ','ㅊ','ㅋ','ㅌ','ㅍ','ㅎ');
TMemo 에 전부 출력해봄.
procedure TForm1.Button1Click(Sender: TObject);
var pwc: PWideChar;
i, j, k: Integer;
count: Integer;
begin
pwc:=GlobalAllocPtr(GHND, 4);
count:=0;
try
for i:=0 to High(초성) do begin for j:=0 to High(중성) do begin
for k:=0 to High(종성) do begin
WORD(pwc^):=$AC00 + (i*21*28)+(j*28)+k;
Memo1.Lines.Add(pwc);
Inc(count);
end;
end;
end;
Memo1.Lines.Add('총 '+IntToStr(count));
finally
GlobalFreePtr(pwc);
end;
end;
StringGrid -> 엑셀 파일로 변환하기
function fnStringGridToExcel(StringGrid1: TStringGrid) : Boolean;
var
XL, XArr: Variant;
i, j: Integer;
XLastPosion: String;
Sp : Integer;
begin
//데이타 처리변수
XArr := VarArrayCreate([1, StringGrid1.ColCount], VarVariant);
try
//엑셀을 실행
XL := CreateOLEObject('Excel.Application');
except
MessageDlg('Excel이 설치되어 있지 않습니다.', MtWarning, [mbok], 0);
Exit;
end;
XL.WorkBooks.Add; //새로운 페이지 생성
// XL.Visible := True;
for i := 0 to StringGrid1.RowCount - 1 do begin
for j := 0 to StringGrid1.ColCount - 1 do begin
XArr[j + 1] := StringGrid1.Cells[j, i];
end;
Sp := StringGrid1.ColCount Div 26;
if Sp <> 0 then
XLastPosion := CHR(64 + Sp) + CHR(64 + StringGrid1.ColCount Mod 26)
else
XLastPosion := CHR(64 + StringGrid1.ColCount);
//엑셀에 값을 넣는다.
XL.Range['A' + IntToStr(i + 1), XLastPosion + IntToStr(i + 1)].Value :=
XArr;
end;
//셀 크기 조정
XL.Range['A1', XLastPosion + IntToStr(i + 1)].Select;
XL.Selection.Columns.AutoFit;
XL.Range['A1', 'A1'].Select;
XL.Visible := True;
Result := True;
end;
Internet Explorer7 에서 현재 활성화 되있는 탭윈도우 핸들 얻기
Posted by LOIE프로그래밍 이야기/델파이 : 2008/08/28 14:27
C++ 코드 :
#include <shlguid.h>
HWND GetTabWnd(CComQIPtr<IWebBrowser2> spBrowser)
{
HWND hwndTab = NULL;
CComQIPtr<IServiceProvider> spServiceProvider = spBrowser;
if (spServiceProvider != NULL)
{
CComQIPtr<IOleWindow> spWindow;
if (SUCCEEDED(spServiceProvider->QueryService(
SID_SShellBrowser,
IID_IOleWindow,
(void**)&spWindow)))
{
spWindow->GetWindow(&hwndTab));
}
}
return hwndTab;
}
델파이 코드 :
const
SID_SShellBrowser: TGUID = '{000214E2-0000-0000-C000-000000000046}';
IID_IOleWindow : TGUID = '{00000114-0000-0000-C000-000000000046}';
function GetTabWnd(spBrowser: IWebBrowser2): HWND;
var
hwndTab: HWND;
spServiceProvider: IServiceProvider;
spWindow: IOleWindow;
begin
spServiceProvider := spBrowser as IServiceProvider;
if (SUCCEEDED(spServiceProvider.QueryService(SID_SShellBrowser,
IID_IOleWindow,
spWindow) then
begin
spWindow.GetWindow(hwndTab);
end;
result hwndTab;
end
문자가 한글이지 확인하는 법
Posted by LOIE프로그래밍 이야기/델파이 : 2008/05/28 11:52
주소창에 입력받은 URL이 한글인지 확인하여 검색으로 돌리는 기능을 구현해야
해서 알게된 ByteType 함수다. 한글인지를 확인해 준다기 보다는 변수의 Index번째
문자가 싱글 바이트 문자인지 DBCS문자의 첫번째 바이트인지 두번재 바이트인지를 반환해주는
일을 하는 함수다 SysUtils 유닛 파일에 정의되어 있다. 원형은...
function ByteType(const S: string; Index: Integer): TMbcsByteType;
리턴타입은 TMbcsByteType이고 mbSingleByte, mbLeadByte, mbTrailByte 중에
하나로 값이 리턴되어 온다.
내가 사용했던 코드를 예로 들면
...
if ByteType( Edit.Text, 1) <> mbSingleByte then //첫글자가 싱글바이트 문자가 아니면
begin
...
end;
아무생각 없이 준 조건이라... 문제가 있을 지도... -┏
대상 문자열이 PChar형인 경우에는 아래 함수를 사용.
function StrByteType(Str: PChar; Index: Cardinal): TMbcsByteType;
구분자(delimiter)를 사용한 문자열 파싱(parsing)
function NextToken(var s:string; Separator:char):string;
var
Sep_Pos : byte;
begin
Result := '';
if length(s)>0 then begin
Sep_Pos := pos(Separator, s);
if Sep_Pos >0 then begin
Result := copy(s, 1, Pred(Sep_Pos));
Delete(s,1,Sep_Pos);
end
else begin
Result := s;
s := '';
end;
end;
end;
// 예제
while length(TheString) > 0 do
begin
NextParam := NextToken(TheString, ',');
// etc..
end;