1. Wed,11-Dec-2002 04:31:50 GMT 형식의 시간 문자열 만들기

2. 소스
uses sysutils;

Function GetFormatedDate:String;
var
  expireDate : TDateTime;
  format : TFormatSettings;
  day : integer;
begin
format.ShortDayNames[1] := 'Sun';
format.ShortDayNames[2] := 'Mon';
format.ShortDayNames[3] := 'Tue';
format.ShortDayNames[4] := 'Wed';
format.ShortDayNames[5] := 'Thu';
format.ShortDayNames[6] := 'Fri';
format.ShortDayNames[7] := 'Sat';

format.LongMonthNames[1] := 'Jan';
format.LongMonthNames[2] := 'Feb';
format.LongMonthNames[3] := 'Mar';
format.LongMonthNames[4] := 'Apr';
format.LongMonthNames[5] := 'May';
format.LongMonthNames[6] := 'Jun';
format.LongMonthNames[7] := 'Jul';
format.LongMonthNames[8] := 'Aug';
format.LongMonthNames[9] := 'Sep';
format.LongMonthNames[10] := 'Oct';
format.LongMonthNames[11] := 'Nov';
format.LongMonthNames[12] := 'Dec';

format.TimeSeparator := ':';

expireDate := Now-10;
day := DayOfWeek(expireDate);
Result := format.ShortDayNames[day]  + FormatDateTime(', dd-mmmm-yyyy hh:mm:ss', expireDate, format) + ' GMT';
end;

