천객만래 [千客萬來] (It has an interminable succession of visitors)


Delphi Compiler Versions


The following table lists the version number associated with each release of Delphi compilers, beginning with Turbo Pascal 4.0 and ending with the current version of the compiler:

Delphi conditional VER<nnn>ProductProduct VersionPackage VersionCompiler Version
VER320Delphi Tokyo / C++Builder Tokyo (Delphi:Win32/Win64/OSX/iOS32/iOS64/Android) (C++Builder:Win32/Win64/OSX/iOS32/iOS64/Android)2525032.0
VER310Delphi Berlin / C++Builder Berlin (Delphi:Win32/Win64/OSX/iOS32/iOS64/Android) (C++Builder:Win32/Win64/OSX/iOS32/iOS64/Android)2424031.0
VER300Delphi Seattle / C++Builder Seattle (Delphi:Win32/Win64/OSX/iOS32/iOS64/Android) (C++Builder:Win32/Win64/OSX/iOS32/iOS64/Android)2323030.0
VER290Delphi XE8 / C++Builder XE8 (Delphi:Win32/Win64/OSX/iOS32/iOS64/Android) (C++Builder:Win32/Win64/OSX/iOS32/iOS64/Android)2222029.0
VER280Delphi XE7 / C++Builder XE7 (Delphi:Win32/Win64/OSX/iOS/Android) (C++Builder:Win32/Win64/OSX/iOS/Android)2121028.0
VER270Delphi XE6 / C++Builder XE6 (Delphi:Win32/Win64/OSX/iOS/Android) (C++Builder:Win32/Win64/OSX/iOS/Android)2020027.0
VER260Delphi XE5 / C++Builder XE5 (Delphi:Win32/Win64/OSX/iOS/Android) (C++Builder:Win32/Win64/OSX/iOS)1919026.0
VER250Delphi XE4 / C++Builder XE4 (Delphi:Win32/Win64/OSX/iOS) (C++Builder:Win32/Win64/OSX)1818025.0
VER240Delphi XE3 / C++Builder XE3 (Delphi:Win32/Win64/OSX) (C++Builder:Win32/Win64/OSX)1717024.0
VER230Delphi XE2 / C++Builder XE2 (Delphi:Win32/Win64/OSX) (C++Builder:Win32/OSX)16160161 is the version for the five FireMonkey packages at XE2 Update 2: fmi161.bpl, fmx161.bpl, fmxase161.bpl, fmxdae161.bpl, and fmxobj161.bpl.23.0
VER220Delphi XE / C++Builder XE (Win32)1515022.0
VER210Delphi 2010 / C++Builder 2010 (Win32)1414021.0
VER200Delphi 2009 / C++Builder 2009 (Win32)1212020.0
VER190Delphi 2007 for .Net *1111019.0
VER180 or VER185Delphi 2007 / C++Builder 2007 for Win32 *1111018.5
VER180Delphi 2006 / C++Builder 2006 (Win32/.Net) and Delphi/C++Builder 2007 for Win321010018.0
VER170Delphi 2005 (Win32/.Net)99017.0
VER160Delphi 8 for .Net88016.0
VER150Delphi 7 (and 7.1)77015.0
VER140Delphi 6 / C++Builder 666014.0
VER130Delphi 5 / C++Builder 55NANA
VER125C++Builder 44NANA
VER120Delphi 44NANA
VER110C++Builder 33NANA
VER100Delphi 33NANA
VER93C++Builder 1NANANA
VER90Delphi 22NANA
VER80Delphi 11NANA
VER70Borland Pascal 7.0NANANA
VER15Turbo Pascal for Windows 1.5NANANA
VER10Turbo Pascal for Windows 1.0NANANA
VER60Turbo Pascal 6.0NANANA
VER55Turbo Pascal 5.5NANANA
VER50Turbo Pascal 5.0NANANA
VER40Turbo Pascal 4.0NANANA

* Note that Delphi 2007 defines two VERxxx symbols (VER180 and VER185). Delphi 2006 and 2007 are binary compatible, so 180 works for both. If you need only 2007, use VER185.

NoteCompilerVersion was first introduced with Delphi 6, so earlier versions do not have the CompilerVersion constant.

출처: http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Compiler_Versions

Posted by SB패밀리

[delphi] IP주소 유효성체크


20070326



function TForm1.IsValidIPAddress(strIP: String): Boolean;
var
TempList: TStringList;
i: Integer;
nTemp: Integer;
begin
Result := False;
TempList := TStringList.Create;

ExtractStrings(['.'], [], PAnsiChar(strIP), TempList);
if TempList.Count = 4 then
begin
   for i := 0 to 3 do
   begin
     nTemp := StrToIntDef(TempList[i], -1);
     if (nTemp < 0) or (nTemp > 255) then
     begin
       break;
     end;
   end;
   Result := True;
end;

TempList.Free;
end;


Posted by SB패밀리

[delphi/web] how to detect when a Document is comp...



2004.01.12


An other example:

This example shows how to detect when a document is completely 
loaded, even if it includes multiple frames. Only the final 
OnDocumentComplete event passes the same Dispatch interface as the 
OnNavigateComplete event handler.

var
  CurDispatch: IDispatch; {save the interface globally }

procedure TForm1.WebBrowser1NavigateComplete2(Sender: TObject; const 
pDisp: IDispatch; var URL: OleVariant);

begin
  if CurDispatch = nil then
    CurDispatch := pDisp; { save for comparison }
end;
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject; const 
pDisp: IDispatch; var URL: OleVariant);
begin
  if (pDisp = CurDispatch) then
  begin
    Beep; {the document is loaded, not just a frame }
    CurDispatch := nil; {clear the global variable }
  end;
end;

cu Andries

Posted by SB패밀리

[신경망] Self-Organizing Map(SOM), 1차원적 구현 예, 소스 포함

2001.09.20



1997년에 신경망을 공부하던 때 코딩하였던 프로그램이닷. 

우리 인간은 태어나면서 부모에게 배우기도 하지만... 아이들은 부모들이 가르치지도 않은 많은 것을 자연스럽게 터득하게 된다. 이러한 것에 대한 설명 중 하나가 필란드 헬싱키 공과대학 (Helsinki Technology University)의Teuvo Kohonen에 의해 1962년에 제안되었다. Kohonen의 NN(Neural Network)은 아이가 배우지도 않고 스스로 터득하듯이 자율적인 학습(Unsupervised Learning)의 NN모델이다. 


Kohonen의 Self-Organizing Map(SOM) 에서 Self-Organizing이란 주어진 입력패턴에 대하여 정확한 해답을 미리 주지 않고 스스로 학습할 수 있는 능력을 말한다. 특징으로는 경쟁학습과 위상보존사상(Topology Reserving Mapping), 뉴론별로 연결 강도가 존재한다. 더 자세한 이야기는 생략하기로 한다. 이 프로그램은 델파이로 구현되었으며, 예전에 구현했던 소스를 어렵게 찾아서 올립니다.



som___1D_Map.zip



Posted by SB패밀리

Delphi 설치 후 TADOConnection(dbgo)이 없다?



델파이(Rad Studio)를 설치했는데


프로젝트를 로딩하는 중에 TADOConnection이 없다고 나온다면.?


황당하지만 어쩔 수 없이 수동으로 등록을 해주어야 한다.


<Delphi 2010 기준>

TADOConnection

C:\Program Files (x86)\Embarcadero\RAD Studio\7.0\bin\dclado140.bpl

* install package 메뉴를 선택해서 위의 bpl을 등록한다.



아래의 방법도 있다.

설치 DVD(ISO)에서 dbpack_setup.exe를 실행해서 modify 옵션으로 설치하면 package가 델파이에 등록된다.


Database package

[DVD Drive]:\Install\dbpack_setup.exe

(RAD Studio 설치후 데이터베이스(ex:adodb)패키지가 없을 실행해서 modify 실행)





Posted by SB패밀리

[강좌] 리소스의 활용 I  


아래에 Resource DLL의 활용 방법에 대한 강좌 요청이 있어서 저의 졸고라도
도움이 되실까 해서 올려 드립니다. 참고가 되시길...

리소스의 활용 I

글: 하영재(vaio91@yahoo.com)
    델파이 코리아(www.delphikorea.com)


들어가며...

