윈도우 프로그램을 짜면서 제일 짜증나는 부분이 printf 를 제대로 쓸수 없다는 것이다.
printf 는 표준 화면으로 출력을 내보내기 때문에...
그래서 Memo 로 출력할때 IntToStr , StrToInt 등을 무진장 써야된다.
하지만 sprintf 를 쓰면 Dos 에서 printf 를 쓰듯이 모든 형식지정자를 다 사용할 수 있으며
간단히 메모장으로 출력을 할 수 있다.


또는


와 같이 해도 된다.

하지만 다른 C program 과의 호환성을 생각해 보면 Ansistring 의 Method
쓰는것은 별로 좋지 않을듯...

볼랜드포럼 향기님 글에서 발췌...


메시지 다이얼로그가 매일 같은것만 보기가 싫어서 조금 변경해 보았다..

전역 함수로 놔두고 쓰면 괜찮을듯.

인자 처리만 몇개 더 처리하면 편할듯...

#define PI 3.1415926535897932384626433832795028841971693993751058209749445923078164064862089986280348253421170679821480865132823066479384460955058231725

double tmpA, tmpB,tmpC;
tmpB = edtX2->Text.ToDouble() - edtX1->Text.ToDouble();
tmpC = edtY2->Text.ToDouble() - edtY1->Text.ToDouble();
tmpA = sqrt(pow(tmpB, 2) + pow(tmpC, 2));

lblA->Caption = "빗변 :" + (String)tmpA;
lblB->Caption = "
밑변 :" + (String)tmpB;
lblC->Caption = "
높이 :" + (String)tmpC;

// 직각
lblAngleA->Caption =  "각도 A : " + (String)((atan2(tmpB, tmpC) + atan2(tmpC, tmpB)) * 180 / PI);

// 밑변에 인접한 각    tmpB tmpA의 각
lblAngleB->Caption =  "각도 B : " + (String)(atan2(tmpB, tmpC) * 180 / PI);

// 높이에 인접한 각    tmpC  tmpA의 인법한 각
lblAngleC->Caption =  "각도 C : " + (String)(atan2(tmpC, tmpB) * 180 / PI);


---------------------------------------------------------------------------------------------

한변과 한 각을 알때 처리..


밑변이 x 이고 한각이 a 이고 다른 한각이 90도일때의

높이 구하는 방법은

? = x * tan(a) ;

간단히 구할수 있음...

컴포넌트를 작성하거나 남이 만든 컴포넌트를 사용하다보면 아이콘이 맘에 들지 않거나 없는 경우가 많이 있다.

이럴 경우 X박스를 그냥 써도 되나..

존심상 나타나게 하고 싶을때..는

다음과 같은 방법을 사용하면 된다..

