본문 바로가기

Delphi Tip/+Tip55

폼에 그림자 넣기 폼에 그림자 넣기       델파이 힌트(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.
폼을 점점 투명하게 나타나게 하기 폼을 점점 투명하게 나타나게 하기 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.
델파이 줄바꿈 방법 델파이 줄바꿈 방법 showmessage('Line1'^M^J'Line2'^M^J'Line3'); showmessage('Line1'#13#10'Line2'#13#10'Line3'); 위 메시지 박스는 동일한 결과를 출력한다. 2024. 3. 25.
델파이에서 화면에 자석효과 주는 법 델파이에서 화면에 자석효과 주는 법 화면구석에 폼을 끌어다가 구석가까이가면 자석처럼 붙는효과를 주기 위한 방법이다. ScreenSnap SnapBuffer 폼의 속성중 위에 두가지 속성을 이용하면 가능하다. ScreenSnap : 자석효과를 사용할지 여부 결정 SnapBuffer : 픽셀 값을 지정 (화면의 가장자리와 몇 픽셀 거리에 가면 붙을 것) 이 효과는 '디스플레이 등록정보'의 '효과' 탭에서 ' 마우스를 끄는 동안 창 내용 표시'가 설정되어 있어야 된다. 이게 꺼져 있을 경우 (이동중에 폼의 위치가 선으로 표시되는 상태)에도 작동은 잘 합니다만, 바로바로 적용되지는 않고, 폼 드래그를 마친 뒤에 효과가 나타난다. 2024. 3. 18.
하위폼 종료 감지 하위폼 종료 감지 하위폼의 종료시 메인폼에서 정보 감지하는방법 하위폼의 종료시 메인폼에서 정보 감지하는방법(Notification) 컴포넌트인(폼)경우 자신이 owner로 생성한 컴포넌트의 참조카운팅하는 메카니즘을 가지고 있는것 같은데 뒤져보면 Notificaton, FreeNotification 있는데 Notification을 오버라이딩하여 사용했다 type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); //하위폼 생성버튼 //.하위폼은 OnClose이벤트에서 action:=cafree하며 자기소멸시키며나옴 procedure Notification(Acomponent:Tcomponent;operation:.. 2024. 3. 4.
폼 Border 없이 사이즈 변경 폼 Border 없이 사이즈 변경 폼이 Border 를 갖고 있지 않을 때 마우스가 경계에 오면 커서가 바뀌면서 ReSize 가 되게 하는 방법입니다. WM_NCHITTEST 를 가로채서 거기에서 마우스 좌표를 폼좌표계로 변환후 마우스 위치에 따라 메시지의 result 를 HTTOP, HTLEFT 등으로 바꿔주기만 하면 됩니다. 폼의 BorderStyle 를 bsNone 로 해서 경계를 없애준 뒤에 하면 됩니다. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton;.. 2024. 2. 1.
디버깅용 콘솔창 띄우기 디버깅용 콘솔창 띄우기 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); private { Private declarations } ConHwnd: THANDLE; public { Public declarations }.. 2024. 1. 12.
마우스커서가 폼(Form)안에 있는지 여부 마우스커서가 폼(Form)안에 있는지 여부 //API함수 이용 (핸들을 잡아 마우스가 사각형안에 있는지 체크) unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) procedure FormDeactivate(Sender: TObject); procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); private { Private declarations } public { Public declarations } end; var Form1: TForm1; .. 2024. 1. 8.
프로그램에서 DOS 명령어 처리 프로그램에서 DOS 명령어 처리 1. 콘솔창(DOS창) 창 안띄우기 2. 끝날때까지 기다리기(실행이 끝난것을 감지하기) 3. 출력되는 내용을 화일로 저장하기 procedure TForm1.Button1Click(Sender: TObject); var msg: string; begin // 1.Dos 명령 일괄처리 파일에서 명령어를 불러오고() if not RunDosCmd('cmd c:\out.txt', Msg, true) then ShowMessage(msg) else ShowMsg(Msg); // 2.현재 도스 명령어를 실행하고, 결과를 파일로 저장('C/\out.txt) if not RunDosCmd('Dir/w >c:\out.txt', Msg, true) then ShowMessage(msg) e.. 2023. 12. 29.
델파이 디버깅용 콘솔창 만들기 델파이 디버깅용 콘솔창 만들기 폼이 실행되면서 콘솔창을 한개 만든뒤, 폼위에 있는 마우스 좌표를 콘솔창에 실시간으로 출력하는 예이다 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); private { Private de.. 2023. 12. 11.
델파이 메세지다이어로그(MessageDialog) 원하는 키 받기 델파이 메세지다이어로그(MessageDialog) 원하는 키 받기 . . . private { Private declarations } protected public { Public declarations } Procedure HelpBoKeyPress(Sender : TObject; var Key : Char); end; var Form1: TForm1; LegalKeys : String; procedure TForm1.Button1Click(Sender: TObject); Var S : String; Begin LegalKeys := 'ABC123'; S := '원하는 항목을 선택하세요!'#13#13'' + ' A 키눌러라'#13'' + ' B.키눌러라'#13'' + ' C.키눌러라'#13'' + '.. 2023. 11. 30.
메인 메뉴에 팝업메뉴 달기 메인 메뉴에 팝업메뉴 달기 unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Menus; type TForm1 = class(TForm) MainMenu1: TMainMenu; PopupMenu1: TPopupMenu; N11: TMenuItem; N21: TMenuItem; N31: TMenuItem; N41: TMenuItem; N123121: TMenuItem; N122221: TMenuItem; N44441: TMenuItem; N33331: TMenuI.. 2023. 11. 28.
델파이 툴 메뉴 생성 (현재 프로젝트 경로 열기) 델파이 툴 메뉴 생성 델파이 메뉴 Tools -> Configure Tools 메뉴 클릭 ​ Add 버튼 클릭 ​ Tilte : 현재 프로젝트 경로 열기 Program : Explorer.exe Parameters : $PATH($EXENAME),/e OK 클릭​ 결과 메뉴가 생성된걸 알수있다. 클릭하면 해당 프로젝트 경로로 탐색기가 열린다 . ​ 소스코드 에디터에 활성화되어있는 파일(Unit)명은 $EDNAME 이다 (다른 에디터로 유닛을 열때 좋겠..) 파일명만 전달할려면 $NAMEONLY(파일명) 2023. 11. 22.
정해진 시간에 없어지는 MessageBox 정해진 시간에 없어지는 MessageBox 정해진 시간에 없어지는 MessageBox procedure MessageBoxTimerProc(hWnd: HWND; uMsg: UINT; idEvent: UINT; Time: DWORD); stdcall; ... procedure MessageBoxTimerProc(hWnd: HWND; uMsg: UINT; idEvent: UINT; Time: DWORD); begin PostQuitMessage(0); end; function TimedMessageBox(hwndParent: HWND; ptszMessage: LPCTSTR; ptszTitle: LPCTSTR; flags: UINT; dwTimeout: DWORD): Integer; var idTimer: U.. 2023. 11. 6.
Drag and Drop(끌어서 놓기) Drag and Drop Drag and Drop(끌어서 놓기) 사용자가 마우스로 객체를 선택하여 다른 위치로 끌어서 놓는 인터랙션 기술을 의미합니다. 이를 통해 사용자는 애플리케이션 내의 요소를 직접 이동하거나 복사할 수 있습니다. 드래깅의 시작 모든 컨트롤에는 사용자가 컴퍼넌트의 드래깅을 시작했을 때 그것의 응답을 처리하는 방법을 지정하는 DragMode 프로퍼티가 있다. 만약 DragMode가 dmAutomatic 이라면 컨트롤 위에 커서를 놓고 마우스 버튼을 누르면 자동으로 드래깅이 시작된다. DragMode를 dmAutomatic로 설정하면 하면 일반적인 마우스의 작동을 방해 할 수 있기 때문에 DragMode를 디폴트값인 dmManual로 처리하는 방법을 선호하는 사람들이 많다. dmManua.. 2023. 7. 26.
델파이 암호화 델파이 암호화 데이터의 암호화는 보안의 가장 기본적인 형태이다. 그 동안 보안은 어느 군사작 전에서나 이용되는 용어로 여겨진게 사실이지만, 갈수록 시스템이 외부에 노출되 는 (특히 인터넷등의 네트워크망에서) 상황에서 데이터의 적절한 암호화는 아주 중요한 사안이 되고 있다. 여러분이 주변에서 쉽게 구할 수 있는 암호화 알고리즘들이 있고, 그것은 완벽에 가깝다. 여러분이 사용하고 있는 ID의 암호 역시 그런 알고리즘에 기반을 두고 암호화된다. 하지만, 이런 것들은 암호화에만 치중한 것으로 해독기능이 없다. 즉, 암호화 된 데이터를 다시 원본 데이터로 추출해 내는 역변환은 불가능한 것이다. 시스템의 운영자도 해당 사용자 ID의 암호를 변환해 원본 암호를 뽑아내는 것이 불가능하다. 여러분이 ID를 입력했을 때,.. 2023. 7. 13.
가변 데이터의 저장 기법 가변 데이터의 저장 기법 ​ 혹시 이런 경우에 어떻게 하시나요? ​ 우선 스트링을 10개를 저장해야 합니다. 물론 하나의 파일에 말이죠. ​ 당연히 10개의 스트링의 길이는 가변이겠죠? ​ 자.. 어떻게 하면 가변의 스트링을 파일에 저장하고 고스란히 불러올수 있을까요? 또 한가지 조건을 덧붙인다면 스트링의 갯수의 제한을 두지 않는다면... ^^. ​ 어떻게든 방법이 있겠죠? ​ 어떤방법을 동원하든지 해결을 할수 있겠지만 새로운 방법을 소개합니다. 아주 손쉽게 가변길이의 데이터를 저장하고 불러올수 있는 방법입니다. ​ ​ 첫번째 방법 1 ​ 컴포넌트를 저장하고 불러오는 기능을 약간 변형하는 것입니다. ​ 즉 우리가 저장하려는 가변의 스트링을 컴포넌트의 프로퍼티로 놓게되면 컴포넌트를 저장할때 데이터도 함께 .. 2023. 7. 10.
컨트롤의 Enter 처리 컨트롤의 Enter 처리 DBEdit등의 Enter Key 이동은 간단하다. DBGrid의 칼럼을 제외한 모든 Focus를 가질 수 있는 컴퍼넌트는 OnKeyPress 이벤트에 다음과 같이 코드를 기입하여 간단히 처리할 수 있다. EnterKey처리를 원하는 컴퍼넌트의 OnKeyPress 이벤트를 한 프로시져로 통일한다. procedure TFMain.MostOfControlKeyPress(Sender: TObject; var Key: Char); begin if Key = #13 then begin Key := #0; if Sender = DBEdit1 then // 특별한 다른 처리를 원하는 Component begin // .... end else // 나머지는 아래서 처리 SelectNext( T.. 2023. 7. 4.
프로그램 종료 막기 프로그램 종료 막기 방법 1 form의 Event 중 OnCloseQuery라는 이벤트가 있습니다. 프로그램이 종료되기 전에 일어나는 이벤트입니다. ​ 이 이밴트 procedure를 보면 ​ FormCloseQuery(Sender: TObject; var CanClose : Boolean); 1. Edit1.Text가 "사과" 종료 하고 다른 것이면 종료를 못하게 하자 ​ procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin if Edit1.Text = '사과' then CanClose := FALSE else Canclose := FALSE; end; ​ 이런식으로 코딩을 하면 됩니다. ​ ​ 방법2​ 폼의 OnCl.. 2023. 6. 29.
메모 프린터 기타 방안 #1 uses Printers; procedure TForm1.Button1Click(Sender: TObject); var ScaleX, ScaleY: Integer; RR: TRect; begin with Printer do begin BeginDoc; // The StartDoc function starts a print job. try ScaleX := GetDeviceCaps(Handle, logPixelsX) div PixelsPerInch; ScaleY := GetDeviceCaps(Handle, logPixelsY) div PixelsPerInch; // Retrieves information about the Pixels per Inch of the Printer. RR := Rec.. 2022. 6. 29.