델파이 코리아(www.delphikorea.com)나 다른 통신사에서 심심치 않게 올라오는
질문중에 Resource File(이하 리소스 파일이라 한다...^^)의 사용에 대한 질문이
있다. 
리소스 파일을 만들고 사용하는 문제들에 대한 질문들인데, 여러가지 단편적인
내용만을 가지고 조합을 해야 하니 처음 접하는 분들은 어려움을 느낄 수도 있을
것이다. 이런 분들을 위해 리소스 파일에 대한 모든 부분이라고는 할 수 없겠으나
많이 사용되는 부분에 대해서 예제와 더불어 간단하게 나마 천천히 살펴보려 한다. 


지금 부터 살펴볼 내용은 다음과 같다.

- 리소스 파일을 만드는 방법.
- 리소스 DLL을 만드는 방법.
- 위의 리소스 파일을 만드는 방법의 상세 내용
   . Bitmap 리소스 파일을 만들고 사용하기
   . Text 리소스 파일을 만들고 사용하기
   . AVI 리소스 파일을 만들고 사용하기
- 리소스 사용시 주의해야 할 메모리 문제
- 그 외 리소스로 할 수 있는 일들

이상과 같은 내용을 살펴 볼 것인데 아주 기초적인 부분부터 다룰 것이므로 기존에
다뤄본 분들이라면 아낌없이 다른 강좌들에 눈을 돌리자... ^^

이곳에서 사용할 예제는 본인이 직접 작성한 것도 있으나 아주 잘만들어진 예제를
제공하기 위해 Borland TI의 소스도 참고했음을 밝혀둔다. TI의 예제 소스를 사용한
부분에서 미리 발췌 했음을 알리도록 할 것이다.


리소스 파일 만들기...

리소스 파일은 바이너리 형태의 데이터로서 RCDATA라 부른다. 리소스 파일은
Res라는 확장자를 가지게 되는데 이 Res 파일을 만들기 위한 과정을 살펴 보자...

Res 파일을 만들기 위해서는 Text로 작성된 RC 파일이 있어야 한다. 이 RC 파일은
Res 파일에 포함하고자 하는 데이터 이름과 데이터 식별자, 그리고 데이터로 구성된
Text 파일이다. RC 파일의 예를 보자...

- RC 파일의 예

  WAVEFILE WAVE c:\WaveSound.wav

이렇게 작성된 것이 RC 파일이다. 여기서 'WAVEFILE'은 리소스를 호출할 때 쓰일
이름이며 'WAVE'는 이 리소스가 WAVE 파일임을 명시하는 것이며 맨 뒷부분은 실제로
리소스에 적재될 파일의 경로와 파일명으로 구성되어 진다. 
이렇게 텍스트 에디터에서 작성을 한 후 '파일이름.RC'로 저장을 하면 된다. 

여기까지 해서 RC 파일을 작성했으면 이제는 컴파일을 해서 RES 파일로 만드는
과정이 남아 있다. 
리소스 파일을 만들기 위해 델파이에서는 BRCC(Boaland Resource Command Line
Compiler)와 BRCC32를 제공한다. 이 녀석들은 RC 파일을 컴파일해서 RES 파일로
만들어 주는 역할을 한다. 
이름 그대로 Command Line에서 사용하는 녀석들인데 사용방법은 매우 간단하다. 
그저 'BRCC32 파일명.RC' 라고 커맨드 라인에서 입력하기만 하면 RES 파일을 만들어
준다. 이 두녀석은 델파이의 BIN 디렉토리에 존재하며 다른 경로에서 컴파일 하기
위해서는 Path에 이 디렉토리를 추가하여 주어야 한다.
(예: path c:\progra~1\borland\delphi5\bin) 

- RC 파일의 컴파일

   BRCC32 MyRes.RC

이렇게 해서 만들어진 Res 파일을 사용하려면 어떻게 해야 하는지 알아보자. 
리소스 파일을 실행파일의 Res에 추가하려면 $R 지시자를 사용하여 추가한다. 
이렇게...

{$R MyRes.RES}

아마 Unit에서 {$R *.DFM} 이렇게 작성된 부분을 보았을 것이다. 이것 또한 DFM
파일을 폼의 리소스에 추가하겠다는 코드이다. 이렇게 추가된 리소스는 한 프로젝트
내의 모든 유닛에서 사용이 가능하다. 

위와 같이 하여 폼에 우리가 작성한 Res 파일을 추가한 후 컴파일을 하면 컴파일
전과 컴파일 후의 실행 파일의 크기가 변한 것을 알 수 있다. 당연한 이야기지만...
실행 파일에 우리가 작성한 리소스 파일을 추가 했으니 추가된 리소스 만큼 폼의
크기가 늘어나는 것은 당연한 것이다. 

마지막 부분에서 생각해 볼 것이지만 리소스 파일을 남발하는 것은 자칫 잘못하면
엄청난 크기의 실행 파일을 만들어 낼 수도 있다는 것을 주의해야 하며 이것은
메모리 낭비로 이어지는 것이다.

이렇게해서 실행 파일에 우리의 리소스를 추가했다면 우리는 이 리소스를 사용을
해야 한다. 어떻게 추가된 리소스를 사용하는지 알아보자. 



리소스의 사용예

우리가 추가한 리소스가 Wave 파일이므로 리소스에서 Wave 파일을 로드하여
연주하는 방법을 살펴보자.
Wave 파일을 연주하려면 PlaySound나 sndPlaySound 같은 API를 이용하여 연주하게
되는데 문제는 Wave가 파일로 존재하지 않는 것이라는 것이다. 리소스에 추가된
Wave를 연주하는데 PlaySoud와 sndPlaySound는 서로 비슷한 방법을 사용해서
연주하게 된다. 본론 부터 말하자면 두 함수 모두 Wave 리소스를 연주하는데는
별다른 차이가 없다. 즉 사용방법이 거의 동일하다는 얘기이다. 이 함수들을
사용하기 전에 MMSYSTEM을 Uses에 추가 해 주어야 한다.

- PlaySound의 경우...

  PlaySound의 경우는 바로 리소스에서 Wave를 연주 할 수 있는데 바로 SND_RESOU   
RCE란 플랙을 이용하면 된다. 
  예를 보자...

  PlaySound('WAVEFILE', hInstance, SND_RESOURCE or SND_ASYNC);

  여기서 WAVEFILE은 처음에 RC 파일을 만들때 맨 앞에 적어 주었던 리소스 이름    
이며 두번째 인자로 필요한 HModule에 현재 Instance를 주면 되며 마지막으로 
  SND_RESOURCE라는 플랙을 추가 함으로써 간단히 Wave리소스를 연주 할 수 있다.

- sndPlaySound의 경우...

  sndPlaySound도 PlaySound와 별다른 차이가 없다. 

  sndPlaySound('WAVEFILE', SND_RESOURCE or SND_ASYNC);

  설명을 따로 할 필요가 없을 정도로 비슷하다. 

리소스에서 바로 연주하는 방법을 살펴 보았는데 다른 방법으론 TResourceStream을
이용해서 연주하는 방법이 있다. 이 때 사용하는 플랙은 SND_MEMORY란 플랙이며
sndPlaySound만을 예로 들어 보겠다. 

- TResourceStream을 이용한 연주...

   var
     Soo: TResourceStream;
   begin
     Soo := TResourceStream.Create(hInstance, 'WAVEFILE', PChar('Wave'));
     sndPlaySound(Soo.Memory, SND_MEMORY or SND_ASYNC);
     Soo.Free;
   end;

   TResourceStream을 생성하는 부분을 살펴 보면... 첫번째 인자로 인스탄스를 
   넘겨준다. 그리고 두 번째로 리소스 이름, 그리고 마지막으로 리소스 타입을
   넘겨주면 된다. 
   이렇게 해서 얻어진 Wave를 sndPlaySound의 SND_MEMORY 플랙을 이용해서 연
   주 할 수 있는 것이다. 
   PlaySound도 거의 동일 하므로 직접 한 번 해 보기를 권한다.


여기까지 해서 어떻게 리소스 파일을 생성하는지를 알아보았고 또 어떻게 리소스에
추가된 데이터를 읽어 오는가에 대해 알아 보았다. 
다음번에는 리소스 DLL을 만드는 방법과 만들어진 리소스 DLL을 이용해서 동적으로
리소스를 불러오는 방법... 그리고 각 리소스를 어떻게 사용하는지에 대해 알아
보도록 하겠다. 

노파심에 한 마디 더 하자면... 설명한 부분중 설명이 잘 못된 부분이 있을경우
지적해 주시면 바로 수정 조치 토록 하겠다. 

끝까지 읽어 주신 분들께 경의를 표하며 이만 마치겠다. 



RESEXAM1.ZIP


Posted by SB패밀리

델파이 컴포넌트