만약 소스에 dcr이나 res 파일이 있다면 그 파일을 사용하면 된다..
이 경우 이름이 같으면 된다(뭐.. 이름이 다르다면 소스와 같은 이름으로 만들면 된다..
가끔씩 이름만 같아도 안 되는 경우가 있다..
이럴때는 Resource 에디터를 이용해 리소스를 열어보면 리소스 명이 소스명과 다를 경우가 태반이다..
리소스명을 소스와 같은 파일로 작성해 준다..(어렵지도 않음)

compile과 make 작업을 다시 해주면 짜잔~~ 하고 나타날 것이다.. (가끔은 해당 컴포넌트를 제거하고 재설치 해야 되는 경우도 있다)

소스 상단부에 해당 리소스를 넣거나 파일 추가시 넣어주는 방법도 있으나 위의 작업이 되지 않는다면 어차피 나타나지 않는다..
직접 리소르를 넣어줄경우 가끔씩 이미 패스가 지정되어서 안 된다고 할때는 기존 패스를 삭제하고 리소스를 추가하면 나타날 것이다..

허접한 팁하나를 올림...

전에 만들어 보았던 이벤트 다이얼로그의 VCL 판이다..

MFC에서는 여러 함수를 사용했는데.. BDS에서는 간단하게 구성해 보았다..

스플래쉬 폼이랑 비슷하지만.. 이번것은 메시지를 2개 처리하고 시간을 초단위(1초 = 1)로 처리하고 위치를 지정할 수 있게 바꾸어 보았다.

생성부 함수를 조금 변경해서 작성했다..

타이머를 하나 얹어서 타이머 시간이 되면 사라지는 방식이다.(정밀한 시간 제어가 필요없는 것이어서.. 그냥.. 간단하게 작성했다..)

전과 다른점은 화면 배경을 jpg 화면을 올려서 구분을 지어 주었다..

차후에 변경한다면.. 이벤트에 맞는 그림 처리까지 해서 더 자세한 설명을 해주는것도 하나의 방법일 듯 싶다..
그리고, 빠트린 창을 클릭하면 자동으로 사라지는 것도 추가해야 될듯 싶다..

그리고, 한가지 더.. 영역을 임의로 정해서 투명창을 작성하였다.. 이 방법은 추후 다른 프로그램에서도 사용이 가능할 듯 싶다..


예전에 작업하던것을 날려 버렸다.. ㅠㅠ

그래서, 어제 오늘 맘 잡고 다시 시작했다...

어느 정도 작업이 된듯하다.. 매끄럽지 않은 부분도 많지만...

그래도 내 혼자 쓰기에는 아무런 문제가 없는듯.. 뭐.. 이상한 부분은 다시 수정하면 되니까..

우선 1차 수정안을 올려 놓는다...

추후에 변경되면 화일을 변경하면 되니까..

저작권 문제가 있을지 모르니...

암호는 걸어놔야겠군.

수정기간 : 1.5day
invalid-file

Comp32x

간단하지만.. 자주 까먹는 관계로 정리..
VCL에서 날짜는 상수부분에서 처리
시간은 소수점 이하 지수부에서 처리..
시간 날짜 동시에 처리할 경우에는 double이나..TDateTime 변수 사용..

///////////////. hpp ///////////////////////////////////////
#include "time.h"

// 변수 정의
 TTime  tMin;    // 경과시간
 TTime  tEnd;    // 마지막 정지 시간
 TTime  tNow;   // 현재 사용 시간 
 TTime  tPost;   // 사용 시간 임시 저장용..  
 TTime  tStart;   // 사용 시간 임시 저장용..

 TTime d_time ;

// TTime 은 시간만 처리시(소수점 이하만 구함)
// TDate 는 날짜만 처리히(상수부만 처리)
// TDateTime 는 상수와 지수부분 모두 처리.

/////////////// .cpp //////////////////////////////////////

   //변수 기본값 처리..
   tMin = 0;
   tEnd  = Now();   // 날짜와 시간 모두 처리.. 시간만 처리시는 Time(),  날짜만 처리시는 Data()
   tPost = 0;  
   tStart = Now();  

   // 일시 멈춤시 이전값 저장..
    tPost =  tMin;


    // 시간 구하기..
    tNow = Now(); 
    tMin = tNow - tEnd + tPost;

   // 시간 표시.
 d_time = Global->tMin;  
 DecodeTime(d_time, Hour, Min, Sec, MSec);
 lbl_UseTime->Caption = AnsiString().sprintf("작업 시간 : %02d:%02d:%02d", Hour, Min, Sec);
폼을 기본으로 작성된 클래스라면..

TMyClass MyClass; 

로 생성하면 됨...

VCL 기반이라면...

아래의 방법으로 생성..

TMyClass* pMyClass = new TMyClass();

아래는 볼랜드포럼에서 퍼온 내용...

========================================================================================================


클래스 자체가 꼭 new 로 생성을 해야만 메모리가 할당되는 것은 아닙니다.

class TMyClass
{
    Method1()
    ...
}

으로 만드신 베이스 클래스라면 일반 스트럭처와 동일하게 사용할 수 있습니다.
스트럭처와 클래스는 분명 큰 차이점이 있지만 그 기반은 동일하니까요.

TMyClass MyClass;

MyClass.Method1() 의 형식으로 호출이 가능하며 메모리 누수와는 관계가 없습니다.
그리고 MyClass 는 컴파일 시에 TMyClass 만큼의 메모리가 할당되며 프로그램 종료시에
해제됩니다.

보통 빌더에서 new 를 사용해서 객체를 생성하는 것은 델파이에서 온 VCL Class 때문입니다.
VCL 클래스는 반드시 new 를 통한 메모리 할당을 통해서 이용해야 합니다.
VCL 의 구조적 특성( ^^ 예전에 읽었는데 영문이라 대충 읽어서 ... ) 때문입니다.

만약 클래스를 VCL 클래스 기반으로 만든다면 VCL 베이스 클래스인 TObject 를
상속받으시면 됩니다.

class TMyClass : public TObject
{
    Method1()
    ...
}

TMyClass* pMyClass = new TMyClass();
pMyClass->Method1();

이 되는 것이죠....

+ Recent posts