posted by By훈트 2011.01.04 10:27

IOS Provisioning Portal 에 오신걸 환영합니다.

본 내용은 개인개발자등록이 아닌 Team 개발자 등록을 목적으로 작성되었습니다. IOS Provisioning Profile 목적은 한마디로 정의해서 개발자 혹은 개발팀에서 개발한 프로그램을 Apple Device (iPhone, iPod touch 등) 에 올리기 위한등록과정입니다. 물론 상업적인 목적인 경우는 AppStore 에 최종배포를 할 수도 있으며 이와 별도로 Mac개발이나 Safari개발인 경우에도 개발등록을 해야 애플제품 프로그램을 배포할 수 있습니다.

제품을 만든다면 반드시 장치에 올려봐야 하는데, 그 이유는 시뮬레이터에서는 Accelerometer, 가속도계, 카메라 사용 그리고 위치기반 서비스 등 서비스가 매우 제한적이기 때문이다.

궁극적으로는 진행하는 모든 작업은 ‘프로비저닝 프로파일(Provisioning Profile)을 얻기 위한 것

[원본파일] IOS Developer Program- Standard Program User Guide for IOS 4 ver2.7

1. https://developer.apple.com/ios/manage/overview/index.action

2. iPhone 개발자 ID와 PW 입력

