본문 바로가기

delphi447

퀀텀 그리드 컬럼 동적 생성 퀀텀 그리드 컬럼 동적 생성   procedure Form.CreateGridFields(const tvCaption, tvFieldName, tvProperties: string; tvMerging, tvalign: boolean; tvWidth: integer); begin  with tv.CreateColumn do  begin    Caption := tvCaption;    DataBinding.FieldName := tvFieldName;     HeaderAlignmentHorz := taCenter;     HeaderAlignmentVert := vaCenter;     Name := 'tv' + tvFieldName;     Options.CellMerging := tvMerging; .. 2024. 5. 3.
HEX 코드를 TColor 값으로 변환하여 반환 HEX 코드를 TColor 값으로 변환하여 반환     HexToTColor(), TColorToHex() HEX 코드를 TColor 값으로 변환하여 반환한다 function HexToTColor(RGBCode: String): TColor;varhex: Int64;Color: TColor;iRGBCode: STring;begintryiRGBCode := copy(RGBCode,5,2)+copy(RGBCode,3,2)+copy(RGBCode,1,2);hex := StrToInt64('$00'+iRGBCode);excepton Exception dobeginhex := $00000000;MessageDlg('올바르지 않은 색상값입니다.', mtError, [mbOK], 0);end;end;Color := .. 2024. 4. 29.
폼에 그림자 넣기 폼에 그림자 넣기       델파이 힌트(THintWindow)를 보니 그림자가 생기길래소스를 쫓아가다보니 윈도우클래스 스타일에 CS_DROPSHADOW 라는게 있는걸 알았습니다.그걸 폼에 적용해보니 되더군여.... unit Unit1; interface usesWindows, Messages, SysUtils, Classes, Graphics, Controls, Forms, StdCtrls; typeTForm1 = class(TForm)Button1: TButton;procedure Button1Click(Sender: TObject);privateprotectedprocedure CreateParams(var Params: TCreateParams); override;publicend; varForm.. 2024. 4. 25.
폼 배경에 비트맵 넣기 폼 배경에 비트맵 넣기 AnimateWindow() API함수는 폼에게 애니메이션 효과를 줄 수 있는 함수이다. 그런데, 폼에 TImage를 올려놓고 비트맵을 불러드린 다음에, 애니메이션 효과를 주면 비트맵이 보이지 않는다. 그래서 MSDN을 찾아보니, WM_PRINTCLIENT를 사용하라고 나온다. 소스참고 unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm2 = class(TForm) procedure FormShow(Sender: TObject); procedure FormCreate(Sender: TObject); procedure .. 2024. 4. 21.
폼을 점점 투명하게 나타나게 하기 폼을 점점 투명하게 나타나게 하기 procedure TForm1.Button1Click(Sender: TObject); var objFrm: TForm2; begin objFrm := TForm2.Create(self); AnimateWindow(objFrm.Handle, 500, AW_BLEND); objFrm.Show; end; 2024. 4. 19.
파워포인터 파일 다른이름으로 저장 파워포인터 파일 다른이름으로 저장 procedure Tfrm_Main.button_ppt_openClick(Sender: TObject); var msppt:variant; //PowerPoint Application 변수 mspps:variant; //PowerPoint Presentation 변수 mspps_slides_totalcount:integer; // PowerPoint Slides Total count 변수 begin msppt:=CreateOleObject('Powerpoint.Application'); msppt.visible:=true; msppt.WindowState:=ppWindowMinimized; mspps:=msppt.Presentations.open('c:\bbbb.ppt'.. 2024. 4. 16.
StringGrid Row색칠/정렬 하기 StringGrid Row색칠/정렬 하기 procedure Tfrm_xxx.Grid_ListDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var Ls_mt_kbn : String; LeftPos: Integer; TopPos : integer; CellStr: string; begin Ls_mt_kbn := Grid_List.Cells[16,ARow]; if (ACol >= Grid_List.FixedCols) and (ARow >= Grid_List.FixedRows) then with Grid_List.Canvas do begin if Ls_mt_kbn = 'M' then Brush.Color :=.. 2024. 4. 15.
델파이 코드구역(REGION) 사용방법 델파이 코드구역(REGION) 사용방법 {$REGION 'MyRegion'} procedure MyRegion1; begin end; procedure MyRegion2; begin end; {$ENDREGION} 2024. 4. 12.
상속(inheritance)과 연결(association) 상속(inheritance)과 연결(association) 객체지향에서 상속은 매우 막강한 개념이지만, 상속으로 모든 문제를 풀려하면 더 꼬이는 경우가 많이 발생한다. 상속의 가장 큰 단점은 클래스 관계를 복잡하게 만든다는 것이다. 여러 단계의 상속은, 이해하기도 힘들 뿐더러 수정도 쉽지 않다. 상속은 All or Nothing 개념이다. 이말인즉, 상속은 상위 클래스의 모든 기능을 하위 클래스로 전이 한다는 것이다. 이 때문에, 상위 클래스의 기능 중에서 어떤 기능을 제거하거나 추가하려면, 그 상위 클래스로 부터 상속받은 새로운 클래스를 만들고 그 기능을 override해야 한다는 문제점이 있다. 이 과정이 반복되면 쪼잔한 기능 때문에 수많은 클래스 계층 구조가 생기므로, 객체지향 고수들은 다른 방법을.. 2024. 4. 8.
메인폼과 Application 전역객체 메인폼과 Application 전역객체 델파이에서 메인폼은 일반폼과는 상당히 다르게 동작한다. 간혹 이를 잘못 이해해서 오류를 내는 경우가 있다. 지난번 예제에서 나도 이런 차이를 간과하여 실수를 저질렀는데, 사실 이런 에러는 VCL의 별별 기능을 파헤쳐서 응용하는 고수들일 수록 많이 부닥칠 수 있다. 그런 예를 들어보자. 다음은 첨부한 예제의 폼의 메인 폼 소스이다. // MainFm.pas 메인폼 소스 {중략} var MainFrm: TMainFrm; // 전역 폼 변수 implementation {$R *.dfm} uses SubFm; procedure TMainFrm.FormCreate(Sender: TObject); begin if assigned(Application.MainForm) then.. 2024. 4. 7.
델파이 추상화(abstraction) 델파이 추상화(abstraction) abstraction(추상화)라는 단어를 프로그래밍에 관한 책에서 한번쯤 들어봤을 것이다. 그런데, 대다수의 책이 이 단어의 의미를 매우 장황하고 어렵게 설명하기 때문에, 이해하기 어렵다. 추상화란 간단히 이야기하자면 다음과 같이 정의할 수 있다. 추상화(abstraction) "어떤 대상에 명칭(이름)을 부여하고, 그 대상의 성질을 파악하고 분류하려는 인간적 능력" 말이 어려운가? 달리 예를 들어 보자. "감정에는 아픔, 슬픔, 기쁨, 고통 등이 있다." 아픔, 슬픔, 기쁨, 고통은 실존하는 대상(물체)이 아니다. 그러나 우리 인간들은 이 실존하지 않는 애매한 개념에 이름을 붙이고 그것들을 분류하였다. 다시 말해서, 감정이란 대표 개념의 일부로서 아픔, 슬픔, 기쁨.. 2024. 3. 26.
델파이 줄바꿈 방법 델파이 줄바꿈 방법 showmessage('Line1'^M^J'Line2'^M^J'Line3'); showmessage('Line1'#13#10'Line2'#13#10'Line3'); 위 메시지 박스는 동일한 결과를 출력한다. 2024. 3. 25.
FindWindowEx로 찾지못하는 원도우 핸들구하기 FindWindowEx로 찾지못하는 원도우 핸들구하기 FindWindowEx함수로 찾지못하는 윈도우 핸들이 무지많다 아래함수는 제경험상으로는 95% 이상 핸들을 찾을수있다. function SubWindowFind( ParentWnd : HWND; FindClassName : string ): HWND; var ClassName : array[0..255] of char; FindWnd : HWND; begin Result := 0; if ParentWnd = 0 then Exit; FindWnd := GetWindow( ParentWnd, GW_CHILD ); while ( FindWnd 0 ) do begin if Boolean( GetClassName( FindWnd, ClassName, 255) .. 2024. 3. 23.
델파이에서 화면에 자석효과 주는 법 델파이에서 화면에 자석효과 주는 법 화면구석에 폼을 끌어다가 구석가까이가면 자석처럼 붙는효과를 주기 위한 방법이다. ScreenSnap SnapBuffer 폼의 속성중 위에 두가지 속성을 이용하면 가능하다. ScreenSnap : 자석효과를 사용할지 여부 결정 SnapBuffer : 픽셀 값을 지정 (화면의 가장자리와 몇 픽셀 거리에 가면 붙을 것) 이 효과는 '디스플레이 등록정보'의 '효과' 탭에서 ' 마우스를 끄는 동안 창 내용 표시'가 설정되어 있어야 된다. 이게 꺼져 있을 경우 (이동중에 폼의 위치가 선으로 표시되는 상태)에도 작동은 잘 합니다만, 바로바로 적용되지는 않고, 폼 드래그를 마친 뒤에 효과가 나타난다. 2024. 3. 18.
CPU 종류 알아오기 CPU 종류 알아오기 레지스트리를 이용한 CPU 종류 알아오기 입니다. function GetCPUType: String; var Registry: TRegistry; begin Registry:=TRegistry.Create; try Registry.RootKey:=HKEY_LOCAL_MACHINE; Registry.OpenKey('HARDWARE\DESCRIPTION\System\CentralProcessor\0',False); if Registry.ValueExists('ProcessorNameString') then Result := Registry.ReadString('ProcessorNameString') else Result := Registry.ReadString('Identifier');.. 2024. 3. 15.
디렉토리 삭제 및 하위 디렉토리 파일 삭제 디렉토리 삭제 및 하위 디렉토리 파일 삭제 uses ShellAPI; /---------------------------------------------------------------- // 디렉토리 및 파일을 지운다. // 하위 디렉토리와 모든 파일도 함께 지워진다. // 인자 설명 // - DirName : 지울 디렉토리명 // - UseRecycleBin : 휴지통을 사용할 것인가 여부 (아니면 영구삭제) // 리턴값 설명 // - 성공 여부 //---------------------------------------------------------------- function MinDeleteFile(const DirName : string; const UseRecycleBin: Boolean):.. 2024. 3. 12.
실행파일 종료시 실행파일 삭제 실행파일 종료시 실행파일 삭제 procedure DeleteMe; var BatchFile:TextFile; BatchFileName:String; ProcessInfo:TProcessInformation; StartUpInfo:TStartupInfo; begin BatchFileName:=ExtractFilePath(application.exename)+'$$336699.bat'; AssignFile(BatchFile, BatchFileName); Rewrite(BatchFile); Writeln(BatchFile, ':try'); Writeln(BatchFile, 'del "' + application.exename + '"'); Writeln(BatchFile, 'if exist "' + appli.. 2024. 3. 11.
숫자에 콤마 찍어주기 숫자에 콤마 찍어주기 { ******************************************************************************** ** ** ** 숫자에 화폐단위 000,000,000~ 처럼 3단위로 콤마를 삽입시켜 준다. ** ** 999,999,999,999,999 단위 까지 가능함. 999조 ** ** ** ******************************************************************************** } Function Comma(I : Double) : String; var StrTmp : String; Cunt, J1, J2, K, L : Integer; Begin Cunt := 0; L := 3; StrT.. 2024. 3. 9.
프로그램에 사용 DLL 목록 가져오기 프로그램에 사용 DLL 목록 가져오기 uses TlHelp32; {$R *.dfm} procedure EnumModules(Strings: TStrings); var Snapshot: THandle; ModuleEntry: TModuleEntry32; NextModule: BOOL; begin Snapshot := CreateToolhelp32Snapshot( TH32CS_SNAPALL, GetCurrentProcessID ); ModuleEntry.dwSize := SizeOf( TModuleEntry32 ); NextModule := Module32First( Snapshot, ModuleEntry ); while NextModule do {델마당만세} begin Strings.Add( ModuleE.. 2024. 3. 6.
윈도우에 폰트 설치/제거 하기 윈도우에 폰트 설치/제거 하기 // 폰트 설치 AddFontResource(PChar('XXXFont.TTF')); SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0); // 폰트 제거 RemoveFontResource(PChar('XXXFont.TTF')); SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0); 2024. 3. 5.