목적
start-job { Set-ExecutionPolicy Unrestricted } -RunAs32 | wait-job | Receive-Job
사용
'$1234' =>4660 당연하겠죠...
'0x1234' =>4660 C언어 스타일도 16진수로 인식합니다.
'x1234' =>4660 이것 마저도 16진수로 인식하다니... 이건 좀 ....
2012/05/04 - [PROG.] - IOTAProjectOptions 의 Value 항목들http://delphiaddinfortortoisesvn.tigris.org
2013-07-30 Tortoise SVN 1.8.1 업데이트 후 변경된 unit을 추가합니다.
그냥 Import Type Library 하면 되는데 참고삼아 올립니다. (syntax highlighter 테스트 겸...)
unit LibSubWCRev; interface uses Windows, ActiveX, Classes, Graphics, OleServer, StdVCL, Variants; type ISubWCRev = interface(IDispatch) ['{2F5EA5B0-4DE7-4F96-8E6B-FC0C37D9C0D6}'] procedure GetWCInfo(const wcPath: WideString; folders: WordBool; externals: WordBool); safecall; procedure GetWCInfo2(const wcPath: WideString; folders: WordBool; externals: WordBool; externalsNoMixed: WordBool); safecall; function Get_Revision: OleVariant; safecall; function Get_MinRev: OleVariant; safecall; function Get_MaxRev: OleVariant; safecall; function Get_Date: OleVariant; safecall; function Get_Url: OleVariant; safecall; function Get_Author: OleVariant; safecall; function Get_HasModifications: WordBool; safecall; function Get_HasUnversioned: WordBool; safecall; function Get_HasMixedRevisions: WordBool; safecall; function Get_HaveExternalsAllFixedRevision: WordBool; safecall; function Get_IsWcTagged: WordBool; safecall; function Get_IsSvnItem: WordBool; safecall; function Get_NeedsLocking: WordBool; safecall; function Get_IsLocked: WordBool; safecall; function Get_LockCreationDate: OleVariant; safecall; function Get_LockOwner: OleVariant; safecall; function Get_LockComment: OleVariant; safecall; property Revision: OleVariant read Get_Revision; property MinRev: OleVariant read Get_MinRev; property MaxRev: OleVariant read Get_MaxRev; property Date: OleVariant read Get_Date; property Url: OleVariant read Get_Url; property Author: OleVariant read Get_Author; property HasModifications: WordBool read Get_HasModifications; property HasUnversioned: WordBool read Get_HasUnversioned; property HasMixedRevisions: WordBool read Get_HasMixedRevisions; property HaveExternalsAllFixedRevision: WordBool read Get_HaveExternalsAllFixedRevision; property IsWcTagged: WordBool read Get_IsWcTagged; property IsSvnItem: WordBool read Get_IsSvnItem; property NeedsLocking: WordBool read Get_NeedsLocking; property IsLocked: WordBool read Get_IsLocked; property LockCreationDate: OleVariant read Get_LockCreationDate; property LockOwner: OleVariant read Get_LockOwner; property LockComment: OleVariant read Get_LockComment; end; CoSubWCRev = class class function Create: ISubWCRev; class function CreateRemote(const MachineName: string): ISubWCRev; end; const CLASS_SubWCRev: TGUID = '{F26E2640-0CFF-43DC-8325-575A3261D885}'; implementation uses ComObj; class function CoSubWCRev.Create: ISubWCRev; begin Result := CreateComObject(CLASS_SubWCRev) as ISubWCRev; end; class function CoSubWCRev.CreateRemote(const MachineName: string): ISubWCRev; begin Result := CreateRemoteComObject(MachineName, CLASS_SubWCRev) as ISubWCRev; end; end.
procedure JnDrawBlurredText( BMP: TBitmap32; const Str: String; const X, Y: Integer; const ABlurrColor, ATextColor: TColor32; const ARadius: Integer = 1; const ARepeat: Integer = 3); var i: Integer; BmpTxt: TBitmap32; szTxt: TSize; begin BmpTxt := TBitmap32.Create; try BmpTxt.Font.Assign(BMP.Font); szTxt := BmpTxt.TextExtent(Str); BmpTxt.SetSize(szTxt.cx + ARadius * 2, szTxt.cy + ARadius * 2); BmpTxt.Clear(ABlurrColor and $00FFFFFF); BmpTxt.RenderText(ARadius, ARadius, Str, 0, ABlurrColor); with TStackBlur.Create(ARadius) do try for i := 1 to ARepeat do Execute(BmpTxt); finally Free; end; BmpTxt.RenderText(X, Y, Str, 0, ATextColor); BmpTxt.DrawMode := dmBlend; BmpTxt.DrawTo(BMP, X - ARadius, Y - ARadius); finally BmpTxt.Free; end; end;
procedure JnFloodFill1(BMP: TBitmap32; const X, Y: Integer; const AColor: TColor32); var C: TColor32; begin C := BMP.Pixel[X,Y]; BMP.Pixel[X,Y] := AColor; if BMP.Pixel[X - 1, Y] = C then JnFloodFill1(BMP, X - 1, Y, AColor); if BMP.Pixel[X + 1, Y] = C then JnFloodFill1(BMP, X + 1, Y, AColor); if BMP.Pixel[X, Y - 1] = C then JnFloodFill1(BMP, X, Y - 1, AColor); if BMP.Pixel[X, Y + 1] = C then JnFloodFill1(BMP, X, Y + 1, AColor); end;가장 간단하게 생각할 수 있는 코드 입니다. 4방향을 탐색하면서 재귀호출을 합니다.
procedure JnFloodFill2(BMP: TBitmap32; const X, Y: Integer; const AColor: TColor32); var C: TColor32; Stack: TStack; procedure Sub_Push(const APxPos: Integer); begin BMP.Bits[APxPos] := AColor; Stack.Push(Pointer(APxPos)); end; procedure Sub_Check; var nPos, N: Integer; begin nPos := DWORD(Stack.Pop); N := nPos - 1; if BMP.Bits[N] = C then Sub_Push(N); N := nPos + 1; if BMP.Bits[N] = C then Sub_Push(N); N := nPos - BMP.Width; if BMP.Bits[N] = C then Sub_Push(N); N := nPos + BMP.Width; if BMP.Bits[N] = C then Sub_Push(N); end; begin Stack := TStack.Create; try C := BMP.Pixel[X, Y]; Sub_Push(X + Y * BMP.Width); while Stack.Count > 0 do Sub_Check; finally Stack.Free; end; end;
procedure JnFloodFill3(BMP: TBitmap32; const X, Y: Integer; const AColor: TColor32); var C: TColor32; Stack: PIntegerArray; Index: Integer; procedure Sub_Push(const APxPos: Integer); begin BMP.Bits[APxPos] := AColor; Inc(Index); Stack[Index] := APxPos; end; procedure Sub_Check; var nPos, N: Integer; begin nPos := Stack[Index]; Dec(Index); N := nPos - 1; if BMP.Bits[N] = C then Sub_Push(N); N := nPos + 1; if BMP.Bits[N] = C then Sub_Push(N); N := nPos - BMP.Width; if BMP.Bits[N] = C then Sub_Push(N); N := nPos + BMP.Width; if BMP.Bits[N] = C then Sub_Push(N); end; begin Index := -1; C := BMP.Pixel[X, Y]; GetMem(Stack, BMP.Width * BMP.Height); try Sub_Push(X + Y * BMP.Width); while Index > -1 do Sub_Check; finally FreeMem(Stack); end; end
procedure JnGradientFillHor(BMP: TBitmap32; const R: TRect; const B, C1, C2: TColor32); var TriVertex: array[0..1] of TTriVertex; GradRect: array[0..1] of TGradientRect; i: Integer; P: PColor32; begin GradRect[0].UpperLeft := 0; GradRect[0].LowerRight := 1; GradRect[1].UpperLeft := 1; GradRect[1].LowerRight := 2; TriVertex[0].Red := (C1 and $00FF0000) shr 8; TriVertex[0].Green := (C1 and $0000FF00); TriVertex[0].Blue := (C1 and $000000FF) shl 8; TriVertex[1].Red := (C2 and $00FF0000) shr 8; TriVertex[1].Green := (C2 and $0000FF00); TriVertex[1].Blue := (C2 and $000000FF) shl 8; TriVertex[0].x := R.Left; TriVertex[0].y := R.Top; TriVertex[1].x := R.Right; TriVertex[1].y := R.Bottom; GradientFill(BMP.Canvas.Handle, @TriVertex[0], 2, @GradRect[0], 1, GRADIENT_FILL_RECT_H); P := @BMP.Bits[0]; for i := 0 to BMP.Width * BMP.Height - 1 do begin P^ := P^ or $FF000000; Inc(P); end; BMP.FrameRectS(R, B); end;
방법
Using_the_Remote_Debugger_with_Delphi_2007_and_Delphi_2009
위의 링크에서 매우 친절하게 스샷에 박스 그려서 설명해 주고 있다. (영어 몰라도 한눈에 알수 있음)
원래 있는 문제점
델파이 2007이 원격 디버깅에 문제가 좀 있다. 디버깅 하다 보면 IDE가 자주 죽어버린다.
원격 디버깅 대상 프로그램도 함께 사라져버리기도 한다 -_-;
새로 발견한 문제점?
그동안 버그를 피해가며 잘 써온 원격 디버거인데... 새로 제작하는 장비의 PC에서 오류가 발생했다.
Exception Processing Message c0000013 Parameters 764cbf7c 4 764cbf7c 764cbf7c
무시하고 써도 되긴 하는데... 원격 PC에 뜨는 메세지창을 클릭해대는 것이 여간 귀찮은게 아니다. 당연하겠지만 IDE 오류도 더 빈번히 발생하다.
처음에는 델파이에 제공되는 리모트 디버거에 문제가 있나 생각에 여기저기 뒤져봤으나 소득이 없었다.
그런데 저 오류 메세지로 검색해보니 엄청난 양의 검색 결과가 나온다.
바이러스, 악성코드에서부터 하드웨어 혹은 윈도우의 설치상의 문제 등등 원인도 다양하다...
사실 바이러스일거라고는 생각조차도 못했는데...
아마도 특정 바이러스 혹은 악성 코드가 넷트웍을 사용하면서 특정 상황에서 저런 오류를 발생시키는가 보다.
바이러스/악성코드야 지워버리면 그만이지만 난 디버깅을 해야만하니까... 별 도움이 안되는 정보다.
내 개인 데스크탑도 같은 오류가 발생했는데... 혹시나 하는 생각에 바이러스 검사를 해봤다...
시간이 너무 오래 걸린다 5% 되자 취소.
다음은 하드웨어 관련(드라이버 설치 및 알수 없는 윈도우 시스템 파일등등) 문제를 확인해보려는데...
윈도우를 다시 깔기는 싫다 - 보통 한번 윈도우를 깔면 피씨가 안켜질때까지 써야 한다고 본다. -
결국 하드웨어 목록에서 안쓰는 걸 [사용안함]으로 체크하기로 결정 (http://pc.ahnlab.com/bluebelt_pcdic/pcdic_view.do?BBS_SEQ=274318 가뭄의 단비와 같은 글이다 ㅜㅜ)
내 데스크탑도 장비 PC와 같은 증상이라 일단 이걸로 테스트하기로 결정하고
장치관리자에서 필요없는 플로피 디스크 드라이버를 찾아 [사용안함]으로 체크...
그러니까 잘된다... 이게 도대체 뭔일인지 -_-;
바로 달려가 장비 PC에서 플로피 디스크 드라이버를 [사용안함]으로 체크...
역시 잘된다... 이런 허무한...
그런데 이건 고객이 플로피 디스크를 달아달라고 했기 때문에 장치를 없애 버리면 안된다.
장치관리자 목록을 보는데 뺼게 아무것도 없다. 장비 PC라보니 PCI 슬롯 가득, LPT, 추가적인 포트, USB 몽땅에 1394 까지 사용한다. 도대체 뺼수 있는게 없다.
결국 다시 운영체제를 설치해야만 하는가 그래도 안되면 디버깅할때만 플로프 디스크를 잠가둘까.... 하고 체념할 뻔 했는데...
장치관리자에 모니터가 2개가 보인다... 음 이거 뭐지... 하나 제거... 다시 테스트해보니 OK
결국 해결... 프로그래머 다운 해결법도 아니고 정확안 원인 파악은 안됐지만...
리모트 디버거를 리버스 엔지니어링해서 원인을 규명하고픈 생각은 들지 않는다.
결론
XP 기준으로 내컴퓨터 - 하드웨어 - 장치관리자에서 쓰지 않는 장치는 모두 사용안함으로 체크.
델파이 2007 기준입니다.
델파이 7 버전도 되는걸로 알고 있슴.
Application.OnModalBegin
Application.OnModalEnd 를 사용합니다.
OnModalBegin 에서 반투명 폼으로 스크린을 덮어 버리고, OnModalEnd 에서 폼을 닫는 거죠.
예전에... 휴대폰 대화박스가 뜰때 이런식이라 구현해 본 건에 알고보니 이미 이런 팁은 많이 나왔더군요. -_-;
정보가 흘러 넘처서 주체하지도 못할 지경의 세상이니 이런 소박한 꼼수들이야 뭐...
Dim Out the Main Form of an Application When Modal Form is Displayed
Modal폼을 띄울때 Disable되는 폼을 Gray톤으로 ...
소스 + 실행파일 포함입니다.
어차피 DLL 인 라이브러리라 델파이에 못 붙일 것도 없죠
델파이용 DLL 헤더 만드는 일은 늘상있는 일이기도 하고요
그렇지만 전체 헤더를 몽땅 변환하는 건 정말 고되고도 재미 없는 작업입니다.
그래서 보통은 그때 그때 필요한 함수와 타입만을 끄집어 냅니다.
계속 같은 작업을 하다 보면 저절로 분량도 많아지고
같은 작업을 안하다보면 별로 쓸일이 없는 거니 굳이 전체 헤더 변환을 할필요가 없겠죠
(물론 시간만 된다면야 못할것도 없지만...)
아무튼 이번에도 그런식으로....
OpenCV 를 이용한 템플릿 매칭(Template Matching) + 소스 포함 이곳의 소스를 테스트 삼아 델파이로 컨버전 했습니다.
Source / exe / dll 포함
OpenCVDelpphi_Ex.7z
굳이 델파이로 헤더까지 만들어 쓸 필요가 있을까.... 싶을지도 모르겠지만
위 샘플 이외에도 몇가지 더 돌려봤습니다.
그것들을 클래스로 단순화 / 캡슐화도 해봤고요.
꽤 쓸만합니다.
여가 시간이 많아진다면 계속 해보고 싶네요.
현업 때문에 쉽지는 않겠지만 가급적이면 OpenCV 의 사용을 줄이고 직접 알고리즘을 작성해 봤으면.... 하는데 ...
2015-11-24 내용추가
케케묵은 내용이지만 어쩌다가 구글링으로 여기까지 들어온 분들에게 민폐가 되지 않도록 내용 추가합니다.
델파이로 헤더를 만드는 건 아주 비효율적인 방법입니다.
OpenCV는 현재까지 매우 빠른 발전을 보이고 있고, 앞으로도 그럴것이라 예상 되는바
그때마다 헤더 고치는 노가다를 하느니 C++ 을 사용하는 것이 훨씬 낫습니다.
델파이와 연동할 땐
C++로 DLL 제작 (virtual class 사용) Delphi에서 사용합니다. (graphics32는 여전히 쓸만합니다)
OpenCV (Open Source Computer Vision library) 를 구경하는 중....
소스만 보기 갑갑해서 델파이로 헤더 변환 노가다 해가며 테스트 하다가...
이게 뭔 삽질인가 싶어서 비용 부담 없는(GPL, LGPL, BSD, 기타 등등) C/C++ 를 찾게 되었슴.
Code::Blocks : Cross-Flatform C++ IDE
Eclipse : 유명한 자바외 기타 등등을 위한 IDE
wxWigets : Cross-Flatform UI Framework
QT : Cross-Flatform UI Framework
MinGW : GNU Compiler for Windows
BCC5.5 : Borland C++ 5.5 Compiler. 공개되었음.
RELO : Windows 용 C++ IDE
등등을 둘러보며 헤매다가 QT 로 결정
QT는 한큐에 IDE, GUI 라이브러리와 MinGW 까지 설치 되니 이보다 더 편할 수가 없다.
게다가 Nokia 에서 인수 후, 앞으로의 전망도 좋아 보임.
1. QT SDK를 를 설치하면 IDE인 QT Creator 와 MinGW까지 같이 한꺼번에 설치됨
2. OpenCV 를 설치
3. __exchange_and_add 에 대해 에러가 나는데, 소스를 수정해야 한다. 이것 때문에 많이 헤맸음 ㅠㅠ
http://opencv.willowgarage.com/wiki/InstallGuide
- Open cxoperations.hpp (found in <Open CV base dir>\include\opencv)
- Find this section (lines 67-68 in 2.0):
#else
#include <bits/atomicity.h>
#if __GNUC__ >= 4- And update it to reference a new definition, __MINGW32__ (defined by the MinGW compiler, see http://predef.sourceforge.net/precomp.html#sec31):
- #else
#include <bits/atomicity.h>
#if __GNUC__ >= 4 || __MINGW32__
4. 프로젝트 생성시 다음과 같이 세팅
INCLUDEPATH += [OpenCV설치경로]\include\opencv
LIBS += [OpenCV설치경로]\lib\libcv200.dll.a
LIBS += [OpenCV설치경로]\lib\libhighgui200.dll.a
LIBS += [OpenCV설치경로]\lib\libcxcore200.dll.a
http://kkamagui.tistory.com/90
TOW 패키지 릴리즈및 Subversion 설치 가이드 입니다.
TRAC 같은 경우 설정이 꽤 복잡한데 간단히 설치할수 있게 잘 정리해서 배포하시고 계십니다.
이런 분들 매우매우 고맙죠.
이번 기회에 회사에서 적용을 해보려고 합니다.
개인적인 코드들도 따로 넣어보고 싶고.... (딴데다....)
마침 회사 서버가 윈도우 2003이니 거기에 구겨넣어볼까 생각 중입니다...
사실은 서버하나 만들어달라고 하고 리눅스로 전용 서버 구축을 했으면 하는데...
들어줄지도 잘 모르겠고... 진행중인 프로젝트가 겹겹이 겹쳐있는 상황이라 일을 만들기가 부담스럽네요.
https://forums.embarcadero.com/thread.jspa?threadID=1069&tstart=0
간단 요약하면 환경변수의 Platform 항목을 지워주면 된다는 거
착한 직장 동료 덕에 4년만에 노트북을 업그레이드 하게 됐습니다.
술 사준다고 했는데 요즘 서로 바빠서 언제 먹으려나 -_-;
아무튼 문제는 OS가 비스타라는건데... 망할 HP사가 아예비스타밖에 못쓰도록 박아놔 버렸네요.
나중에 클래스 플랫폼 개발을 시도해보려는데 이거 리눅스 깔기도 고달플 듯
아무튼....
문제가 델파이 2007 사용시 설정한 컴파일 옵션이 제대로 안붙습니다.
뭘하든 --no-config가 붙어 버립니다. -_-;
처음엔 맵(map)파일과 리모트디버깅(rsm) 파일이 갱신이 안되길래 왜 그럴까 몇시간을 헤매다 찾았지요 어흑....
그 후엔 인터넷이 되는 여관(출장중이라...)에서 구글 검색 중 단 하나의 링크글을 발견...
...
스크립트 파싱을 못한 코드기어의 잘못인지 난데없는 Platform=MDC 가 세팅되는 비스타의 문제인지..
외진곳에 쳐 박힌 현재로선 알길이 없지만.... (별로 알고 싶지도 않음)
다른 버전의 윈도우에는 이런일이 없었죠....;
나중에 누군가 헤매는 사람이 또 있을까 봐(구글 보면 그리 많지는 않은 듯?) 블로깅합니다.
그외에도 느리고 불편한게 많네요.이노므 비스타... ㅜㅜ
빵집 스크립트 편집 화면
HSL Color Space
CMYK Color Model
다운로드 : 언제나 그렇듯 맘대로 쓰되 출처를 밝혀주면 고마울 것이다.
이번에도 집사람의 사진을 무단 도용하였다 (미안 -_-;)
마우스를 드래그하면 사각 영역이 그려지고,
드래그가 끝나면 선택 영역의 적목현상으로 나타난 빨간 눈을 대충 바꿔 준다.