delphi VCL



http://sf.net/projects/graphics32http://www.graphics32.org/wiki/
February 25, 2005: Release of Graphics32 1.7.1. 
개발환경 : D4,5,6,7,2005 C5,6

Graphics32 is a library designed for fast 32-bit graphics handling on Delphi and Kylix. Optimized for 32-bit pixel formats, it provides fast operations with pixels and graphic primitives, and in most cases Graphics32 outperforms the standard TCanvas? classes. It is almost a hundred times faster in per-pixel access and about 2–5 times faster in drawing lines. 

Features
Some of Graphics32 features include: 

Fast per-pixel access up to 100 times faster compared to standard TBitmap?; 
High-performance Bitmap alpha blending (including per-pixel alpha blending); 
Pixel, line and polygon antialiasing with sub-pixel accuracy (combined with alpha blending); 
Arbitrary polygon transformations and custom fillings; 
Bitmap resampling with high quality reconstruction filters (e.g. Lanczos, Cubic, Mitchell); 
A unique state-of-the-art rasterization system; 
Affine transformations of bitmaps: rotations, scaling, etc with sub-pixel accuracy; 
Arbitrary projective transformations of bitmaps; 
Arbitrary remapping transformations of bitmaps (e.g. for Warping, Morphing); 
Flexible supersampling implementation for maximum sampling quality; 
Flicker-free image displaying components with optimized double buffering via advanced MicroTiles? based repaint optimizer; 
Multiple customizible easy-to-use overlay layers; 
Locking of bitmaps for safe multithreading; 
A property editor for RGB and alpha channel loading; 
Design-time loading of image formats supported by standard TPicture; 
Works on Borland Delphi, C++ Builder and Kylix. 

As of version 1.5.1b Graphics32 is licensed under the terms of the Mozilla Public License. 

+++++ 설치

Graphics32 supports Delphi versions 4, 5, and 6, and C++ Builder 5.

Note, because some properties of range bars and gage bars have been changed, you can obtain some error messages while opening your previous Graphics32 projects. Just ignore these messages and Delphi will fix DFM files automatically.



Unzip the files; 
Add location of main installation directory to Tools | Environment Options | Library | Library Path. 
Select File | Open... on the menu bar. Set Files of type to Delphi package source, locate and open GR32_DSGN_D6.dpk (GR32_DSGN_D5 for Delphi5, GR32_DSGN_D4 for Delphi4 or GR32_DSGN_B5 for C++ Builder); 
A package editor window will appear. Click Compile, then click Install; 
If compiler asks whether you want to save changes, usually it is a good idea to choose No. 



+++++ 설명:

Additional Topics
Line Patterns

Using TImage32

Classes (Alphabetical)
TAffineTransformation

TArrowBar

TBitmap32

TBitmap32Collection

TBitmap32Item

TBitmap32List

TBitmapLayer

TByteMap

TCustomGaugeBar

TCustomImage32

TCustomImgView32

TCustomLayer

TCustomMap

TCustomPaintBox32

TCustomRangeBar

TGaugeBar

TImage32

TImgView32

TIVScrollProperties

TLayerCollection

TPaintBox32

TPaintStages

TPolygon32

TPositionedLayer

TProjectiveTransformation

TRangeBar

TRubberbandLayer

TThreadPersistent

TTransformation
Classes (Hierarchy)
TArrowBar

TCustomGaugeBar

TGaugeBar

TCustomRangeBar

TRangeBar

TBitmap32Collection

TBitmap32Item

TBitmap32List

TCustomLayer

TPositionedLayer

TBitmapLayer

TRubberbandLayer

TCustomPaintBox32

TCustomImage32

TCustomImgView32

TImgView32

TImage32

TPaintBox32

TIVScrollProperties

TLayerCollection

TPaintStages

TPolygon32

TThreadPersistent

TCustomMap

TBitmap32

TByteMap

TTransformation

TAffineTransformation

TProjectiveTransformation


Routines
AlphaComponent  Creating Points  Lighten  
AlphaToGrayscale  Creating Rectangles  OffsetRect  
ApplyLUT  EMMS  Polygon  
Blend  EqualRect  Polyline  
BlendEx  Fixed Point Math  PolyPolygon  
BlockTransfer  Gray32  PolyPolyline  
BlueComponent  GreenComponent  PtInRect  
Color32  HSLtoRGB  RedComponent  
ColorAdd  InflateRect  RGBtoHSL  
ColorMax  Intensity  SetAlpha  
ColorMin  IntensityToAlpha  SetBorderTransparent  
ColorModulate  IntersectRect  SetGamma  
ColorSub  Invert  StretchTransfer  
ColorToGrayScale  InvertRGB  Transform  
Combine  IsRectEmpty  WinColor  

Types
Arrays  TFloatMatrix  TRBHandles  
Color Types  TLUT8  TRBStyle  
Point Types  TPaintBoxOptions  TRectRounding  
Rectangle Types  TPaintStage  TSize  
TConversionType  TPixelCombineEvent  TSizeGripStyle  
TDrawMode  TPolyFillMode  TStretchFilter  
TFixed  TRBBackgnd  

Variables
MMX_ACTIVE  

Constants
Color Constants  IdentityMatrix  Paint Stage Constants  
G32Version  Layer Options Bits  

Units
GR32  GR32_Filters  GR32_Polygons  
GR32_Blend  GR32_Image  GR32_RangeBars  
GR32_ByteMaps  GR32_Layers  GR32_Transforms  



Graphics32_1_7_1.zip


Posted by SB패밀리

델파이/Delphi VCL 컴포넌트 


Graphics32 v1.8.1 for D5,6,7,2005, C5,6, BDS2006





http://sf.net/projects/graphics32http://graphics32.org/wiki/
Graphics32 is a set of functions, classes, components and controls designed for high-performance graphics programming.

Being highly specialized for 32-bit pixel format, it provides fast operations with pixels and graphic primitives and in most cases Graphics32 considerably outperforms standard TBitmap/TCanvas classes.

The library comes with a full source code, documentation and examples. 



Installation
Graphics32 supports Delphi versions 5, 6, 7, 2005 (Win32), 2006 (Delphi Win32 and C++), and C++ Builder 5 and 6.

As of version 1.6 there is also CLX support in Graphics32. That means you can use it either with CLX on Windows using Delphi or on x86 Linux using the Kylix Delphi environment.



Note: If you want to use the Windows CLX version in Delphi, you'll have to uncomment the {$DEFINE CLX} line in GR32.inc.

Note: For Delphi 2005 and up function inlining is automatically used to improve performance in certain situations. If you want to avoid this, please comment out the {$DEFINE USEINLINING} line in GR32.inc.

Note: Because some properties of range bars and gage bars have been changed, you can obtain some error messages while opening your previous Graphics32 projects. Just ignore these messages and Delphi will fix DFM files automatically.



Unzip the files; 
Add location of main installation directory to Tools | Environment Options | Library | Library Path. 
Select File | Open... on the menu bar. Set Files of type to Delphi package source, locate and open GR32_DSGN_D6.dpk
(GR32_DSGN_K for Kylix, GR32_DSGN_BDS2006 for Borland Developer Studio 2006, GR32_DSGN_D2005 for Delphi 2005, GR32_DSGN_D7 for Delphi7, GR32_DSGN_D6 for Delphi6, GR32_DSGN_D5 for Delphi5 or GR32_DSGN_B5 for C++ Builder); 
A package editor window will appear. Click Compile, then click Install; 
If compiler asks whether you want to save changes, usually it is a good idea to choose No. 



graphics32_1_8_1.zip


Posted by SB패밀리

델파이 영상처리 VCL Sobakcc Lab [2003.10.16 ver 0.1.10]







SB_Lab

제작: 소백촌닭(sobakcc@nate.com) http://sb.pe.kr
내용: 영상처리 관련 컴포넌트

