반응형

Programming/Delphi 91

[Delphi] 아이콘 캐시 초기화

이 내용은 Delphi 에만 국한되는 내용은 아니지만, Delphi 를 하다가 나온 문제를 해결하다가 발견한 내용이기에 해당 카테고리에 포스팅을 합니다. 프로그램을 개발할 때, 처음부터 실행 아이콘을 변경해서 해도 되지만 이는 우선순위가 중요한 것은 아니기에 보통은 프로그램이 완료되고 마무리할때즈음해서 이쁜 아이콘을 구해서 설정하곤 합니다. 이렇게 설정한 아이콘은 작업표시줄, 폼 좌측 상단 등등 잘 표시가 되지만!! 희안하게도 탐색기에서 파일 아이콘은 계속 기존의 기본 아이콘이 표시가 되었습니다. 이리저리 찾아봤더니 확장자별 아이콘을 레지스트리에 등록하고 그렇게 캐시된 아이콘을 표시하기에 아무리 아이콘을 변경하고 별짓거리를 다 해봐도 파일 아이콘은 변경이 되지 않았는데 아래와 같은 명령어 한 줄로 해결을..

Programming/Delphi 2022.05.24

[Delphi] 듀얼모니터일 때 주모니터에 폼 띄우기

듀얼모니터를 사용하면서 폼을 실행할 때 보조모니터에 띄울까~? 메인모니터에 띄울까~? 고민될 때 있지 않으셨습니까? 저의 경우에는 전체 스크린(메인모니터 + 보조모니터)의 크기를 구한 다음 계산해서 메인모니터 또는 보조모니터 등 원하는 모니터에 폼을 띄울 수 있었습니다. 우선, Delphi 에서는 Screen 이라는 강력한 클래스를 제공합니다. Screen.MonitorCount 위의 객체를 통해서 모니터의 갯수를 알 수 있습니다. procedure TfrmMain.scButton1Click(Sender: TObject); var i : Integer; begin Log('monitor count : ' + IntToStr(Screen.MonitorCount)); Log(Format('[Desktop] ..

Programming/Delphi 2022.05.24

델파이 스킨 적용

Delphi XE 버전 이후(?) 부터는 스킨을 적용해주는 기능이 포함되어 있습니다. 기본적인 스킨도 30여개정도 있으며 자신이 만든 스킨 또는 다른 사람이 만든 스킨을 추가하여 적용할 수 있습니다.이전에는 프로그램을 만들면 이쁘고 깔끔하게 보이기 위해서 스킨 컴포넌트를 사용한다던가 했었는데 이제는 그럴 필요가 없어졌습니다. 뭐 물론 기본적으로 제공해주는 스킨만 사용해도 충분하지만 2% 부족할 때가 있지요~ Delphi Custom Style File Path// 제 컴퓨터의 경로 C:\Users\Public\Documents\Embarcadero\Studio\17.0\Styles 참고http://docwiki.embarcadero.com/RADStudio/Seattle/en/Application_App..

Programming/Delphi 2016.03.03

Delphi Remove PageControl Border 델파이 페이지컨트롤 테두리 없애기

델파이에서 PageControl을 사용하다가 보면 Tab의 Visible 속성을 False로 해놓을 경우에 테두리가 존재해서 신경이 많이 쓰였습니다. 그렇다고 PageControl이나 TabSheet의 속성에 Border을 None로 처리하는 Propery 같은 것이 없었고, 따로 처리할려니 영 찝찝하고.. (결국에는 따로 처리하긴 했습니다. ㅠ_ㅠ) 이렇게 말씀드려도 비개발자분이시거나 저 테두리를 지금 처음(?)보셨다는 개발자분들은.. 이게 뭐 대수냐고 하실지 모르겠지만 은근히 거슬립니다. Client 내부의 Width, Height 도 8 픽셀정도씩 차이가 나기 때문에 이미지 등이나 Width, Height 가 고정된 프로그램에서는 확실히 영향이 있습니다. 위의 화면에 PageControl의 테두리 ..

Programming/Delphi 2016.01.20

<펌> Hook 에 대한 또 다는 설명

후킹에 대해서 괜찮은 설명글이 있어서 퍼왔습니다. 참고되시길 바랍니다. Hooking?Hooking는 처리될 윈도우 메시지를 도중에 가로채는 것을 의미한다. 윈도우 메시지는 처리과정에서 어떤 식으로든 시스템의 도움을 받아야 한다. 윈도우 시스템에서 메시지를 전달하기 전에 가로채 재처리를 할 수 있는 기회가 있는데 이것이 Hooking이다. 사실 Hooking은 가로챈 메시지를 처리하기 위한 Hook Procedure를 설치함으로써 간단하게 사용할 수 있지만 시스템이나 프로세스에 많은 부하를 줄 뿐만 아니라 시스템에 심대한 영향을 줄 수도 있는 위험한 기능이다. 그래서 윈도우에 대해 전반적인 이해가 필요하다. Hooking의 종류 Hooking은 Hooking할 대상의 범위와 메시지의 종류에 따라 나눠 볼..

Programming/Delphi 2015.12.02

[Delphi] WMI(Windows Management Instrumentation) 사용하기에 앞서

예전에 WMI(Windows Management Instrumentation)를 사용해서 실무프로젝트를 진행했던 일이 있습니다. 대략 2~3년전에 했던 것으로 기억을 하는데 당시만해도 WMI를 다루는데는 문제가 없을거라 느껴졌다가 근래에 와서 다시 WMI를 사용할 일이 있어서 보는데 예전에 했던것이 아무것도 기억이 안나네요. 대략적으로라도 정리만 해놨더라면 다시 처음부터 알아보는 일이 없었을텐데.. 프로그래머에게 있어서 자신이 했던 기술에 대해서는 꼭 문서로 남겨서 나중에 필요할 때 꺼내서 볼 수 있는 메모의 스킬은 꼭 필요한 것 같습니다. WMI(Windows Management Instrumentation) 개요WMI(Windows Management Instrumentation)는 엔터프라이즈 네트..

Programming/Delphi 2015.01.28

[다이나믹스킨] 자식폼을 최소화할 때 태스크바로 내리기

Version 11.60 자식폼을 최소화 했을 경우에 태스크바로 내려가지 않고 좌측 하단으로 내려간다 -_-; 외국에서는 저렇게 사용하는지, 아니면 MDI 환경을 고려한 것인지는 몰라도.. 나는 여간 신경쓰이고 못마땅하다 ㅋㅋㅋㅋㅋ 소스 붙잡고 엎어치기 몇 번 한 결과.. TspDynamicSkinForm 컴포넌트의 MinimizeDefault 를 True로 바꿔주면 된다. 기본적으로 컴포넌트가 생성이 될 때 False 로 셋팅을 하기 때문에 좌측 하단으로 내려가게 된다. 자.. 이제 Form의 Create의 부분에서 TspDynamicSkinForm 컴포넌트의 MinimizeDefault 속성을 True로 바꿔보자. 아차! TspDynamicSkinForm 컴포넌트를 사용해서 창을 띄웠을 경우 자식폼은..

Programming/Delphi 2011.07.06

[다이나믹스킨] 메인창이 뒤로 갔을 경우 잔상이 남을 때

Version 11.60 TspDynamicSkinForm 컴포넌트를 사용해서 다중폼을 만들었을 경우에, 메인폼이 프로그램에서 생성한 다른 폼 뒤로 갈 경우 아래와 같은 잔상(?)이 생긴다. 아.. 정말 짜증난다. 워낙 영어랑 친하지도 않아서 제작사에 메일을 보내서 알아볼 수도 없고... 어떻게 어떻게 소스타고 들어가서 확인해 본 결과.. 프로젝트 소스에서 Application.MainFormOnTaskbar 를 False 로 바꿔주거나 주석처리(기본값이 False) 해주면 된다. program Project1; uses Forms, Unit1 in 'Unit1.pas' {Form1}, Unit2 in 'Unit2.pas' {Form2}; {$R *.res} begin Application.Initial..

Programming/Delphi 2011.07.06

폼이 없는 unit 에서 초기화방법

프로그래밍을 하다보면 자주 사용하는 함수나 폼이 없는 unit를 생성해서 초기화를 해야 할 경우가 있다. unit에 프로시저나 함수를 한 개 만들어서 초기화 하는 경우도 있겠지만.. 나 같은 경우 아래와 같이 사용한다. unit Unit1; interface uses Classes; var TestStringList : TStringList; implementation initialization TestStringList := TStringList.Create; finalization FreeAndNil(TestStringList); end. 맨 아래 initialization 에서 초기화를 하고, finalization 에서 메모리를 반납한다. 참 쉽죠잉~?

Programming/Delphi 2011.07.05

현재 사용중인 익스플로러 버전 확인하기

현재 사용중인 익스플로러 버전을 확인하는 함수이다. 레지스트리를 사용하기 때문에 비스타 혹은 윈도우7에서 사용할 경우에는 UAC 권한을 상승시켜서 봐야한다. 또 소스를 보면 알겠지만 Major 버전만 가져오는것이지만, 필요에 따라 바꿔서 쓰자. function ExplorerVerCheck : Integer; var Reg : TRegistry; Buffer : String; begin Reg := TRegistry.Create; try Reg.RootKey := HKEY_LOCAL_MACHINE; Reg.OpenKey('SOFTWARE\Microsoft\Internet Explorer', False); Buffer := Copy(Reg.ReadString('Version'), 1, 1); Result ..

Programming/Delphi 2011.07.05

유효한 파일명인지 체크

파일명에는 들어가서는 안 될 문자가 몇 개 있다. 1. \ 2. / 3. : 4. * 5. ? 6. " 7. 9. | 물론 탐색기같은 곳에서 저런 문자를 쓰면 친절하게 알려주지면, 소스내에서 코딩을 할 때 무심코 저런 문자를 쓰거나, 날짜 형식(14:32) 같은 것을 파일명에 포함해버리면 에러가 난다. 예외처리를 잘 해두면 원인을 파악하는데 빠르지만, 그렇지 않을 경우에는 헤메는 경우가 있.. (나만 그랬나? -_-;) 아래와 같은 함수로 파일명을 체크한 후에 안전하게 저장을 하면 끗~ function FileNameValidCheck(const FileName: String) : Boolean; var i : Integer; begin Result := True; i := GetFileAt..

Programming/Delphi 2011.07.05

파일을 폼으로 Drag&Drop 하기

탐색기 같은 곳에서 파일을 Drag&Drop 하여 폼에 올리고 싶은 경우에는 아래와 같이 하면 된다. // uses 절에 ShellAPI 를 추가하고, FormCreate 같은 곳에 아래와 같은 코드를 추가한다. DragAcceptFiles(Handle, True); // 그리고 적당한 곳에 파일이 Drag&Drop 되었을 때 받을 이벤트를 추가한다. procedure WMDropFiles(var Msg: TMessage); message WM_DROPFILES; 위와 같은 작업이 반드시 선행되어져야 한다. procedure TForm1.WMDropFiles(var Msg: TMessage); var DropCnt : Integer; hDropFile : THandle; FileName : array[0..

Programming/Delphi 2011.07.05
반응형