본문 바로가기

분류 전체보기1058

밝기(bright), 대비(contrast), 감마(gamma), 색농도(Saturation) 조절 밝기(bright), 대비(contrast), 감마(gamma), 색농도(Saturation) 조절    Amount : 강도 0~255Saturation : 색농도 // contrastfunction IntToByte(i: Integer): Byte;beginif i > 255 then Result := 255elseif i elseResult := i;end; procedure Contrast(var clip: tbitmap; Amount: Integer);varp0: pbytearray;rg, gg, bg, r, g, b, x, y, m: Integer;beginfor y := 0 to clip.Height - 1 dobeginp0 := clip.scanline[y];m := 0;for x := 0.. 2024. 6. 19.
이미지의 밝기 / 선명도 조절하기 이미지의 밝기( brightness) / 선명도(definition) 조절하기     uses Math; procedure TForm1.FormCreate(Sender: TObject);beginSrcImg.Picture.Bitmap.PixelFormat:=pf32bit;DstImg.Picture.Bitmap.PixelFormat:=pf32bit;end; procedure TForm1.ScrollBar_BrightChange(Sender: TObject);typeTColor32 = recordB, G, R, A: Byte;end;TColor32Array = array[Byte]of TColor32;PColor32Array = ^TColor32Array;varW, H, iPixel: Integer;SrcP.. 2024. 6. 18.
폼 미러링 (Form Mirroring) 폼 미러링 (Form Mirroring)  폼의 OnActivate 이벤트핸들러에 다음 코드를 추가한다 SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or $400000); 2024. 6. 17.
데이터베이스(Database)에 실행파일 저장 데이터베이스(Database)에 실행파일 저장   CREATE TABLE ADCESER -(AD_PRNM VARCHAR(15) NOT NULL, --프로그램이름AD_MODT VARCHAR(25) NOT NULL, --프로그램수정날짜-2007-07-01 오전 10:20AD_PROG BLOB SUB_TYPE 0 SEGMENT SIZE 10240, --프로그램저장필드10메가PRIMARY KEY (AD_PRNM)) 쿼리 저장 소스TmpStream := TmemoryStream.Create;TmpStream.LoadFromFile('C:\Package\Program\'+prnm+'.exe');TmpStream.Position := 0; with DataMd.SQLmedia dobeginclose;sql.clear.. 2024. 6. 14.
델파이 2진수 변환(Binaryconversion) 델파이 2진수 변환(Binaryconversion)    두번째 인자가 비워져 있거나,2진수를 표현하는 자릿수에 못 미치면 2진수로 표현될 수 있는최소 길이로 표현되고 두번째 인자가 2진수 자릿수보다 크면 앞에 0이 붙어 나온다. function IntToBin(const Value: Cardinal; Digits: Integer = 0): string;vari, d: Integer;beginfor d := 1 to 32 do  if (1 shl d) > Value then break;  if Digits > d then d := Digits;  SetLength(Result, d);  for i := 0 to d-1 do if (1 shl i) and Value = 0 then  Result[d-i] .. 2024. 6. 13.
델파이 프로시저/함수를 스레드(Thread)로 실행 델파이 프로시저/함수를 스레드(Thread)로 실행   unit Unit1; interface usesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; typeTForm1 = class(TForm)Button1: TButton;Button2: TButton;procedure Button1Click(Sender: TObject);procedure Button2Click(Sender: TObject);private{ Private declarations }public{ Public declarations }procedure TestFunc(Sender: TObject);end; //-----.. 2024. 6. 12.
프로그램 종료 시 모든 폼 OnClose 이벤트 발생시키기 프로그램 종료 시 모든 폼 OnClose 이벤트 발생시키기   보통 프로그램을 작성할 때에 Form의 OnClose 이벤트에서관련 자원을 해제하는 코드를 넣는다. 그런데 Form의 OnClose 이벤트가 발생하지 않는 경우가 있다. 그래서 프로그램이 종료할 때 가끔 Access Violation Error가 나는 경우가 있다. 다음과 같은 코드를 삽입하면 프로그램이 종료될 때관련 폼의 모든 OnClose 이벤트를 발생시킨다. program Project1; usesForms,Unit1 in 'Unit1.pas' {Form1},Unit2 in 'Unit2.pas' {Form2},Unit3 in 'Unit3.pas' {Form3}; {$R *.RES} procedure CloseAllForm;vari: In.. 2024. 6. 11.
메모리 누수(memory leak) 체크 메모리 누수(memory leak) 체크    System.ReportMemoryLeaksOnShutdown:= True;  프로그램 종료시 리포트 출력  program Test; {$R *.res} beginSystem.ReportMemoryLeaksOnShutdown:= True; //메모리리포트 활성화 Application.Initialize;Application.MainFormOnTaskbar := True;Application.CreateForm(TMain, Main);Application.Run;end. 2024. 6. 9.
데이터셋 북마크 DataSet Bookmark 데이터셋 북마크 DataSet Bookmark   TBookMarker = class(TInterfacedObject)privateFBookMark: TBookMark;FDataSet: TDataSet;protectedconstructor Create(ADataSet: TDataSet);dynamic; destructor Destroy; override;publicclass function BookMark(ADataSet: TDataSet): IInterface;end; implementation class function TBookMarker.BookMark(ADataSet: TDataSet): IInterface;beginResult:= TBookMarker.Create(ADataSet);end; c.. 2024. 6. 7.
메세지 다이어그램(Message Dialog) 체크박스(CheckBox) 추가 메세지 다이어그램(Message Dialog) 체크박스(CheckBox) 추가     procedure TForm1.Button1Click(Sender: TObject);varAMsgDialog: TForm; function GetCheckValue(ADialog: TForm; const AName: String): boolean;vari: integer;beginfor i:=0 to ADialog.ControlCount-1 dobeginif ( ADialog.Controls[i].Name = AName ) and ( ADialog.Controls[i] is TCheckBox ) thenbeginResult := (ADialog.Controls[i] as TCheckBox).Checked;break;en.. 2024. 6. 6.
TImage에 색상바 그리기 TImage에 색상바 그리기       unit Unit1; interface usesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, ExtCtrls, StdCtrls; typeTMain = class(TForm)HueImg: TImage;ColImg: TImage;Label1: TLabel;FGColorPanel: TPanel;BGColorPanel: TPanel;procedure FormCreate(Sender: TObject);procedure FormResize(Sender: TObject);procedure HueImgMouseDown(Sender: TObject; Button: TMouseBut.. 2024. 6. 3.
바코드프린터 출력 참고 바코드프린터 출력    procedure TForm1.Button4Click(Sender: TObject); var s, Str, data: String; begin data := Edit1.Text; S:=''; s:= Chr($1B)+ Chr($61)+Chr($1); // ' 정렬 0:왼쪽 1:중앙 2:오른쪽 S:= S + chr($1D) + chr($21)+ chr($1); //글자크기 S:= S + '영수증'+ chr($0D)+ chr($0A)+chr($0D)+ chr($0A); //원하글자와 제어코드를 계속해서 추가합니다.. ComPort1.WriteStr(s); S := ''; S:= S + chr($1D)+chr($21)+chr($0); //글자크기 처음으로돌리기 s:= S + Chr($1B.. 2024. 6. 2.
인터페이스에 오브젝트 얻기 인터페이스에 오브젝트 얻기  function GetImplementingObject(const I: IInterface): TObject;constAddByte = $04244483;AddLong = $04244481;typePAdjustSelfThunk = ^TAdjustSelfThunk;TAdjustSelfThunk = packed recordcase AddInstruction: longint ofAddByte : (AdjustmentByte: shortint);AddLong : (AdjustmentLong: longint);end; PInterfaceMT = ^TInterfaceMT; TInterfaceMT = packed recordQueryInterfaceThunk: PAdjustSelfThun.. 2024. 5. 30.
키보드 키입력 막기 - 화면 캡처 방지(Blocking Screen Capture) 키보드 키입력 막기 - 화면 캡처 방지(Blocking Screen Capture)     unit Unit1; interface usesWinapi.Windows, Winapi.Messages, System.SysUtils,System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms,Vcl.Dialogs, Vcl.StdCtrls, ClipBrd; typeTForm1 = class(TForm)Button1: TButton;procedure FormCreate(Sender: TObject);private{ Private declarations }procedure ApplicationIdle(Sender: TObject; var Done: B.. 2024. 5. 29.
숫자 정수 반올림(어셈블러 Assembler) 숫자 정수 반올림(어셈블러 Assembler)   function xRoundInteger(pData, pDec: Integer): Integer;{ xRoundInteger(126,10) = 130 }asmMov ECX,EDXCdqIDiv ECXShl EDX,1Cmp EDX,ECXJb @Skip2Or EAX,EAXJs @Skip1Inc EAXJmp @Skip2@Skip1:Dec EAX@Skip2:IMul ECXend; function xTruncInteger(pData, pDec: Integer): Integer;{ xTruncInteger(354,100) = 300 }asmMov ECX,EDXCdqIDiv ECXIMul ECXend; 2024. 5. 28.
DBGrid 동일값 셀병합(컬럼머지) DBGrid 동일값 셀병합     개발을 하다보면, DBGrid 콤포넌트의 기능이 약해서,제3자 Grid 콤포넌트를 많이 사용하게 된다. 그런데, 그 덩치큰 삼자 Grid 콤포넌트의 전체 기능이 필요한 것이 아니고,한두가지 기능만 필요한 경우가 많다.더우기, 퀀텀그리드 같은 경우는 전체 레코드를 메모리에 로딩하기 때문에,필요한 한두가지 기능때문에 쓰기는 참 사치스럽기까지 하다. 속도향상을 위해 메모리테이블을 써야 되는 경우도 있는데,퀀텀에서 또 내부적으로 메모리테이블을 사용하므로이런 경우 이중으로 메모리를 낭비하는 셈이 된다. 물론, 요즘 일반적 컴 사양에서 별무리가 아니라 하더라도,한두가지 기능때문에 이런 식으로 퀀텀을 쓰기에는소 잡는 칼로 닭 잡는 수가 될 수도 있다는 얘기다. 이 예제는, 인접하는 .. 2024. 5. 27.
델파이의 String 변수 팁 델파이의 String 변수 팁      내부적으로는 포인터이면서 외견상으로는 숫자와 같은 일반 변수처럼 작동한다. 따라서 string변수는 자유롭게 포인터형태로 타입캐스팅이 가능하며포인터 조작이 가능하다. vars1: string;p: pointer;begins1 := 'Hello world'; p := pointer(s1);Move(p^, xxx^, Length(s1));end;  다른 특징은 델파이의 스트링변수를 복사할때 나타난다. vars1 : string;s2: stringbegins1 := 'Hello world';s2 := s1;Memo1.Lines.Add(inttostr(integer(Pointer(s1))) + ','+ inttostr(integer(Pointer(s2)))); 메모에서 확.. 2024. 5. 24.
내 실행파일 정보보기 내 실행파일 정보보기 procedure TForm1.Button1Click(Sender: TObject); const InfoNum = 10; InfoStr: array[1..InfoNum] of string = ('CompanyName', 'FileDescription', 'FileVersion', 'InternalName', 'LegalCopyright', 'LegalTradeMarks', 'OriginalFileName', 'ProductName', 'ProductVersion', 'Comments'); var S: string; n, Len, i: DWORD; Buf: PChar; Value: PChar; begin S := Application.ExeName; n := GetFileVersion.. 2024. 5. 23.
ShowModal,DialogBox,ShowMessage 등 떠 있을 때 폼 Disable 막기 ShowModal,DialogBox,ShowMessage 등 떠 있을 때 폼 Disable 막기   typeTForm1 = class(TForm) ...Timer1: TTimer;procedure Timer1Timer(Sender: TObject)privateprocedure WMEnable(var Msg: TMessage); message WM_ENABLE;end; implementation procedure TForm1.Timer1Timer(Sender: TObject);beginTimer1.Enabled:= False;EnableWindow(Handle, True);end; procedure TForm1.WMEnable(var Msg: TMessage);beginif Msg.wParam = 0 th.. 2024. 5. 21.
주민등록번호 성인인증 주민등록번호 성인인증   function IsUserAudult(jumin : string):boolean;varjuminleng, lastnum : integer;yy, mm, dd : string;nyy, nmm, ndd : integer;iyy, imm, idd : integer;ryy, rmm : integer;isAudult : boolean;begin result := false; nyy := strtoint(Formatdatetime('YYYY', now));nmm := strtoint(Formatdatetime('MM', now));ndd := strtoint(Formatdatetime('DD', now)); juminleng := length(jumin); if juminleng exit.. 2024. 5. 14.