/****************************************************************************

[비고]

컴포넌트 상에 버그나 개선할 점이 있다면 홈페이지나 메일로 알려주시면
고맙겠습니다.

/****************************************************************************

[VERSION HISTORY]

### 2003.10.16 ver 0.1.10

  - Added: TSBImageEffect: Brighten,SharpenEdge,Spray추가.

### 2003.10.14 ver 0.1.9

  - Added: SB_ImageEffect: Source 이미지로 원본과 사용본 선택가능.
  - Added: SB_ImageEffectView: Source 이미지로 원본과 사용본 선택가능.
  - Added: CropMode 추가로 CropRect(영역) 리턴가능.
  - Fixed: UseOriginalBitmap = False 일경우 DblClick() 기능 버그 수정.

### 2003.10.09 ver 0.1.8

  - Added: TSBImageEffectView VCL - Image View기능. (Zoom, FittoWindow, Aspect, Image Effect기능)

### 2003.10.08 ver 0.1.7

  - Added: TSBImage32 VCL

### 2003.10.07 ver 0.1.6

  - Added: Sharpening, Free Rotate.

### 2003.10.06 ver 0.1.5

  - Added: Zoom(AntiAlias 포함), Cropping, Blurring.

### 2003.10.02 ver 0.1.4

  - Added: Flip-Horizontal, Flip-Vertical.

### 2003.10.01 ver 0.1.3

  - Added: 'Gaussian Blur', 'SplitBlur', 'Add Color-Noise', 'Add Mono-Noise',
           'AntiAlias', 'Contrast', 'FishEye', 'Lightness', 'Darkness',
           'Saturation', 'Mosaic', 'Twist', 'SplitLight', 'Tile', 'SpotLight',
           'Trace', 'Emboss', 'Solarize', 'Posterize', 'Grayscale', 'Invert'.



Sobakcc_Lab.zip


Posted by SB패밀리

아래의 과정을 거치는 것 외에 특별한 것은 없음..

클립보드 이미지 데이터 -> 비트맵 -> JPEG






uses 에 Jpeg, ClipBrd 추가해야 함.


procedure SaveClipBoardPicture(ImgPath: String);

var

  Btm: TBitmap;

  Jpg: TJpegImage;


begin  

  Btm:=TBitmap.Create;

  Jpg:=TJpegImage.Create;

  try

      // 1. 클립보드 -> 비트맵

      Btm.Assign(ClipBoard);

      // 2. 비트맵 -> JPEG

      Jpg.Assign(Btm);


      // 압축퀄리티 설정

      Jpg.CompressionQuality:=50;

      // 파일로 저장

      Jpg.SaveToFile(ImgPath);

  finally

    FreeAndNil(Jpg);

    FreeAndNil(Btm);

  end;

end;

Posted by SB패밀리

[DELPHI TIP] TAdvStringGrid에 Combobox 사용하는 방법..




두가지 방법이 있습니다.
셀을 수정할때 콤보박스나 기타 컨트롤이 표시되는방법과
첨부터 나와있는방법....

두가지다 해보면요...
GetEditorType 이벤트를 이용하시면 에디트하실 때만 보입니다. 1번컬럼을 그렇게 만들어보겠습니다.

그리고 2,3번은 radio버튼으로 만들어보겠습니다. 
첨부터 보이실려면 Formcreate이벤트나 기타 함수에서 한번 만들어주시면됩니다.
Formcreate에서 만들어보죠.

먼저 폼생성시

procedure TForm1.FormCreate(Sender: TObject);
var
i:integer;

begin
radopt1:=tstringlist.Create;
radopt1.Add('Delphi');
radopt1.Add('C++Builder');
radopt1.Add('JBuilder');
radopt2:=tstringlist.Create;
radopt2.Add('Std');
radopt2.Add('Prof');
radopt2.Add('C/S');
with Grid do
begin
ColCount := 4;
RowCount := 10;
for i:=1 to rowcount-1 do
begin
addradio(2,i,0,-1,radopt1);
addradio(3,i,1,-1,radopt2);
end;
DefaultRowHeight := 70;
DefaultColWidth := 120;
Options := Options + [goEditing];

end;
end;

다음과 같이 해줍니다.
Grid함수중 addradio함수를 이용해서 radio버튼이 나와야 할곳에 for문으로 미리 다 출력해서 만들어두는 방식입니다.
Options에 goEdting속석이 들어가있어야 수정이 가능하므로 그때 수정시 column1에 콤보박스가 보입니다.

클릭했을때 내용을 보시기 위해서는 

Grid이벤트중 OnGetEditorType 이벤트를 만들어주시면됩니다.
procedure TForm1.gridGetEditorType(Sender: TObject; ACol,
ARow: Integer; var AEditor: TEditorType);
begin
With Grid do begin
case ACol of
1: begin
aEditor := edComboList;
ClearComboString;
AddComboString('대구');
AddComboString('대전');
AddComboString('서울');
AddComboString('평양');
end;
end; // case
end; // with
end; // procedure



지원가능한 컨트롤은 ...
TEditorType = (edNormal,edSpinEdit,edComboEdit,edComboList,edEditBtn,edCheckBox,
edDateEdit,edDateEditUpDown,edTimeEdit,edButton,edDataCheckBox,edNumeric,
edPositiveNumeric,edFloat,edCapital,edMixedCase,edPassword,edUnitEditBtn,
edLowerCase,edUpperCase,edFloatSpinEdit,edTimeSpinEdit,edDateSpinEdit,
edNumericEditBtn,edFloatEditBtn,edCustom,edRichEdit,edNone
{$IFDEF TMSUNICODE}
, edUniEdit,edUniComboEdit,edUniComboList,edUniEditBtn, edUniMemo
{$ENDIF}
);
이렇습니다. 참고하시고요.

창훈 wrote:
> 안녕하세요..

> TAdvStringGrid.. 예제만 보더라도.. 그 기능이 정말로 막강하지않나 싶습니다.. 그래서 그런지 프로퍼티 창에 나열된 속성만 하더라도 정말 많네요..

> 그 중에 가장 기본이 될 만한 Combobox를 쎌 안에 넣는 방법이 필요해서.. 데모프로그램도 보았습니다만.. 그리고, 해당 사이트에 있는 설명도 보았습니다만.. 영어가 짧아서 인지.. 어떤 프로퍼티가 어떤 값으로 설정되어야 한다는 명확한 이야기를 찾지 못했고, 그래서 결국 여러분께 다시 도움을 청합니다..

> Combobox 를 넣기 위한 프로퍼티 속성은 어떻게 되어야 하는지요..?





출처: http://cyhome.cyworld.com/?home_id=a4202130&postSeq=7853519

Posted by SB패밀리

즐겨찾기 리스트를 리스트박스로 출력하기



uses 에 ShlObj 추가.


 


// 즐겨찾기를 TStrings 형태로 반환

function GetIEFavorites(const favpath: String): TStrings;

var

  Str: TStrings;

  SearchRec: TSearchRec;

  Path, Dir, FileName: String;

  Buffer: array [0..2047] of Char;

  Found: Integer;


 


begin

  Str:=TStringList.Create;


  // 일단 .URL 파일을 뒤지고

  Path:=FavPath+'\*.url';

  Dir:=ExtractFilePath(Path);

  Found:=FindFirst(Path, faAnyFile, SearchRec);

  while Found=0 do begin

    // Buffer 의 내용을 GetPrivateProfileString 길이만큼 FileName 으로 복사

    SetString(

      FileName,

      Buffer,

      // INI 형식의 파일에서 특정 Key 읽어오기

      // 즐겨찾기 파일인 .URL도 INI 형식으로 저장되어 있음.

      GetPrivateProfileString('InternetShortcut',  {대분류}

                              PChar('URL'),        {키 이름}

                              nil,                 {Default 값}

                              Buffer,              {내용을 복사할 버퍼}

                              SizeOf(Buffer),      {복사할 크기}

                              PChar(Dir+SearchRec.Name)) {읽어올 파일 경로}

      );

    Str.Add(FileName);

    Found:=FindNext(SearchRec);

  end;


 


  // 디렉토리일 경우엔 재귀 호출로 파고 들어감

  Found:=FindFirst(Dir+'\*.*', faAnyFile, SearchRec);

  while found=0 do begin

    if ((SearchRec.Attr and faDirectory)>0) and (SearchRec.Name[1]<>'.') then begin

      Str.AddStrings(GetIEFavorites(Dir+'\'+SearchRec.Name));

    end;

    Found:=FindNext(SearchRec);

  end;


 


  FindClose(SearchRec);

  Result:=Str;

end;


 


 


 


사용법은 이렇다.


이 함수로 굴리면 리스트박스에 URL만 자동으로 추가됨.


 


procedure TForm1.Button1Click(Sender: TObject);

var

  pIDList: PItemIDList;

  FavPath: Array [0..MAX_PATH] of Char;



begin

  // pIDList에 CSIDL_FAVORITES(즐겨찾기폴더)에 해당하는 포인터 지정

  if SHGetSpecialFolderLocation(Handle, CSIDL_FAVORITES, pIDList)=S_OK then begin

    // pIDList에 있는 Path 경로를 FavPath 에 대입

    if SHGetPathFromIDList(pIDList, FavPath) then begin

      //ShowMessage(FavPath);

      ListBox1.Items:=GetIEFavorites(StrPas(FavPath));

    end

    else ShowMessage('Error: SHGetPathFromIDList');

  end

  else ShowMessage('Error<>S_OK');

end;





Posted by SB패밀리





Borland Delphi 5로 개발된 암호화 DLL

문자열을 암호화 하고 해독하는 함수

Readme.txt : 지금 보고 있는 텍스트 파일
cccipher.dll : 암호화/해독 함수가 포함된 DLL

[델파이에서 선언]
Function Encrypt(Src: PChar; Key: Word): PChar; stdcall; External 'CCCIPHER.DLL';
Function Decrypt(Src: PChar; Key: Word): PChar; stdcall; External 'CCCIPHER.DLL';

[델파이에서 사용]
// encipher
Edit2.Text := StrPas(Encrypt(PChar(Edit1.Text), StrToInt(Edit5.Text)));
// decipher
Edit4.Text := StrPas( Decrypt( PChar(Edit3.Text), StrToInt(Edit5.Text) ) );

※ C++Builder 5 예제도 포함되어 있음.

Base64 인코딩/디코딩 된 결과물을 볼 수 있음.
사용에 버그가 있거나 문의사항이 있을 경우에 연락을 주시면 감사하겠습니다. 
homepage: http://sb.pe.kr 

암호화DLL테스트.ZIP


좋은 목적을 위해서라면 아무나 쓰셔도 상관 없습니다.

- 쌈꼬쪼려 소백촌닭 -




Posted by SB패밀리

sobakcc Control Package v 1.0


2005.01.03


컨트롤 팩키지 버전 1.0이 공개되었습니다.


벌써 만들어 놓은지는 몇년이 지났지만 그동안 구석에 놔두다가 이렇게 올려봅니다.
비주얼 컴포넌트의 컨트롤을 모아둔 팩키지입니다.
이 컴포넌트들은 Flat-Style의 모양으로 각종 컨테이너 컴포넌트 상에 위치하게 됩니다.



* FlatStyle의 비주얼 컴포넌트
* 전체 31개의 컴포넌트가 팩키지 안에 들어 있습니다.


* TCCAboutBox, TCCAlignEdit, TCCAnimation, TCCAnimWnd, TCCButton, 
TCCCheckBox, TCCCheckListBox, TCCColorComboBox, TCCComboBox, TCCDBComboBox,
TCCDBEdit, TCCDBLookupComboBox, TCCDBMemo, TCCEdit, TCCGauge, 
TCCGroupBox, TCCHint, TCCLinkText, TCCListBox, TCCMaskEdit,
TCCMemo, TCCPanel, TCCProgressBar, TCCRadioButton, TCCShape,
TCCSound, TCCSpeedButton, TCCSpinEditFloat, TCCSpinEditInteger, TCCSplitter, TCCTabControl


팩키지를 등록할 수 있는 팩키지 파일 *.bpl과 각 컨트롤의 컴파일된 파일인 *.dcu 파일들이 포함되어 있습니다.

컴포넌트 팔레트에 있는 팩키지의 모습입니다.

Win32 버전에 대해서 자주는 아니지만 지속적으로 컴포넌트를 추가할 예정입니다.
버그가 몇개가 있을지는 모르겠습니다만 버그가 발견된다면 게시판으로 알려주시면 감사하겠습니다.

*.bpl을 포함한팩키지 파일이 무료배포 됩니다








Posted by SB패밀리




Form에서 어느 포커스에 있어도 키 입력을 받아, ESC 키를 누르면 Form 이 닫히도록 할 수 있다.


방법은 다음과 같다.


- Form 의 Key Preview 속성을 True 로 설정한다.

- Form 의 OnKeyPress 이벤트 핸들러에 다음 코드를 작성한다.


if ( Key = #27 ) then

  begin

    Form1.Close;

  end;


위와 같이 OnKeyPress 이벤트 핸들러를 작성하면 Form 의 어느 곳에서나 ESC 키를 누렀을 때 Form1 이 Close 된다.







 

비슷한 방법으로 Edit 컨트롤에서 Enter 키나 Tab키를 눌렀을 때 특정 동작을 수행하도록 할 수도 있다. 

이 때는 Edit 컨트롤의 OnKeyPress 이벤트 핸들러를 위와 같이 작성한다.



if ( Key = #13 ) then

  begin

    Button1.Click;

  end;


만약 위와 같이 Edit 컨트롤의 OnKeyPress 이벤트 핸들러를 작성하면 Edit 컨트롤에서 문자열을 입력한 후 엔터키를 누르면 Button1 의 Click 메소드를 호출할 수 있다.

Posted by SB패밀리

델파이에서 그래픽 파일(JPG, GIF, PNG) 다루기



델파이에서는 기본적으로 TImage 라는 컴포넌트로 이미지를 다루는데,

이것은 그냥 BMP 파일을 다루는 것 같습니다.


델파이 2007에서는 JPG와 GIF 형식을 바로 보여줄 수 있습니다.

델파이 2009에서는 PNG 형식을 추가로 바로 보여줄 수 있게 되었습니다.


PNGImage 라는 오픈소스를 아예 Embarcadero에서 사버렸습니다.

머, GIF쪽은 저자가 직접 기증?한거이지만...


델파이 2009에서 TImage 컴포넌트에 각각의 그래픽 파일을 보여주는 예제는 다음과 같습니다.

각각의 이미지 파일을 처리하기 위해서는 

uses PNGImage, JPEG, GIFImg;


구문을 앞부분에 사용하여야만 합니다.





procedure TForm1.Button1Click(Sender: TObject);

var

  Extension : String;

  PNG : TPNGImage;

  JPG : TJPEGImage;

  GIF : TGIFImage;

begin


  // 저장된 파일의 확장자명을 추출한다.

  Extension := ExtractFileExt(OutputFilePath);

  Extension := LowerCase(Extension);


  // GIF 파일 형식인 경우,

  if Extension = '.gif' then

  begin

    GIF := TGIFImage.Create;

    try

      GIF.LoadFromFile(OutputFilePath);

      Image1.Picture.Assign(GIF);

      Image1.Stretch := True;

      Image1.Visible := True;

    finally

      GIF.Free;

    end;



  end

  // JPG 파일 형식인 경우,

  else if Extension = '.jpg' then

  begin

    JPG := TJPEGImage.Create;

    try

      JPG.LoadFromFile(OutputFilePath);

      Image1.Picture.Assign(JPG);

      Image1.Stretch := True;

      Image1.Visible := True;

    finally

      JPG.Free;

    end;

  end

  // PNG 파일 형식인 경우,

  else if Extension = '.png' then

  begin

    PNG := TPngImage.Create;

    try

      PNG.LoadFromFile(OutputFilePath);

      Image1.Picture.Assign(PNG);

      Image1.Stretch := True;

      Image1.Visible := True;

    finally

      PNG.Free;

    end;

  end;

end;


출처: http://hook.tistory.com/181?srchid=BR1http://hook.tistory.com/181

Posted by SB패밀리



델파이에서 쓰는 Format의 간단한 사용례

Format 함수 정의

class function Format ( Const StrFormat : string; Const Args : array of const ) :string;

StrFormat 정의 형식

%[Index:][-][표시할 자리수][.0을 채울 자리수]Type

■ 타입 종류

  d = 정수

  e = 지수표시

  f = 소수점 두번째 자리 이후 반올림

  g = 입력된 대로 표시

  m = 통화

  n = 수치 쉼표 표시(소수점 두번째 자리 이후 반올림)

  p = 포인터

  s = 문자열

  u = 부호없는 정수

  x = 16진수

■ 포멧 형식 관련 사용례

  sMsg:String;

  sMsg := '';

  sMsg := sMsg + #13#10 + Format('<%%10d>   = <%10d>', [12345]);

  sMsg := sMsg + #13#10 + Format('<%%-10d>  = <%-10d>', [12345]);

  sMsg := sMsg + #13#10 + Format('<%%.7d>   = <%.7d>', [12345]);

  sMsg := sMsg + #13#10 + Format('<%%10.5d> = <%10.5d>', [12345]);

  sMsg := sMsg + #13#10;

  sMsg := sMsg + #13#10 + Format('<%%7.4d>, [123]       = <%7.4d>', [123]);

  sMsg := sMsg + #13#10 + Format('<%%*.4d>, [7, 123]    = <%*.4d>', [7, 123]);

  sMsg := sMsg + #13#10 + Format('<%%*.*d>, [7, 4, 123] = <%*.*d>', [7, 4, 123]);

  sMsg := sMsg + #13#10;

  sMsg := sMsg + #13#10 + Format('Index Usage = %s %s %s %1:s %s',

                     ['A', 'B', 'C', 'D', 'E']);

▶ 결과

<%10d>   = <     12345>

<%-10d>  = <12345     >

<%.7d>   = <0012345>

<%10.5d> = <     12345>

<%7.4d>, [123]       = <   0123>

<%*.4d>, [7, 123]    = <   0123>

<%*.*d>, [7, 4, 123] = <   0123>

Index Usage = A B C B C

■ 포멧 타입 관련 사용례

  sMsg:String;

  sMsg := '';

  sMsg := sMsg + #13#10 + Format('%%d = %d', [-12345]);

  sMsg := sMsg + #13#10 + Format('%%e = %e', [12345.6789]);

  sMsg := sMsg + #13#10 + Format('%%f = %f', [123.456789]);

  sMsg := sMsg + #13#10 + Format('%%g = %g', [12.3456789]);

  sMsg := sMsg + #13#10 + Format('%%n = %n', [12345.6789]);

  sMsg := sMsg + #13#10 + Format('%%m = %m', [12345.6789]);

  sMsg := sMsg + #13#10 + Format('%%p = %p', [addr(sMsg)]);

  sMsg := sMsg + #13#10 + Format('%%s = %s', ['FormatTest']);

  sMsg := sMsg + #13#10 + Format('%%u = %u', [12345]);

  sMsg := sMsg + #13#10 + Format('%%x = %x', [12345]);

▶ 결과

%d = -12345

%e = 1.23456789000000E+004

%f = 123.46

%g = 12.3456789

%n = 12,345.68

%m = \12,346

%p = 0012F5B4

%s = FormatTest

%u = 12345

%x = 3039

 

Posted by SB패밀리

델파이 날짜 함수




// include 

uses DateUtils


// declaration


//일자를 추출한다.
function DateOf(const AValue: TDateTime): TDateTime; 

//시간을 추출한다.
function TimeOf(const AValue: TDateTime): TDateTime;

//평년,윤년을 구분하다.
function IsInLeapYear(const AValue: TDateTime): Boolean;

//오전,오후를 구분한다.
function IsPM(const AValue: TDateTime): Boolean;

//Word형의 년,월,일 파라메타의 유효성을 체크한다.
function IsValidDate(const AYear, AMonth, ADay: Word): Boolean;

//Word형의 시,분,초,밀리초 파라메타의 유효성을 체크한다.
function IsValidTime(const AHour, AMinute, ASecond, AMilliSecond: Word): Boolean;

//Word형의 년,월,일,시,분,초,밀리초  파라메타의 유효성을 체크한다.
function IsValidDateTime(const AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word): Boolean;

//ex) IsValidDateDay(2006,45) : 2006년의 45번째날이 유효한지를 체크한다.
function IsValidDateDay(const AYear, ADayOfYear: Word): Boolean;

//ex) IsValidDateWeek(2006,42) : 2006년의 42주차가 유효한지를 체크한다.
function IsValidDateWeek(const AYear, AWeekOfYear,  ADayOfWeek: Word): Boolean;

//년,월,월의주차,요일  이  유효한지를  체크한다.
//ex) IsValidDateMonthWeek(2006,2,1,2) : 2006년 2월의 1주차의 화요일이 유효한지를 체크한다.
function IsValidDateMonthWeek(const AYear, AMonth, AWeekOfMonth, ADayOfWeek: Word): Boolean;

//ex) WeeksInYear(Today) : 오늘이 년의 몇주차인지 리턴한다.
function WeeksInYear(const AValue: TDateTime): Word;                 
function WeeksInAYear(const AYear: Word): Word;            

//ex) DaysInYear(Today) : 오늘이 년의 몇일째인지 리턴한다.           
function DaysInYear(const AValue: TDateTime): Word;
function DaysInAYear(const AYear: Word): Word;

//ex) DaysInMonth(Today) : 오늘이 월의 몇일째인지 리턴한다.
function DaysInMonth(const AValue: TDateTime): Word;
function DaysInAMonth(const AYear, AMonth: Word): Word;

//오늘-
function Today: TDateTime;

//어제-
function Yesterday: TDateTime;

//내일-
function Tomorrow: TDateTime;

//AValue의 값이 오늘이면 True를 리턴한다.
function IsToday(const AValue: TDateTime): Boolean;

//AValue, ABasis 같은날이면 True를 리턴한다.
function IsSameDay(const AValue, ABasis: TDateTime): Boolean;


//년을 추출한다.
function YearOf(const AValue: TDateTime): Word;

//월을 추출한다.
function MonthOf(const AValue: TDateTime): Word;

//년의 몇주차인지를 추출한다.
function WeekOf(const AValue: TDateTime): Word;          

//일자만 추출한다.
//ex) DayOf(StrToDate('2006-06-27')) : 27을 리턴한다.
function DayOf(const AValue: TDateTime): Word;

//시간을 추출한다(24시간단위)
function HourOf(const AValue: TDateTime): Word;

//분을 추출한다.
function MinuteOf(const AValue: TDateTime): Word;

//초를 추출한다.
function SecondOf(const AValue: TDateTime): Word;

//밀리초를 추출한다.
function MilliSecondOf(const AValue: TDateTime): Word;

//년도의 시작일
function StartOfTheYear(const AValue: TDateTime): TDateTime;
function StartOfAYear(const AYear: Word): TDateTime;

//년도의 마지막일
function EndOfTheYear(const AValue: TDateTime): TDateTime;
function EndOfAYear(const AYear: Word): TDateTime;

//월의 시작일
function StartOfTheMonth(const AValue: TDateTime): TDateTime;
function StartOfAMonth(const AYear, AMonth: Word): TDateTime;

//월의 마지막일
function EndOfTheMonth(const AValue: TDateTime): TDateTime;
function EndOfAMonth(const AYear, AMonth: Word): TDateTime;

//주의 시작일
function StartOfTheWeek(const AValue: TDateTime): TDateTime;    

//주의 시작일(기준요일을 정할수 있다.)
//1:월요일, 2:화요일, 3:수요일, 4:목요일 ,5:금요일 , 6:토요일 ,7:일요일
function StartOfAWeek(const AYear, AWeekOfYear: Word; const ADayOfWeek: Word = 1): TDateTime;

//주의 마지막일
function EndOfTheWeek(const AValue: TDateTime): TDateTime;      

//주의 마지막일(기준요일을 정할수 있다.)
//1:월요일, 2:화요일, 3:수요일, 4:목요일 ,5:금요일 , 6:토요일 ,7:일요일
function EndOfAWeek(const AYear, AWeekOfYear: Word; const ADayOfWeek: Word = 7): TDateTime;



function StartOfTheDay(const AValue: TDateTime): TDateTime;
function StartOfADay(const AYear, AMonth, ADay: Word): TDateTime; overload;
function StartOfADay(const AYear, ADayOfYear: Word): TDateTime; overload;
function EndOfTheDay(const AValue: TDateTime): TDateTime;
function EndOfADay(const AYear, AMonth, ADay: Word): TDateTime; overload;
function EndOfADay(const AYear, ADayOfYear: Word): TDateTime; overload;


//ex) MonthOfTheYear(Today) : 오늘일자를 Word형으로 리턴한다.
function MonthOfTheYear(const AValue: TDateTime): Word;

//ex) WeekOfTheYear(Today) : 오늘일자가 몇주차인지를 Word형으로 리턴한다.
function WeekOfTheYear(const AValue: TDateTime): Word; overload; 
function WeekOfTheYear(const AValue: TDateTime;  var AYear: Word): Word; overload;

//ex) DayOfTheYear(Today) : 오늘일자가 올해의 몇일째인지를 Word형으로 리턴한다.
function DayOfTheYear(const AValue: TDateTime): Word;

//년의 시작일부터  해당일자까지의 시간을  모두 더해서 Word형으로 리턴한다.
function HourOfTheYear(const AValue: TDateTime): Word;

//년의 시작일부터  해당일자까지의 분을 모두 더해서 Word형으로 리턴한다.
function MinuteOfTheYear(const AValue: TDateTime): LongWord;

//년의 시작일부터  해당일자까지의 초을  모두 더해서 Word형으로 리턴한다.
function SecondOfTheYear(const AValue: TDateTime): LongWord;

//년의 시작일부터  해당일자까지의 밀리초을  모두 더해서 Word형으로 리턴한다.
function MilliSecondOfTheYear(const AValue: TDateTime): Int64;

//이달의 몇번째주 인지를 리턴한다.
function WeekOfTheMonth(const AValue: TDateTime): Word; overload; 
function WeekOfTheMonth(const AValue: TDateTime; var AYear, AMonth: Word): Word; overload;

//이달의 몇일째인지를 리턴한다.
function DayOfTheMonth(const AValue: TDateTime): Word;

//월의 시작일부터 해당일자까지의 시간의 합을 리턴한다.
function HourOfTheMonth(const AValue: TDateTime): Word;

//월의 시작일부터 해당일자까지의 분의 합을 리턴한다.
function MinuteOfTheMonth(const AValue: TDateTime): Word;

//월의 시작일부터 해당일자까지의 초의 합을 리턴한다.
function SecondOfTheMonth(const AValue: TDateTime): LongWord;

//월의 시작일부터 해당일자까지의 밀리초의 합을 리턴한다.
function MilliSecondOfTheMonth(const AValue: TDateTime): LongWord;

//해당일의 요일을 리턴한다.
//1:월요일, 2:화요일, 3:수요일, 4:목요일 ,5:금요일 , 6:토요일 ,7:일요일
function DayOfTheWeek(const AValue: TDateTime): Word;

//AValue날짜의 주의 시작일부터 AValue날짜까지의 시간의 합을 계산한다.
function HourOfTheWeek(const AValue: TDateTime): Word;               

//AValue날짜의 주의 시작일부터 AValue날짜까지의 분의 합을 계산한다.
function MinuteOfTheWeek(const AValue: TDateTime): Word;             

//AValue날짜의 주의 시작일부터 AValue날짜까지의 초의 합을 계산한다.
function SecondOfTheWeek(const AValue: TDateTime): LongWord;         

//AValue날짜의 주의 시작일부터 AValue날짜까지의 밀리초의 합을 계산한다.
function MilliSecondOfTheWeek(const AValue: TDateTime): LongWord;    

//ex) HourOfTheDay(Time) : 24시간 단위로 Time까지의 시간의 합을 계산한다.
function HourOfTheDay(const AValue: TDateTime): Word;

//ex) MinuteOfTheDay(Time) : 24시간 단위로 Time까지의 분의 합을 계산한다.
function MinuteOfTheDay(const AValue: TDateTime): Word;

//ex) SecondOfTheDay(Time) : 24시간 단위로 Time까지의 초의 합을 계산한다.
function SecondOfTheDay(const AValue: TDateTime): LongWord;

//ex) MilliSecondOfTheDay(Time) : 24시간 단위로 Time까지의 밀리초의 합을 계산한다.
function MilliSecondOfTheDay(const AValue: TDateTime): LongWord;

//ex) MinuteOfTheHour(13:28:43:345) : 시간을 기준으로 분의 합을계산한다.
function MinuteOfTheHour(const AValue: TDateTime): Word;

//ex) SecondOfTheHour(13:28:43:345) : 시간을 기준으로 초의 합을계산한다.
function SecondOfTheHour(const AValue: TDateTime): Word;

//ex) MilliSecondOfTheHour(13:28:43:345) : 시간을 기준으로 밀리초의 합을계산한다.
function MilliSecondOfTheHour(const AValue: TDateTime): LongWord;

//ex) SecondOfTheMinute(13:28:43:345) : 분을 기준으로 초의 합을 계산한다.
function SecondOfTheMinute(const AValue: TDateTime): Word;

//ex) SecondOfTheMinute(13:28:43:345) : 초을 기준으로 밀리초의 합을 계산한다.
function MilliSecondOfTheMinute(const AValue: TDateTime): LongWord;
function MilliSecondOfTheSecond(const AValue: TDateTime): Word;

{ Range checking functions }

function WithinPastYears(const ANow, AThen: TDateTime;
 const AYears: Integer): Boolean;
function WithinPastMonths(const ANow, AThen: TDateTime;
 const AMonths: Integer): Boolean;
function WithinPastWeeks(const ANow, AThen: TDateTime;
 const AWeeks: Integer): Boolean;
function WithinPastDays(const ANow, AThen: TDateTime;
 const ADays: Integer): Boolean;
function WithinPastHours(const ANow, AThen: TDateTime;
 const AHours: Int64): Boolean;
function WithinPastMinutes(const ANow, AThen: TDateTime;
 const AMinutes: Int64): Boolean;
function WithinPastSeconds(const ANow, AThen: TDateTime;
 const ASeconds: Int64): Boolean;
function WithinPastMilliSeconds(const ANow, AThen: TDateTime;
 const AMilliSeconds: Int64): Boolean;

{ Range query functions }

//두날짜(시간) 사이에 년수를 리턴한다.
function YearsBetween(const ANow, AThen: TDateTime): Integer;

//두날짜(시간) 사이의 월수를 리턴한다.
function MonthsBetween(const ANow, AThen: TDateTime): Integer;

//두날짜(시간) 사이의 주수를 리턴한다.
function WeeksBetween(const ANow, AThen: TDateTime): Integer;

//두날짜(시간) 사이의 일수를 리턴한다.
function DaysBetween(const ANow, AThen: TDateTime): Integer;

//두날짜(시간) 사이의 시간을 리턴한다.
function HoursBetween(const ANow, AThen: TDateTime): Int64;

//두날자(시간) 사이의 분을 리턴한다.
function MinutesBetween(const ANow, AThen: TDateTime): Int64;

//두날짜(시간) 사이의 초를 리턴한다.
function SecondsBetween(const ANow, AThen: TDateTime): Int64;

//두날짜(시간) 사이의 밀리초를 리턴한다.
function MilliSecondsBetween(const ANow, AThen: TDateTime): Int64;


//두날짜(시간) 사이를  Double형으로 리턴한다.
function YearSpan(const ANow, AThen: TDateTime): Double;
function MonthSpan(const ANow, AThen: TDateTime): Double;
function WeekSpan(const ANow, AThen: TDateTime): Double;
function DaySpan(const ANow, AThen: TDateTime): Double;
function HourSpan(const ANow, AThen: TDateTime): Double;
function MinuteSpan(const ANow, AThen: TDateTime): Double;
function SecondSpan(const ANow, AThen: TDateTime): Double;
function MilliSecondSpan(const ANow, AThen: TDateTime): Double;


//AValue일자에서 ANumberOfYears만큼의 년도를 증가한다.
function IncYear(const AValue: TDateTime; const ANumberOfYears: Integer = 1): TDateTime;

//AValue일자에서 ANumberOfWeeks만큼의 주를 증가한다.
function IncWeek(const AValue: TDateTime; const ANumberOfWeeks: Integer = 1): TDateTime;

//AValue일자에서 ANumberOfDays만큼의 일를 증가한다.
function IncDay(const AValue: TDateTime;  const ANumberOfDays: Integer = 1): TDateTime;

//AValue일자(시간)에서 ANumberOfHours만큼의 시간를 증가한다.
function IncHour(const AValue: TDateTime; const ANumberOfHours: Int64 = 1): TDateTime;

//AValue일자(시간)에서 ANumberOfMinutes만큼의 분를 증가한다.
function IncMinute(const AValue: TDateTime; const ANumberOfMinutes: Int64 = 1): TDateTime;

//AValue일자(시간)에서 ANumberOfSeconds만큼의 초를 증가한다.
function IncSecond(const AValue: TDateTime; const ANumberOfSeconds: Int64 = 1): TDateTime;

//AValue일자(시간)에서 ANumberOfMilliSeconds만큼의 밀리초를 증가한다.
function IncMilliSecond(const AValue: TDateTime; const ANumberOfMilliSeconds: Int64 = 1): TDateTime;

//년,월,일,시,분,초,밀리초  ---> 날짜(시간)형으로 리턴한다.
function EncodeDateTime(const AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word): TDateTime;

//날짜(시간)형 ---> 년,월,일,시,분,초,밀리초 Word형으로 리턴한다.
procedure DecodeDateTime(const AValue: TDateTime; out AYear, AMonth, ADay,  AHour, AMinute, ASecond, AMilliSecond: Word);

//ex) EncodeDateWeek(2006,25,2) : 2006년 25주차의 첫번째 화요일의  날자를 리턴한다.
function EncodeDateWeek(const AYear, AWeekOfYear: Word; const ADayOfWeek: Word = 1): TDateTime;

//ex) DecodeDateWeek(Today) : 오늘은 몇년 몇째주의 무슨요일인지를 리턴한다.
procedure DecodeDateWeek(const AValue: TDateTime; out AYear, AWeekOfYear, ADayOfWeek: Word);

//AYear년의 ADayOfYear번째일이 며칠인지 리턴한다.
function EncodeDateDay(const AYear, ADayOfYear: Word): TDateTime;

//AValue일자가 몇년의 몇일째인지를 구한다.
procedure DecodeDateDay(const AValue: TDateTime; out AYear, ADayOfYear: Word);

//년,월,월의몇주차,화요일 의 날짜를 리턴한다.
function EncodeDateMonthWeek(const AYear, AMonth, AWeekOfMonth, ADayOfWeek: Word): TDateTime;

//AValue의 년,월,월의몇주차, 요일 구한다.
procedure DecodeDateMonthWeek(const AValue: TDateTime; out AYear, AMonth, AWeekOfMonth, ADayOfWeek: Word);

//년,월,일,시,분,초,밀리초의 유효성을 체크하고 날짜를 구한다.
function TryEncodeDateTime(const AYear, AMonth, ADay, AHour, AMinute, ASecond,  AMilliSecond: Word; out AValue: TDateTime): Boolean;

//AYear년의 AWeekOfYear주에 ADayOfWeek요일에 유효성을 체크하고 날짜를 리턴한다.
function TryEncodeDateWeek(const AYear, AWeekOfYear: Word;  out AValue: TDateTime; const ADayOfWeek: Word = 1): Boolean;

//AYear년의 ADayOfYear번째날에 유효성을 체크하고  날짜를 구한다.
function TryEncodeDateDay(const AYear, ADayOfYear: Word;  out AValue: TDateTime): Boolean;

//AYear(년) AMonth(월) AWeekOfMonth(월의주차)  ADayOfWeek(요일) 유효성을 체크하고 날짜를 구한다.
function TryEncodeDateMonthWeek(const AYear, AMonth, AWeekOfMonth,  ADayOfWeek: Word; var AValue: TDateTime): Boolean;


function RecodeYear(const AValue: TDateTime; const AYear: Word): TDateTime;
function RecodeMonth(const AValue: TDateTime; const AMonth: Word): TDateTime;
function RecodeDay(const AValue: TDateTime; const ADay: Word): TDateTime;
function RecodeHour(const AValue: TDateTime; const AHour: Word): TDateTime;
function RecodeMinute(const AValue: TDateTime; const AMinute: Word): TDateTime;
function RecodeSecond(const AValue: TDateTime; const ASecond: Word): TDateTime;
function RecodeMilliSecond(const AValue: TDateTime; const AMilliSecond: Word): TDateTime;
function RecodeDate(const AValue: TDateTime; const AYear, AMonth,  ADay: Word): TDateTime;
function RecodeTime(const AValue: TDateTime; const AHour, AMinute, ASecond,  AMilliSecond: Word): TDateTime;
function RecodeDateTime(const AValue: TDateTime; const AYear, AMonth, ADay,  AHour, AMinute, ASecond, AMilliSecond: Word): TDateTime;
function TryRecodeDateTime(const AValue: TDateTime; const AYear, AMonth, ADay,  AHour, AMinute, ASecond, AMilliSecond: Word; out AResult: TDateTime): Boolean;

//A.날짜(시간) B.날짜(시간) 을 비교한다. A=B(0) ,  A>B(1) ,  A<B(-1)
function CompareDateTime(const A, B: TDateTime): TValueRelationship;
function CompareDate(const A, B: TDateTime): TValueRelationship;
function CompareTime(const A, B: TDateTime): TValueRelationship;


//A.날짜(시간) B.날짜(시간) 을 비교한다
function SameDateTime(const A, B: TDateTime): Boolean;
function SameDate(const A, B: TDateTime): Boolean;
function SameTime(const A, B: TDateTime): Boolean;

//오늘이 이달의 몇번째주인지 리턴한다.
function NthDayOfWeek(const AValue: TDateTime): Word;

//AValue날이 몇년,몇월,월의몇번째주,무슨요일 인지를 구한다.
procedure DecodeDayOfWeekInMonth(const AValue: TDateTime; out AYear, AMonth, ANthDayOfWeek, ADayOfWeek: Word);

//AYear(년), AMonth(월), ANthDayOfWeek(월의몇번째주),  ADayOfWeek(요일) ----> 해당일자를 리턴한다.
function EncodeDayOfWeekInMonth(const AYear, AMonth, ANthDayOfWeek,  ADayOfWeek: Word): TDateTime;

//AYear(년), AMonth(월), ANthDayOfWeek(월의몇번째주),  ADayOfWeek(요일) 의 유효성을 체크하고 날짜를 구한다.
function TryEncodeDayOfWeekInMonth(const AYear, AMonth, ANthDayOfWeek,  ADayOfWeek: Word; out AValue: TDateTime): Boolean;


procedure InvalidDateTimeError(const AYear, AMonth, ADay, AHour, AMinute,  ASecond, AMilliSecond: Word; const ABaseDate: TDateTime = 0);
procedure InvalidDateWeekError(const AYear, AWeekOfYear, ADayOfWeek: Word);
procedure InvalidDateDayError(const AYear, ADayOfYear: Word);
procedure InvalidDateMonthWeekError(const AYear, AMonth, AWeekOfMonth,  ADayOfWeek: Word);
procedure InvalidDayOfWeekInMonthError(const AYear, AMonth, ANthDayOfWeek,  ADayOfWeek: Word);


//날짜를 Double형으로 리턴한다.
//0001년01월01일  --->  1721425 
function DateTimeToJulianDate(const AValue: TDateTime): Double;

//Double형을 날짜로 리턴한다.
//1721425 ---> 0001년01월01일
function JulianDateToDateTime(const AValue: Double): TDateTime;

//AValue의 유효성을 체크하고 날짜를 리턴한다.
function TryJulianDateToDateTime(const AValue: Double;  out ADateTime: TDateTime): Boolean;

//날짜를 Double형으로 리턴한다.
//0001년01월01일  --->  ( -678575  )
function DateTimeToModifiedJulianDate(const AValue: TDateTime): Double;

//Double형을 날짜로 리턴한다.
//( -678575  ) ---> 0001년01월01일
function ModifiedJulianDateToDateTime(const AValue: Double): TDateTime;

//AValue의 유효성을 체크하고 날짜를 리턴한다.
function TryModifiedJulianDateToDateTime(const AValue: Double;  out ADateTime: TDateTime): Boolean;


function DateTimeToUnix(const AValue: TDateTime): Int64;
function UnixToDateTime(const AValue: Int64): TDateTime; 




Posted by SB패밀리

PC와 노트북 윈도우 크기 변형 문제 해결하기


PC에서 개발한 윈도우 어플리케이션의 화면이 노트북에서는 이상하게 다르게 나오는 경우가 있다.



운이 나쁘게 이런 경우가 생기면 어떻게 해결해야할까?


각 visible window 의 가로, 세로 크기가 다르게 나오는 건 pixel per inch 때문이다.


그래서 이러한 문제에 관계없이 윈도우 크기가 유지되도록 개발하면 된다....


이러한 기능이 어디에 있을까?


델파이 IDE화면에서 Object Inspector를 찾아보자. 여기에서

Scaled property를 찾아서 그 값을 False 로 설정한다.


 



이제 노트북에서의 어떠한 해상도에서도 내가 만든 어플리케이션은 제대로 실행될 것이다.


Posted by SB패밀리

 TServerSocket, TClientSocket in Delphi 6의 VCL 컴포넌트 사용하기


델파이 7에서는 델파이 6 이전 버전에서 볼 수 있었던, TServerSocket과 TClientSocket이 보이질 않는다. 

볼랜드사에서 상위버전에서 사용할 수 있도록 해주거나 매니아 층에서 사용할 수 있도록 만들어 줬을 것이라고 굳게 믿고 

확인을 해보았다.

역시나 기대를 저버리지 않고 델파이 6에서 사용되었던 Socket 컴포넌트를 델파이 7에서도 사용할 수 있도록 해주었다.


소켓 컴포넌트는 델파이 7에서 완전히 제외된 컴포넌트는 아니다. 델파이 7의 BIN 디렉토리에 보면 다음과 같은 패키지 라이브러리 파일이 있는 것을 볼 수 있다.


dclSockets70.bpl


이것을 Component -> Install Packages를 클릭해 ADD 버튼을 누른 후 추가 해주면 다시 델파이 6에서 볼 수 있었던 TServerSocket과 TClientSocket을 볼 수 있다.

Posted by SB패밀리