본문 바로가기

delphi481

데이터셋 북마크 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.
숫자 정수 반올림(어셈블러 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.
첫번째 영문을 대문자 변경 첫번째 영문을 대문자 변경  function TitleCase(const str: string): string;varnewword: boolean; i: integer;c: char;beginnewword := true;result := Lowercase(str); for i := 1 to Length(result) dobeginc := result[i];if c in ['a'..'z'] thenbeginif newword thenbeginresult[i] := UpCase(c);newword := false;end;endelseif not (c in ['0'..'9']) thennewword := true;end;end; 2024. 5. 13.
for TCollectionItem for TCollectionItem  for 컬렉션아이템 in 컬렉션 do begin....end;  사용법예시varItem : TCollectionItem; beginfor Item in TCollection do beginItem.Name... 등으로 해당 컬렉션 아이템으로 작업end;end; 위와 같이 주로 컬렉션 작업때 유용하지만..배열에서도 사용할 수가 있다고 되어 있네요. 예를 들면varI : Integer;IArray1: array[0..9] of Integer = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10);beginfor I in IArray1 dobegin// Do something with I...end;end; 이와 같이..이 같이 for ... in 문장을 지원하는 클.. 2024. 5. 11.
한글 자음 모음 분리 한글 자음 모음 분리    constHanBase = $AC00; //유니코드 3.0 에서의 시작 한글영역HanLast = $D7AF; //유니코드 3.0 에서의 마지막 한글영역ChoSungStr:WideString = 'ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ';JungSungStr:WideString = 'ㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠㅡㅢㅣ';JongSungStr:WideString = ' ㄱㄲㄳㄴㄵㄶㄷㄹㄺㄻㄼㄽㄾㄿㅀㅁㅂㅄㅅㅆㅇㅈㅊㅋㅌㅍㅎ'; function JamoSplit(const Han: WideChar):WideString;varUniCode: Integer;ChoSung, JungSung, JongSung: Integer;beginResult := '';for UniCode := 1 to L.. 2024. 5. 10.
퀀텀 그리드 컬럼 동적 생성 퀀텀 그리드 컬럼 동적 생성   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.