본문 바로가기

분류 전체보기1144

숫자 정수 반올림(어셈블러 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.
ShortString, LongString, WideString 정적배열, 동적배열 ShortString, LongString, WideString 정적배열, 동적배열   짧은 문자열 타입 (ShortString)  var Str : ShortString; 총길이는 255이고Str[0]에 문자열의 길이가 담겨져 있고 다음 인덱스 부터는 문자가 들어간다여기서 한가지 지시어를 소개 시켜드리자면 Absolute 이다varStr : ShortString;StrLen : Byte Absolute Str 이렇게 하면 StrLen은 Str의 시작주소가 같게 된다. 긴 문자열 타입(Long Stirng)  오프셋 내용-8 32비트 참조 카운트 -4 바이트 단위의 길이 0..길이-1 문자열길이 Null 문자Str := 'Edit1'이라고 넣고 -8 부터 -1까지의 주소의 값이 20005000..32비트.. 2024. 5. 6.
카카오 오톡팍 Ad 카카오 오톡팍 Ad 2024. 5. 3.
퀀텀 그리드 컬럼 동적 생성 퀀텀 그리드 컬럼 동적 생성   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.
프로젝트 이름 변경 프로젝트 이름 변경 1. 솔루션 탐색기 - 프로젝트 우 클릭 - 이름 바꾸기 - 이름 변경 * WindowsFormsApp1 --> testName 2. 솔루션 탐색기 - 프로젝트 우 클릭 - 속성 3. 어셈블리 이름과 기본 네임스페이스 변경 * WindowsFormsApp1 --> testName 4. Ctrl + Shift + h 를 눌러 찾기 및 바꾸기 창을 띄움 5. 기타 옵션을 아래와 동일하게 맞추고 이름 변경 후 모두 바꾸기 클릭 * 상단에 변경 전(WindowsFormsApp1) 하단에 변경 후 (testName) 입력 6. 솔루션 탐색기 - 솔루션 우 클릭 - 이름 바꾸기 - 이름 변경 * WindowsFormsApp1 --> testName ​ 프로젝트 폴더 이름 변경 프로젝트 폴더의 경.. 2024. 4. 20.
폼을 점점 투명하게 나타나게 하기 폼을 점점 투명하게 나타나게 하기 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.
StringGrid Row색칠/정렬 하기 StringGrid Row색칠/정렬 하기 procedure Tfrm_xxx.Grid_ListDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var Ls_mt_kbn : String; LeftPos: Integer; TopPos : integer; CellStr: string; begin Ls_mt_kbn := Grid_List.Cells[16,ARow]; if (ACol >= Grid_List.FixedCols) and (ARow >= Grid_List.FixedRows) then with Grid_List.Canvas do begin if Ls_mt_kbn = 'M' then Brush.Color :=.. 2024. 4. 15.
델파이 코드구역(REGION) 사용방법 델파이 코드구역(REGION) 사용방법 {$REGION 'MyRegion'} procedure MyRegion1; begin end; procedure MyRegion2; begin end; {$ENDREGION} 2024. 4. 12.