본문 바로가기

전체 글1051

필드데이터 합치기 필드데이터 합치기    CONCAT(,'동 ','층 ','호 ') As Test 2024. 9. 26.
메소드 ( Method) 메소드 ( Method)    using System.Net.Http.Headers;using System.Security.Cryptography; namespace _06_Method{    internal class Program    {        static int Fibonacci(int n)        {            if (n  0)                    Console.WriteLine(", ");                 Console.Write(args[i]);                sum += args[i];            }            Console.WriteLine();             return sum;        }     .. 2024. 8. 16.
코드의 흐림제어 using System.Collections.Generic; namespace _05_Code{    //형식패턴 클래스 선언    class Preschooler { }    class Underage { }    class Adult { }    class Senior { }     internal class Program    {         #region 형식 패턴         static int CalculateFee(object visitor)        {            return visitor switch            {                Underage => 100,                Adult => 500,                Senior .. 2024. 8. 1.
한글(2Byte)문자열 깨지지 않게 자르기 한글(2Byte)문자열 깨지지 않게 자르기    WideString 을 사용하자한글을 자를때 깨진 1Byte 문자를 WideString 변수에 넣었다가String 변수로 되받아서 Trim 처리를 하면 깨진 문자가 정리되어 이걸 활용 이 예제는 C++Builder 에서도 동일하게 적용 procedure TForm1.Button1Click(Sender: TObject);varTextString, TextTrim: String;TempWide: WideString;LenthCnt: Integer;beginTextString := Trim(Edit1.Text); //원본문자열LenthCnt := StrToIntDef(Edit2.Text,7); //문자열 자를 위치 if ( Length(TextString) > .. 2024. 7. 8.
프로그램 디버그(Debug) 메시지를 찍기 프로그램 디버그(Debug) 메시지를 찍기 프로그램 작성시 디버깅을 특정상황에서 showmessage 를 통해 하는 경우도 있지만..델파이의 result 창에서 나타나게 하는 방법은 OutputDebugString 을 이용해 문자열을 출력하는 것이다. 2024. 7. 6.
해당날짜 몇 주차인지 알아내기 해당날짜 몇 주차인지 알아내기 uses System.DateUtils function myGetWeekNo(paToday:TDateTime):Word;varvWeekNo : word;vDTstart : TDate;beginvDTstart := EncodeDate( YearOf(paToday), MonthOf(paToday), 01 );vWeekNo := WeekOfTheYear(paToday) - WeekOfTheYear(vDTstart) +1;if Not (vWeekNo IN [1..6]) then //12월 31일이 월요일인경우 리턴값이 65xxx를 예방하기 위함vWeekNo := 6;Result := vWeekNo;end; 2024. 7. 5.
델파이 포인터 사용 팁 델파이 포인터 사용 팁 ShellApi 를 이용할때 윈도우에서 사용하는 언어인'C' 와 델파이의 'Pascal'의 포인터 다루는 방법이 달라많은 혼동(나만?)을 일으킨다. 특히나 파스칼에서는 포인터방법이여러가지가 있어 햇갈리기 아주 좋다. 그래서 한번 정리하여 보았다.예제는 폴더를 찾아 지정하는SHBrowseForFolder 를 이용하는 것으로 하였다. 1. 버퍼를 이용하는 방법var Buffer: array[0..255] of char; beginpszDisplayName:= @Buffer; .......MessageBox(handle, Buffer, '', MB_OK); end; 2. pChar 를 이용하는 방법 : 'C' 와 유사var Buffer: pChar;beginGetMem(Buffer, 2.. 2024. 7. 4.
Winapi.WinSock을 이용한 WOL(Wake On Lan) 구현 WinSock을 이용한 WOL(Wake On Lan) 구현   unit Unit1; interface usesWindows, Messages, SysUtils, Variants, Classes,Graphics, Controls, Forms, Dialogs, StdCtrls, WinSock; typeTForm1 = class(TForm)Edit1: TEdit;Button1: TButton;Memo1: TMemo;procedure Button1Click(Sender: TObject);procedure FormCreate(Sender: TObject);procedure FormClose(Sender: TObject; var Action: TCloseAction);private{ Private declarati.. 2024. 7. 2.
C# 문법 C# 문법  global using System; using System.Globalization; using static System.Console; namespace Hello { class MainApp { //enum DialogResult { YES, NO, CANCEL, CONFIRM, OK }; enum DialogResult { YES = 10, NO, CANCEL, CONFORM = 50, OK }; static void Main(string[] args) { //1번 테스트 /* if (args.Length == 0) { Console.WriteLine("사용법 : Hello.exe "); return; } WriteLine("Hello, {0}!", args[0]); */ //2번 테.. 2024. 7. 1.
dfm 직접 폼디자인 변경 dfm 직접 폼디자인 변경   실시간에 소켓등으로 dfm 파일을 쏴서그걸 읽어서 폼디자인 변경할 수 있는 방법인데 몇가지 제한이 있는데콤포넌트의 이벤트는 dfm 에 없어야 하고..form 전체를 dfm 으로 받아서 할수는 없고 form 에 프레임이나패널을 써서 프레임이나 패널이 dfm 의 최상위 콤퍼넌트일 때 쓸 수 있고RegisterClasses 로 클래스 등록을 모두 해줘야 하는등.. 제한이 있네요.. 간단히 예제를 만들어봐서 올립니다.폼의 일부 영역만 바꾸려고 할 때는 유용할 거 같네요.이벤트없고 콤포넌트만 있는다거나 하는 경우.. 소스는 아래와 같은데TReader 의 ReadRootComponent 메소드로 dfm 읽어들여서그 루트콤포넌트의 parent 만 정해주는 방식입니다. procedure .. 2024. 7. 1.
TMemo(메모장) 스트링(string) 입력 속도개선 TMemo(메모장) 스트링(string) 입력 속도개선  메모장에서 문자를 바꾸거나 할경우 메모장의 내용을String에 옮긴 다음 해당 작업을 하고다시 메모장으로 불러들일때 별생각없이 아래와 같이 한다. (예)iStr:= Memo1.Lines.Text;iStr:= StringReplace(iStr, 'a', 'b', []) ;Memo1.Lines.Text:= iStr; 그런데 메모장의 내용이 많울 경우(스트링의 크기가 클)에는Memo1.Lines.Text:= iStr; 에서 엄청 많은 시간을 먹는다. 개선방법 var iMemStream: TMemoryStream;iStr: string;beginiStr:= Memo1.Lines.Text;iStr:= StringReplace(iStr, 'a', 'b', [.. 2024. 6. 28.
레지스트리 ID 찾기 레지스트리 ID 찾기  레지스트리 Hkey_User 밑에 S-1-5-21 로 해당되는 ID를 얻는다. uses Registry 를 추가 function GetOwnerID: String;varReg: TRegistry;S: TStringList;S_Tmp: String;i: integer;beginResult := '';Reg := TRegistry.Create;S := TStringList.Create; tryReg.RootKey := HKEY_USERS;if Reg.OpenKeyReadOnly('') thenbeginReg.GetKeyNames(S);for I := 0 to s.Count - 1 dobeginS_Tmp := Copy(S.Strings[i], 1, 8);if S_Tmp = 'S-1-5-.. 2024. 6. 27.
간단한 상속(succession) / 인터페이스(interface) 상속(succession)  인터페이스(interface)   델파이에서는 클래스 다중상속이 안되기 때문에보통 인터페이스 다중상속을 많이 사용한다. 원래 클래스 상속에서 기본적으로 배우는게 공통되는 기능을상위클래스의 메소드로 만들고 하위클래스에서그 메소드를 오버라이드 해서 구현하는 것인데 이런것이 인터페이스로도가능한 것이므로 둘을 비교해서 간단하게 살펴보자. 예를들어 Animal 클래스가 있고 cat 클래스가 상속을 하든인터페이스를 상속하든 bark 라는 '야옹이라고 짖는' 메소드를 구현하는 예제이다. type{ interface }IAnimalIntf = interface(IUnknown)procedure bark;end; TCat = class(TInterfacedObject, IAnimalIntf).. 2024. 6. 20.
밝기(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.