delphi

한글 자소

knoen 2013. 1. 1. 10:19

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;