Posted by Gu Youn
,
1.소개 : URL(http://www.daum.net/test/test.html)에서 Domain(daum.net)을 분리하는 함수.
Indy의 TIdURI를 사용하면 쉽게 구현됨

2.소스 :
function ParseDomain(url:String):String;
var
  domain,host: String;
  len,pos1 : integer;
  IdURI : TIdURI;
begin
  pos1 := Pos('http://',url);
  if pos1 = 0 then
    url := 'http://' + url;

  IdURI := TIdURI.Create(url);

  host := IdURI.Host;
  pos1 := Pos('.',host)+1;
  len := StrLen(PChar(host));
  domain := MidStr(host,pos1,len-pos1+1);

  if IdURI <> nil then
      IdURI.Free;

  Result := domain;
end;
Posted by Gu Youn
,
1. 설명
ㄱ. com으로 등록해서 CreateObject를 함수 이용해서 vb dll의 특정 함수를 호출한다.
ㄷ. Import Type Library를 이용해서 컴포넌트로 등록하고 사용할 수 있다.

2. 소스
-Decrypt라는 함수를 호출하는 예-
  Variant userObj;
  userObj = Variant::CreateObject("Crypto.Crypto2");
  Variant name = userObj.OleFunction("Decrypt","O/bNd{Me?");
Posted by Gu Youn
,

메일 서버를 설정하다 보면은 에러 코드를 확인해야할 필요가 있다. 에러 코드를 구글에서 매번 찾기 귀찮아서 주요 에러 코드 정리 한 것이 있기에 남겨둔다.

Q. 메일 발송시 리턴메일 메시지에 대해서 설명해주세요.
A. ▶ SERVER REPLY: 501 Denied domain name
; 도메인주소를 잘못 입력 or 수신측에서 도메인을 수신거부한 경우

▶ 421 Server too busy.
; 수신측 서버의 응답지연. 수신서버의 트래픽등으로 메일을 수신 받지 못하는 상황에서 발송자에게 리턴 메일을 보냄.

▶ 421-Microsoft ESMTP MAIL Service, Version: 5.0.2195.5600 ready at Service not available, closing transmission channel
; MS사의 smtp 서버의 장애로 인해 메일을 수신받지 못하는 상황에서 리턴된 메시지.

▶ 421 4.3.2 Your IP(218.236.206.104) is filtered and this connection will be closed. You must register your IP to spammaster@hanafos.com By SpaceLee, the Lord of mail server.
; 우리쪽 (mail.hanafos.com) 서버로 메일을 발송시 필터링 조건에 위배되어 스패머로 인식되고 필터링 되어 발신자에게 리턴되는 메시지.


출처 : http://help1.hanafos.com/eps/faq/user/fuf_top10_02.jsp?faq_id=419

(야후 블로그에 2005/05/23 11:10에 올렸던 것을 옮김)
Posted by Gu Youn
,
1. String -> WideChar[] 변환

개념 : MultiByteToWideChar API를 이용한다.

소스 :
    var
        data : String;
        someunicode : array of widechar;
        len : integer;
    begin
        data := '안녕하세요.';
        len := StrLen(PChar(data));
        MultiByteToWideChar(CP_ACP, 0, PChar(data), -1, @someunicode[0], len);
    end;


2. String <-> WIdeString
개념 : 델파이에서는 자동 형변환 되므로 신경 쓸 필요 없음

소스 :
델코 민성기 님 작성
http://www.delphikorea.com/board/zboard/view.php?id=qa&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&keyword=유니코드&select_arrange=headnum&desc=asc&no=20996

var

WStr : WideString;

SStr : String;



TempStr1, TempStr2 : String;

i : Integer;

begin

WStr := '얼러리꼴러리!';
SStr := WStr;
//이렇게 해도 결과 같음
//SStr :='얼레리꼴러리!';
//Wstr := WIdeString(SStr);


for i:= 1 to Length(WStr) do
begin
TempStr1 := TempStr1 + '$' + IntToHex(Ord(WStr[i]), 2);
if i <> Length(WStr) then TempStr1 := TempStr1 + ', ';
end;

for i:= 1 to Length(SStr) do
begin
TempStr2 := TempStr2 + '$' + IntToHex(Ord(SStr[i]), 2);
if i <> Length(SStr) then TempStr2 := TempStr2 + ', ';
end;

ShowMessage(
Format(
'유니코드 "%s", 길이 %d'#13'%s'
+#13#13+
'일반문자 "%s", 길이 %d'#13'%s',
  [WStr, Length(WStr), TempStr1, SStr, Length(SStr), TempStr2]
)
);

end;

Posted by Gu Youn
,
About 다이얼로그 만드는 방법
1. GetFileVersionInfoSize 이용해서 버젼 정보 크기 얻는다.

2. 버젼 정보를 저장할 메모리를 할당한 후에 버젼 정보를 얻는다.
   MemHandle = GlobalAlloc(GMEM_MOVEABLE, VerSize);
   MemPtr = GlobalLock(MemHandle);
   GetFileVersionInfo(Path.c_str(), VerInfo, VerSize, MemPtr);

3. VerQueryValue(MemPtr, "\VarFileInfo\Translation", &BufferPtr,&BufferLength); 함수를 이용해서 각 정보를 얻는다.

-실제 소스-
코드:
    struct TransArray
    {
       WORD LanguageID, CharacterSet;
    };

    DWORD VerInfo, VerSize;  
    HANDLE MemHandle;
    LPVOID MemPtr, BufferPtr;
    UINT BufferLength;
    TransArray *Array;
    char QueryBlock[40];

    // Get the product name and version from the
    // applications version information.
    String Path(Application->ExeName); //프로그램 패스 얻어오기
    VerSize = GetFileVersionInfoSize(Path.c_str(), &VerInfo);//버젼 정보 크기 얻어오기
    if (VerSize > 0) {
        MemHandle = GlobalAlloc(GMEM_MOVEABLE, VerSize);
        MemPtr = GlobalLock(MemHandle);
        GetFileVersionInfo(Path.c_str(), VerInfo, VerSize, MemPtr);
        VerQueryValue(MemPtr, "\VarFileInfo\Translation", &BufferPtr,
                      &BufferLength);
        Array = (TransArray *)BufferPtr;

        // Get the product name.
        wsprintf(QueryBlock, "\StringFileInfo\%04x%04x\ProductName",
                 Array[0].LanguageID, Array[0].CharacterSet);
        VerQueryValue(MemPtr, QueryBlock, &BufferPtr, &BufferLength);
        // Set the product name caption.
        ProductName->Caption = (char *)BufferPtr;

        // Get the product version.
        wsprintf(QueryBlock, "\StringFileInfo\%04x%04x\ProductVersion",
                 Array[0].LanguageID, Array[0].CharacterSet);
        VerQueryValue(MemPtr, QueryBlock, &BufferPtr, &BufferLength);
        // Set the version caption.
        Version->Caption = (char *)BufferPtr;

        GlobalUnlock(MemHandle);
        GlobalFree(MemHandle);
    } else {
        ProductName->Caption = "";
        Version->Caption = "";
    }

    Comments->Caption = "Thank you for trying this fabulous product.n"
                        "We hope that you have enjoyed using it.";

'Computer > C++' 카테고리의 다른 글

BCB 6에 Indy 10 설치 하기 관련...  (0) 2005.11.23
BCB - StrToHex 함수  (0) 2005.11.06
BCB 6에 DSPack 2.3.4 설치  (0) 2005.09.10
카일릭스 설치 및 일반적인 문제점  (0) 2005.07.10
void pointer 샘플  (0) 2005.07.10
TStingList이용해서 텍스트 파일 파싱하기  (0) 2003.11.16
Effective C++ Second Edition  (0) 2003.10.13
Child control 관리  (0) 2003.09.15
C++ 사이트 모음  (0) 2003.04.08
C와 C++의 name mangling  (0) 2003.03.04
Posted by Gu Youn
,
Posted by Gu Youn
,
테이블에 트랜잭션과 파라미터 이용해서 인서트 하기.

  with ADOConnection1 do begin
    BeginTrans();

    with ADOQuery1 do Begin
      Close();
      SQL.Clear();
      SQL.Add('INSERT INTO member_tbl (member_type,passwd,member_id) VALUES');
      SQL.Add('(:member_type,:passwd,:member_id)');
      Parameters.ParamByName('member_type').Value  := 'S';
      Parameters.ParamByName('passwd').Value := 'S';
      Parameters.ParamByName('member_id').Value := 'wwww';
      ExecSQL;
    end;

    CommitTrans;
  end;
Posted by Gu Youn
,