(등록이 안되었다면 Apple Developer Connection (http://developer.apple.com) 에서 팀개발 등록)

3. https://developer.apple.com/membercenter/index.action > Invitations 팀멤버를 등록.

3.1. Program & Add-on 에서 개발팀이 개발하고자하는 분야(Mac 개발, iPhone 개발, Safari 개발)를 선택 결정.( 각 개발별 99$/1년 소요되며 Safari 개발은 무료임.)

Team Group (팀멤버구성)

  • Team Agent : 아이폰 개발자 프로그램에 최초 가입하고 애플과의 계약서에 사인한 어드민이며 배포하는 모든 제품에 대한 법적인 책임을 진다. 그러므로 모든 배포는 Agent를 통해서만 가능하다. 에이전트는 어드민과 멤버를 추가할 수 있으며 인증서 발급을 승인하고, 패포용 프로비저닝 프로파일을 관리할 수 있다.
  • Team Admin : 다른 어드민과 멤버를 추가하고 관리할 수 있으며 멤버로부터의 인증서 발급신청을 승인할 수 있고 아이폰/아이팟 터치를 프로그램 포털에 등록 할 수 있다. 하지만 배포용 인증서를 만들 수 없으므로 배포는 할수 없다.
  • Team Member : 개발용 인증서를 신청할 수 있으며, Provisioning Profile을 이용해 개발장치에 프로그램을 인스톨할 수 있다.
  • 개인개발자 등록과정은 1인이 Admin, Agent, Member 되는 것으로 별도의 팀을 만들수는 없다.

Certificates (인증서발급)

Certificates

팀멤버라면 개별적으로 iOS 개발 인증서를 요청하여 발급 받아야합니다.

1. 인증서 발급 요청서를 만들기. ( Utility 폴더> Keychain Access )

2. 키체인 접근 > 환경설정 클릭

3. 키체인 접근 > 인증지원 > 인증기관에서 인증서 요청…

4. 인증서 신청하는 멤버의 이메일과 save to disk 선택

(공개키까지 함께 관리하기 원한다면 “자시의 키페어 정보 지정”선택)

5. 공개키페어 정보 2048bits와 RSA 알고리즘 지원

Devices (디바이스 등록)

개발한 에플리케이션을 아이폰 장치에 올려보려면 장치의 정보가 프로그램 포털에 등록되어 있어야 한다.

등록은 프로그램 가입 후 언제든지 추가할 수 있지만 등록한 장치정보를 삭제하는 것은 일년에 한 번 프로그램 갱신할떄만 가능합니다. 관리하는 아이폰 장치가 많다면 애플이 제공하는 별도의 프로그램(iPhone Configuration Utility)을 이용해 일괄 등록할 수도 있다.

1. 개발장비의 UDID (Unique Device Identifier) 40 HEX문자열을 취득함.

  • Organizer 를 통해서 취득방법

  • iTunes 를 통해서 취득방법

2. 개인장비 등록하기

  • 장비명칭(장비명칭은 가급적 영어로 기재)을 기재후 UDID 등록

ADD ID (애플리케이션 구분 아이디 만들기)

AppStore나 사용자의 아이폰 환경에서 애플리케이션을 구분하기 위해 사용하는 문자열입니다. com.yourcompany.AppID 역순으로 적은 뒤 애플리케이션 실행 파일이름을 붙입니다. 다양한 애플리케이션을 하나의 App ID로 묶으려면 프로그램 포털에서 실행파일 이름을 와일드 카드 문자(*)로 정해줍니다.

ex) com.google.*

Provisioning (프로비져닝 프로파일 만들기)

프로비저닝 프로파일은 우리가 프로젝트를 빌드하면서 포함시켜야 하는 정보로서 인증서와 정치정보 그리고 App ID를 모두 포함되고 있다. 프로비저닝 프로파일을 만들면서 인증서와 App ID 그리고 개발장비를 체크해 주면 됩니다.

프로비저닝 프로파일 3가지 종류

  • 개발용 프로파일 : 개발 테스트 목적으로 준비된 프로파일.
  • 배포용 프로파일 : 임시배포용(Ad-Hoc)과 App Store 등록용 프로파일로 구분. 배포용 인증서는 에이전트만 할수 있습니다.

1. 프로비저닝 프로파일 생성

Profile Name은 통상적으로 프로젝트 이름을 명시합니다.

2. 프로비젼 프로파일을 다운로드받아서 Xcode > Organizer 의 Provisioning 위에 삽입(+ 키버튼)

3. Xcode 빌드 & 인스톨

  • Build 선택을 Device 4.x 와 Debug or Release 를 선택합니다.
  • Target > Copy Bundle identifier > Add ID 세팅(예 com.google.* or com.google.iAdSample)
  • Target 을 선택해서 애플리케이션 프로퍼티스의 identifier 를 수정합니다.

4. Xcode > Project > Edit Project Setting > Build

  • Code Signing > Any iPhone OS Device 에서 등록된 프로비젼 파일을 선택합니다.

자 여기까지 오시느라 수고했습니다.

나의 아이폰에 어플리케이션이 제대로 들어간것이 확인되면 성공입니다.


[출처] COM+EDDY'S BLOG

posted by By훈트 2011.01.03 12:20

디렉토리를 생성할때 디렉토리가 생성되어 있는지 검사도 해야 한다.

Directory 나 DirectoryInfo 를 사용하면 디렉토리 생성 및 검사도 가능하다.

방법#1

if (Directory.Exists(rootPath) == false)

    Directory.CreateDirectory(rootPath);

방법#2

DirectoryInfo di = new DirectoryInfo(rootPath);

if (di.Exists == false)

{

    di.Create();

}



posted by By훈트 2010.12.30 10:28
UIview
- 아이폰 화면에 보여지는 대부분은 View
 색, 그림, 버튼들을 가질 수 있다
- 드래그, 크기 조정,  등이 가능
- UIView는 GUI를 구성하는 단위 블록
- UIWindow는  UIView
01.//parentView(상위뷰)에 childView(하위뷰) 추가
02.[parentView addSubview:childView];
03. 
04.//parentView(상위뷰)가 가진 하위뷰들의 배열을 가져오기 (가장 뒤부터 가장 앞까지)
05.[parentView subview];
06. 
07.//childView(하위뷰)를 자신이 속한 상위뷰로부터 제거
08.[childView removeFromSuperview];
09. 
10.//i번째에 있는 하위뷰를 j번째에 있는 하위뷰와 순서를 바꿈
11.[parentView exchangeSubviewAtIndex:i withSubviewAtIndex:j];
12. 
13.//View의 투명도 조정 (value값은 0.0[완전투명]부터 1.0[완전불투명]까지)
14.[myView setAlpha:0.5];
15. 
16.//뷰의 배경색 지정
17.[myView setBackgroundColor:[UIColor redColor]];


CGPoint
- 포인트는  y 좌표로 정의된 위치를 말한다.
1.//x, y의 CGPoint를 생성한다.
2.CGPointMake(x, y);
3. 
4.//CGPoint를 문자열로 변환한다.
5.NSStringFromCGPoint(someCGPoint);
6. 
7.//문자열을 CGPoint로 변환한다.
8.CGPointFromString(aString);
 

CGSize
- 폭과 높이를 가지는 구조체
1.//width, height의 CGSize를 생성한다.
2.CGSizeMake(width, height);
3. 
4.//CGSize를 문자열로 변환한다.
5.NSStringFromCGSize(someCGSize);
6. 
7.//문자열을 CGSzie로 변환한다.
8.CGSizeFromString(aString);

 
CGRect
- 모든 View는 경계를  데 프레임을 사용한다.
- 프레임은 뷰의 위치, 폭, 높이와 같은  지정한다.
- 코어 그래픽 구조를 사용하여 프레임 직사각형을 정의한다.
 보통 시작점(CGPoint)과 크기(CGSize)로 구성된다.
01.//직사각형 정의
02.CGRectMake(origin.x, origin.y, size.width, size,height);
03. 
04.//CGRect 구조체를 특정 형식을 가진 문자열로 변환한다.
05.NSStringFromCGRect(someCGRect);
06. 
07.//위의 코드로 변환된 특정 형식을 가진 문자열을 CGRect구조체로 복구한다.
08.CGRectFromString(aString);
09. 
10.//직사각형의 위치에서 직사각형의 크기만큼 외곽을 잘라내거나 덧붙인 가운데 정렬된 직사각형을 만든다. 양수로는 잘라내고 음수로는 덧붙여 만들게 된다.
11.CGRectInset(aRect);
12. 
13.//직사각형 구조체 rect1과 rect2가 겹치는지 알 수 있다.
14.CGRectIntersectsRect(rect1, rect2);
15. 
16.//(0,0)에 가로, 세로 길이가 0인 직사각형 상수
17.CGRectZero;



Reference :  iPhone Developer's Cookbook - Erica Sadun

posted by By훈트 2010.12.29 17:42

[Objective-C]NSArray, NSMutableArray객체

[Objective-C] 2009/01/05 14:15
NSArray는 다른 객체 포인터들의 목록이다.

- 자주 사용되는 메소드
- (unsigned)count -> 현재 배열의 객체의 수를 리턴한다.
- (id)objectAtIndex:(unsigned)i -> i번째 위치한 객체를 리턴한다.
- (id)lastObject -> 현재 배열의 맨 마지막 객체를 리턴한다.
- (BOOL)containsObject:(id)anObject -> 현재의 배열에 anObject오브젝트를 포함하면 YES 아니면 NO
- (unsigned)indexOfObject:(id)anObject -> 리시버에서 anObject가 있는지 가장 낮은 색인부터 검색하  여 배열의 색인 값을 리턴한다. 찾지 못하면 NSNotFound를 리턴한다.

- NSMutableArray는 NSArray를 상속받았지만 객체를 삽입하고 삭제할 수 있도록 확장되었다.

자주 사용되는 메소드

             - (void)addObject:(id)anObject -> anObject를 리시버의 끝에 삽입한다. nil배열은 넣을 수 없다.

 - (void)addObjectsFromArray:(NSArray *)otherArray ->

 - (void)insertObject:(id)anObject atIndex:(unsigned)index -> 

             - (void)removeAllObjects -> 리시버에 포함된 모든객체를 제거한다.
             - (void)removeObject:(id)anObject -> 리시버 배열 안의 anObject를 삭제한다.
             - (void)removeObjectAtIndex;(unsigned)index -> index의 객체를 제거한다.


[출처] 마음으로 보는 블로그

posted by By훈트 2010.12.28 17:25

 

Sound is Style, beats by dr.dre

 

수많은 뮤지션과 프로듀서들이 추구하던 음질에 가깝게, 스튜디오에서 만들어낸 음질을 그대로 들을 수 있는

닥터 드레 헤드폰/이어폰 시리즈 들이 매그앤매그에 신규입고되었습니다!

 
고가이기 하지만, 강한 사운드와 비트감이 돈이 아깝지 않을정도로 listener의 진정한 기쁨이라고 해도 손색이 없습니다!

 

일명 '권지용' 헤드폰이라고 불리는 닥터 드레 헤드폰 시리즈.

GD, 2ne1의 CL, 박봄, Tiger JK 등등 정말 많은 국내 셀러브리티들의 it 헤드폰/이어폰입니다.

 

   

그럼, 해외스타들의 착용샷을 살펴볼까요?

 

 

Pharrell Williams, EMINEM, Kanye West, will.i.am (왼쪽위부터 시계방향)

 

 

Gwen Stefani

 

 

 그리고 요즘 hot issue인 LADY GAGA.

 레이디 가가와는 콜라보레이션한 이어폰까지 출시되었는데요. 레이디 가가 콜라보레이션 제품인

 Heartbeats™ by LADY GAGA 는 무섭게 솔드아웃되는 제품이니, 놓치지 마세요~!

 

 

 

Beats™ by Dr. Dre 제품보러가기

 

- Beats™ by Dr. Dre™_Studio click!

- Beats™ by Dr. Dre™_Tour CT click!

- Beats™ by Dr. Dre™_SOLO click!

- Heartbeats™ by LADY GAGA click!



[출처] MAG님의 블로그

'Daily > 훈트의일상' 카테고리의 다른 글

린소프트웨어 개발 방법론  (3) 2012.02.27
나이키 신발 사이즈  (0) 2011.03.11
Dr.Dre 헤드폰  (0) 2010.12.28
와우 방문자 1만찍었...ㄷㄷㄷ  (1) 2010.11.19
토탈 5000 뿌 ㅎㅎㅎ  (0) 2010.10.02
Total 1004 기념~~  (0) 2010.08.18
posted by By훈트 2010.12.14 17:56


object-c에서의 메모리 관리는 레퍼런스 카운트 (reference count)를 이용합니다.

모든 객체는 자신을 참조하는 수에 대한 내부 카운터를 가지고 있습니다.


-alloc : 해당 객체에 메모리를 할당하고 레퍼런스 카운트를 1 올립니다.

-retain : 해당 객체의 레퍼런스 카운트를 1 올립니다.

-copy : 해당 객체의 복사본을 만듭니다. 그리고 복사본의 레퍼런스 카운트를 1 올립니다.

-release : 해당 객체의 레퍼런스 카운트를 1 낮춥니다.

-autorelease : 정해지지 않은 시점에 해당 객체의 레퍼런스 카운트가 -1 낮아집니다.


규칙

1. 블록 내에서 alloc, retain, copy의 수와 release, autorelease 수가 동일해야 합니다.

2. factory 함수를 사용해 생성한 객체의 경우는 대부분 autorelease로 반환됩니다. 따로 release를 할 필요가 없습니다.

3. 클래스의 인스턴스 변수들은 dealloc 메소드에서 다 release해야 합니다.


예1. dealloc


- (void) dealloc

{

[vid release];

[title release];

}


예2. 로컬블록


{

NSString *name = [[NSString alloc] initWithString:@"Dreaming"];

NSString *co = [NSString stringWithString:"daum"];

NSString *book = @"iPhone Book";


//alloc만 release하면 됩니다.

[name release];

}


예3. autorelease 블록지정 : 해당블록의 autorelease메시지를 받은 객체들은 autorelease가 release되자마자 메모리에서 사라집니다.


NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

~~~

~~~

~~~

[pool release];


예4. 다양한 예


-(void) resetTitle

{

//alloc으로 인해 1 올라감

NSString *newTitle = [[NSString alloc] initWithString:@"A"];

[self setTitle:newTitle];    //접근자 사용

[newTitle release];         //메모리에서 제거

}


-(void) resetTitle

{

//factory함수로 autorelease가 됨, release할 필요 없음.

NSString *newTitle = [NSString stringWithString:@"A"];

[self setTitle:newTitle];      //접근자사용

}


NSMutableArray *array = [NSMutableArray arrayWithCapacity:10];

int i;


for ( i = 0; i < 10; i++)

{

NSNumber *n = [NSNumber numberWithInt:i];

[array addObject:n];

}


NSNumber인 n을 생성했고 autorelease 메시지를 받아 언젠가 레퍼런스 카운트가 0으로 되어 사라질 것 같습니다만, 배열에 추가하는 addObject는 받는 인자를 바로 retain합니다. 그러니 한시적으로 레퍼런스 카운트가 2가 됩니다만 pool이 비워질 때 1이 되고, 배열이 사라질때 0이 됩니다.


NSMutableArray *array = [NSMutableArray arrayWithCapacity:10];

int i;


for ( i = 0; i < 10; i++)

{

NSNumber *n = [[NSNumber alloc] initWithInt:i];

[array addObject:n];

[n release];

}


[출처]새카만곰돌이님의 블로그

posted by By훈트 2010.12.08 09:44

 

  
void __fastcall ScrollBoxPaintTo(TScrollBox *ScrollBox,HDC DC,int X,int Y,int Wid,int Hei) 

    int I, EdgeFlags, BorderFlags, SaveIndex; 
    TRect R; 

    ScrollBox->ControlState=ScrollBox->ControlState<< csPaintCopy; 
    MoveWindowOrg(DC, X, Y); 
    IntersectClipRect(DC, 0, 0, Wid, Hei); 

    BorderFlags = 0; 
    EdgeFlags = 0; 

    if( GetWindowLong(ScrollBox->Handle, GWL_EXSTYLE) & WS_EX_CLIENTEDGE != 0 ) 
    { 
        EdgeFlags  = EDGE_SUNKEN; 
        BorderFlags = BF_RECT | BF_ADJUST; 
    } 
    else if( GetWindowLong(ScrollBox->Handle, GWL_STYLE) & WS_BORDER != 0 ) 
    { 
        EdgeFlags = BDR_OUTER; 
        BorderFlags = BF_RECT | BF_ADJUST | BF_MONO; 
    } 

    if( BorderFlags !=0) 
    { 
        R=Rect( 0, 0, Wid, Hei); 
        DrawEdge(DC, &R, EdgeFlags, BorderFlags); 
        MoveWindowOrg(DC, R.Left, R.Top); 
        IntersectClipRect(DC, 0, 0, R.Right - R.Left, R.Bottom - R.Top); 
    } 

    //일반 캡쳐의 경우 ... 
    //scroll전체 캡쳐를 위해 빼버림 
// ScrollBox->Perform(WM_ERASEBKGND, (int)DC, 0); 
// ScrollBox->Perform(WM_PAINT, (int)DC, 0); 

    for ( int i=0;i< ScrollBox->ControlCount;i++) 
    { 
        if(ScrollBox->Controls[i]->Visible) 
        { 
            if(ScrollBox->Controls[i]->InheritsFrom(__classid(TWinControl))) 
            { 
                ((TWinControl *)ScrollBox->Controls[i])->PaintTo(DC,ScrollBox->Controls[i]->Left+ScrollBox->HorzScrollBar->Position ,ScrollBox->Controls[i]->Top+ScrollBox->VertScrollBar->Position); 
            } 
            else if(ScrollBox->Controls[i]->InheritsFrom(__classid(TGraphicControl))) 
            { 
                 MoveWindowOrg(DC, ScrollBox->Controls[i]->Left+ScrollBox->HorzScrollBar->Position, ScrollBox->Controls[i]->Top+ScrollBox->VertScrollBar->Position); 
                ((TGraphicControl *)ScrollBox->Controls[i])->Perform(WM_PAINT,(int)DC,0);// PaintTo(DC,ScrollBox->Controls[i]->Left+ScrollBox->HorzScrollBar->Position ,ScrollBox->Controls[i]->Top+ScrollBox->VertScrollBar->Position); 
                 MoveWindowOrg(DC, -ScrollBox->Controls[i]->Left-ScrollBox->HorzScrollBar->Position, -ScrollBox->Controls[i]->Top-ScrollBox->VertScrollBar->Position);//MoveWindowOrg(DC, R.Left, R.Top); 
            } 
        } 
    } 
    ScrollBox->ControlState=ScrollBox->ControlState>>csPaintCopy;// Exclude(FControlState, csPaintCopy); 



Graphics::TBitmap * __fastcall GetScrollBoxImage(TScrollBox *ScrollBox) 

    if(ScrollBox==NULL)return NULL; 

    Graphics::TBitmap *bmp=NULL; 
    TRect rc=Rect(0,0,ScrollBox->HorzScrollBar->Range,ScrollBox->VertScrollBar->Range); 

    bmp=new Graphics::TBitmap; 

    bmp->Width=ScrollBox->HorzScrollBar->Range; //ScrollBox->ClientWidth; 
    bmp->Height=ScrollBox->VertScrollBar->Range; //ScrollBox->ClientHeight; 
    bmp->Canvas->Brush = ScrollBox->Brush; 
    bmp->Canvas->FillRect(rc);//ScrollBox->ClientRect); 
    bmp->Canvas->Lock(); 

    try 
    { 
        int Ofs=0; 
        if(GetWindowLong(ScrollBox->Handle, GWL_STYLE) & WS_BORDER ) 
            Ofs = -1;  // Don't draw form border 
        else 
            Ofs = 0;  // There is no border 

        ScrollBoxPaintTo(ScrollBox,bmp->Canvas->Handle,Ofs, Ofs, rc.right,rc.bottom); 
    // ScrollBox->PaintTo(bmp->Canvas->Handle, Ofs, Ofs); 

    } 
    __finally 
    { 
        bmp->Canvas->Unlock(); 
    } 

    return bmp; 

void __fastcall TForm3::Button5Click(TObject *Sender) 

    Graphics::TBitmap *bmp; 

    bmp=GetScrollBoxImage(ScrollBox1); 
// bmp->SaveToFile("C:\\TestScrollBoxImage.bmp"); 
    Image1->Picture->Bitmap->Assign(bmp); 
    Image1->AutoSize=true; 
    delete bmp; 

//---------------------------------------------------------------------------
     

 

 

추가   08-11-25

출처  http://www.delphi.co.kr/zboard/view.php?id=qanda&page=1&page_num=20&select_arrange=headnum&desc=&sn=off&ss=on&sc=on&keyword=&no=115191&category=

 

http://delphi.newswhat.com/geoxml/forumhistorythread?groupname=borland.public.delphi.graphics&messageid=40446566$1@newsgroups.borland.com

 

 

  
procedure Tform1.PaintControl( aControl: TWinControl; aCanvas: TCanvas; offsetx, offsety: Integer ); 
begin 
   SaveDC( aCanvas.handle );  
   try  
      SetWindowOrgEx( aCanvas.handle, - (acontrol.left + offsetx), - (acontrol.top + offsety), nil );  
      acontrol.perform( WM_PRINT, acanvas.handle, PRF_CHILDREN or PRF_CLIENT or PRF_NONCLIENT or PRF_ERASEBKGND );  
   finally  
      RestoreDC( aCanvas.handle, - 1 );  
   end;  
end;  


procedure Tform1.Button1Click(Sender: TObject);  
var  
 bmp: TBitmap;  
 i: integer;  
begin  

  bmp := TBitmap.Create;  
  try  
    bmp.width := scrollbox1.HorzScrollBar.Range;  
    bmp.height := scrollbox1.VertScrollBar.Range;  

    bmp.canvas.lock;  
    SetMapMode( bmp.canvas.handle, MM_ISOTROPIC );  
    SetWindowExtEx( bmp.canvas.handle, 400, 400, nil );  
    SetViewportExtEx( bmp.canvas.handle, 400, 400, nil );  
    try  
      SetWindowOrgEx( bmp.canvas.handle, - scrollbox1.HorzScrollBar.Position, - scrollbox1.VertScrollBar.POsition, nil );  
      bmp.Canvas.Brush := scrollbox1.Brush; 
      bmp.Canvas.FillRect(Rect(0,0,bmp.width,bmp.height)); 
      scrollbox1.perform( WM_PAINT, bmp.canvas.handle, 1 );  
      SetWindowOrgEx( bmp.canvas.handle, 0, 0, nil );  
      for i := 0 to scrollbox1.controlcount - 1 do  
         if scrollbox1.Controls[i] is TWincontrol then  
            Paintcontrol(TWincontrol(scrollbox1.Controls[i]), bmp.canvas, scrollbox1.horzscrollBar.Position, scrollbox1.vertScrollBar.Position ); 
    finally  
         bmp.canvas.unlock;  
    end;  

    bmp.SaveToFile('c:\test.bmp');  
  finally  
    bmp.free;  
  end;  

end; 
     

 

추가 08-12-02

위 델파이 버젼 코드를 다시 좀 수정 했습니다.

다른사람코드를 거의 그대로 복사해 넣다보니 쓸데없는 부분이 좀 있네요

다음은 수정한 코드입니다.

 

  
function GetScrollBoxImage(ScrollBox:TScrollBox):TBitmap; 
var 
  bmp: TBitmap; 
  i: integer; 
  wCtrl:TWinControl; 

  function iMax(iVal1,iVal2:Integer):Integer; 
  begin 
    if iVal1>iVal2 then Result:=iVal1 
    else Result:=iVal2; 
  end; 
begin 

  Result:=nil; 
  bmp := TBitmap.Create; 

  // bitmap을 Scroll-Range 크기만하게 만들어준다. 
  // Scroll-Range가 ScrollBox의 원래크기보다 작은경우가 잇으므로 Max값으로 한다. 
  bmp.width := iMax(ScrollBox.HorzScrollBar.Range,ScrollBox.Width); 
  bmp.height :=iMax(ScrollBox.VertScrollBar.Range,ScrollBox.Height); 

  bmp.canvas.lock; 

  //ScrollBox의 Brush를 이용해서 배경을 그려준다. 
  bmp.Canvas.Brush := ScrollBox.Brush; 
  bmp.Canvas.FillRect(Rect(0,0,bmp.width,bmp.height)); 

  //ScrollBox의 이미지 즉 ScrollBox와 그위에 올려진 GraphicControl의 그린다. 
  //그릴때 현재 ScrollBar의 위치만큼 DC의 Offset을 설정하고 그린다. 
  SetWindowOrgEx( bmp.canvas.handle, - ScrollBox.HorzScrollBar.Position, - ScrollBox.VertScrollBar.POsition, nil ); 
  ScrollBox.perform( WM_PAINT, bmp.canvas.handle, 0 ); 

  //ScrollBox위에 모든 Window-Control을 그려준다. 
  for i := 0 to ScrollBox.controlcount - 1 do 
  begin 
     if ScrollBox.Controls[i] is TWincontrol then 
     begin 
      wCtrl:=TWinControl(ScrollBox.Controls[i]); 
      SaveDC( bmp.Canvas.Handle ); 
      SetWindowOrgEx( bmp.Canvas.Handle, - (wCtrl.Left + ScrollBox.horzscrollBar.Position), - (wCtrl.Top +  ScrollBox.vertScrollBar.Position), nil );
      wCtrl.Perform(WM_PAINT,bmp.Canvas.Handle,0); 
      RestoreDC(bmp.Canvas.Handle,-1 ); 
     end; 
  end; 

  bmp.canvas.Unlock; 
  Result:=Bmp; 
end; 

//사용예 
procedure TForm1.Button2Click(Sender: TObject); 
var 
  bmp:TBitmap; 
begin 
  bmp:=GetScrollBoxImage(ScrollBox1); 
  Image2.Picture.Bitmap.Assign(bmp); 
  Image2.AutoSize:=true; 
  bmp.free; 
end;
     

 



[출처]

http://cafe.naver.com/bcbmaster.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=759

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

[볼랜드C++] ScrollBox 이미지 캡쳐(안보이는 영역까지)  (0) 2010.12.08
posted by By훈트 2010.12.01 14:11
DateTime oldDate = new DateTime(2002,7,15);
DateTime newDate = DateTime.Now;

// Difference in days, hours, and minutes.
TimeSpan ts = newDate - oldDate;
// Difference in days.
int differenceInDays = ts.Days;

Console.WriteLine("Difference in days: {0} ", differenceInDays);
posted by By훈트 2010.11.19 09:13

기다리던 겨울이 오고있어요 ㅋ
요즘 주말엔 보드타러 다니고 평일에 가끔 샵투어 다니며
나름 바쁘게 지내고 있었는데 어느덧 방문자수가 ~

아웅 쪼금만 더 추워졌음 좋겠다~~

'Daily > 훈트의일상' 카테고리의 다른 글

나이키 신발 사이즈  (0) 2011.03.11
Dr.Dre 헤드폰  (0) 2010.12.28
와우 방문자 1만찍었...ㄷㄷㄷ  (1) 2010.11.19
토탈 5000 뿌 ㅎㅎㅎ  (0) 2010.10.02
Total 1004 기념~~  (0) 2010.08.18
정보처리산업기사 실기 합격  (0) 2010.08.13
posted by By훈트 2010.11.18 09:50

준비물 : 흰 우유 1 L , 불가리스 요구르트(씨리얼 맛) 1병 ,

            올리고당 7큰술 , 적당한 용기

 

 

첫번째,

 

흰우유와 요구르트를 용기에 넣고 잘 섞은후 전자레인지에 5분정도 돌린다 후 실온에서 15시간 발효시킨다.

 

두번째,

 

15시간발효후 올리고당 7큰술을 넣고 잘섞은후 12시간 냉장 보관한다.

 

세번째,

 

잘저어서 그릇에 덜어 맛있게 먹는다.

각종 쨈과 섞어먹으면 맛있더라~!!

'요리 > 레시피노트' 카테고리의 다른 글

[디저트] 요거트 만들기  (0) 2010.11.18