2020년 12월 7일 월요일

FastReport 에서 미리보기를 하지 않고 곧바로 PDF로 출력하기

FastReport 에서 미리보기를 하지 않고 곧바로 PDF로 출력하기


당연히 FRXReport 콤포넌트에서 출력 폼을 먼저 생성하여야 하겠지요 (*.fr3) 


procedure TForm1.ExportToPDF(AReport: TfrxReport; AFileName: String);
var
  PDFExport: TfrxPDFExport;
begin
  PDFExport := TfrxPDFExport.Create(nil);
  try
    PDFExport.ShowProgress := True;
    if AFileName <> '' then begin
      PDFExport.ShowDialog := False;
      PDFExport.FileName := AFileName;
    end;
    AReport.PrepareReport(True);
    AReport.Export(PDFExport);
  finally PDFExport.Free;
  end;
end;

사진읽어와 데이터베이스에 저장하기

사진을 정리하여 PDF 파일로 만들어 프린터로 출력하거나 보관하기 위해서 사진을 데이터베이스에 읽어와 일괄작업을 하려고 했더니 

요즈음은 휴대폰의 카메라 성능이 너무 좋아 프린트 출력을 위한 용도로는 파일의 크기가 너무커서 데이터 베이스 작업이 너무 어렵고,

또한 사진의 방향의 제각각으로 읽혀지는 경우가 많습니다.

이곳저곳 기웃기웃하여 좋은 방법을 찾았습니다.

본 예제른 사진의 가로폭을 1280으로 조절하고, 사진의 방향을 맞추어 데이터 베이스에 저장하는 것 까지 보여줍니다.

uses JPEG, GDIPAPI, GDIPOBJ;
procedure TForm1.acAddJpgExecute(Sender: TObject);
var
idx: integer;
jpg: TjpegImage;
GPImage: TGPimage;
GPGraphics: TGPGraphics;
pPropItem: PPropertyItem;
BufferSize: Cardinal;
Orientation: Byte;
RotateType: TRotateFlipType;
Bitmap: TBitmap;
TempBitmap: TBitmap;
iHeight: integer;
begin
if OpenPictureDialog1.Execute then begin
for idx := 0 to OpenPictureDialog1.Files.Count - 1 do begin
ZQuery1.Append;
ZQuery1.FieldByName('ino').AsInteger := idx*10;
ZQuery1.FieldByName('idate').AsString := DateToStr(DatePicker1.Date);
GPImage := TGPimage.Create(OpenPictureDialog1.Files[idx]);
try
BufferSize := GPImage.GetPropertyItemSize(PropertyTagOrientation);
if BufferSize > 0 then begin
GetMem(pPropItem, BufferSize);
try
GPImage.GetPropertyItem(PropertyTagOrientation, BufferSize, pPropItem);
Orientation := PByte(pPropItem.value)^;
case Orientation of
1: RotateType := RotateNoneFlipNone; // Horizontal - No rotation required
2: RotateType := RotateNoneFlipX;
3: RotateType := Rotate180FlipNone;
4: RotateType := Rotate180FlipX;
5: RotateType := Rotate90FlipX;
6: RotateType := Rotate90FlipNone;
7: RotateType := Rotate270FlipX;
8: RotateType := Rotate270FlipNone;
else RotateType := RotateNoneFlipNone; // Unknown rotation?
end;
if RotateType <> RotateNoneFlipNone then GPImage.RotateFlip(RotateType);
Bitmap := TBitmap.Create;
TempBitmap := TBitmap.Create;
try
Bitmap.Width := GPImage.GetWidth;
Bitmap.Height := GPImage.GetHeight;
Bitmap.Canvas.Lock;
try
GPGraphics := TGPGraphics.Create(Bitmap.Canvas.Handle);
try
GPGraphics.DrawImage(GPImage, 0, 0, GPImage.GetWidth, GPImage.GetHeight);
if Bitmap.Width > 1280 then begin
iHeight := Ceil((Bitmap.Height * 1280) / Bitmap.Width);
TempBitmap.Width := 1280;
TempBitmap.Height := iHeight;
SetStretchBltMode(TempBitmap.Canvas.Handle, HALFTONE);
StretchBlt(TempBitmap.Canvas.Handle, 0, 0, TempBitmap.Width, TempBitmap.Height, Bitmap.Canvas.Handle, 0, 0, Bitmap.Width, Bitmap.Height, SRCCOPY);
DBImage1.Picture.Assign(TempBitmap);
end
else DBImage1.Picture.Assign(Bitmap);
ZQuery1.Post;
finally GPGraphics.Free;
end;
finally Bitmap.Canvas.Unlock;
end;
finally
Bitmap.Free;
TempBitmap.Free;
end;
finally FreeMem(pPropItem);
end;
end
else begin
Bitmap := TBitmap.Create;
TempBitmap := TBitmap.Create;
try
Bitmap.Width := GPImage.GetWidth;
Bitmap.Height := GPImage.GetHeight;
Bitmap.Canvas.Lock;
try
GPGraphics := TGPGraphics.Create(Bitmap.Canvas.Handle);
try
GPGraphics.DrawImage(GPImage, 0, 0, GPImage.GetWidth, GPImage.GetHeight);
if Bitmap.Width > 1280 then begin
iHeight := Ceil((Bitmap.Height * 1280) / Bitmap.Width);
TempBitmap.Width := 1280;
TempBitmap.Height := iHeight;
SetStretchBltMode(TempBitmap.Canvas.Handle, HALFTONE);
StretchBlt(TempBitmap.Canvas.Handle, 0, 0, TempBitmap.Width, TempBitmap.Height, Bitmap.Canvas.Handle, 0, 0, Bitmap.Width, Bitmap.Height, SRCCOPY);
DBImage1.Picture.Assign(TempBitmap);
end
else DBImage1.Picture.Assign(Bitmap);
ZQuery1.Post;
finally GPGraphics.Free;
end;
finally Bitmap.Canvas.Unlock;
end;
finally
Bitmap.Free;
TempBitmap.Free;
end;
end;
finally GPImage.Free
end;
end;
StatusBar1.SimpleText := '사진을 읽어왔습니다, 작업사항을 입력하십시요.'
end; // for
end;

2020년 12월 3일 목요일

델파이에서 fastreport 로 pdf 생성시 한글이 깨어지는 문제가 있음

fastreport 6 vcl 에서 pdf 파일 생성시 한글이 깨어져서 네모로 출력어

델마당에 나오 방법으로 했으나 해결이 안되었는데

Memo Component 의 Charset을 

HANGEUL_CHARSET 으로 바꾸어 주니 정상으로 한글이 출력됩니다.

아마 다른버전도 그러할 것입니다.





2020년 11월 23일 월요일

REST API 연결

 델파이(delphi)에서 REST API 간단한 예제

1. 새폼을 만듭니다.

2. Palette 에서 REST로 찾아 아래 콘트롤을 폼에 드롭합니다.

    RESTClient, RESTRequest, RESTResponse, 

3. 예제로 동행복권API를 사용하겠습니다. RESTClient1 콘트롤에서

    BaseURL = https://www.dhlottery.co.kr

4. RestRequest1 콘트롤에서 

    client = RESTClient1,   responce = RESTReponce1,  resource = common.do

5. RESTRequest1 콘트롤의 Params 를 더블크릭하여 아래와 같이 추가합니다.



6. RESTRequest1dp 마우스 오른쪽을 크릭하여 Execcute... 을 선택하여

9. 아래의 결과를 받습니다.


10. Form에 memo 콘트롤을 하나 드롭하고 크기를 적당하게 조절한 다음. 오브젝트인스펙트에서 아래와 같이 확인합니다. 지금까지의 작업은 익스플러의 주소창에
https:/www.dhlottery.co.kr/common.do?method=getLottoNumber&drwNo=900
라고 입력하고 결과를 받는 것과 같습니다.




11. RESTREsponseDataSetAdapter, FDMemTable, ListView, Edit, button을 폼에 드롭합니다.

12. RESTResponseDataSetAdapter1 콘트롤에서

13. Listview1 마우스 오른쪽크릭하여 Columms Editor.. 선택하여 Columm을 추가하고, 

    ViewStyle = vsReport로 변경합니다.


14. LiveBindings Designer 를 불러냅니다.


11.  LiveBindings Designer에서 아래와 같이 연결합니다.

필요하면 BindSourceDB 콘트롤을 폼에 추가합니다.

12. 버튼을 크릭하여 아래코드를 추가하고 결과를 확인합니다.

procedure TForm3.Button1Click(Sender: TObject);
begin
  RESTRequest1.Execute;
end;

13. 결과


14. 같은 방법으로 https://www.data.go.kr/index.do 에 접속하여 REST API를 경험하세요.


2020년 10월 17일 토요일

휴대폰에 openssh 설치하여 windows10에서 mysql 접속

1. 휴대폰에서 termux를 실행한다.

2. $ pkg upgrade

3. $ pkg install openssh

4. 상황에 따라 필요하면 'Y'

5. ssh 데몬 실행

$ sshd

$ passwd

New Password:

Retype new password:

6. 휴대폰의 ip 확인

$ ifconfig   ; inet 172.30.1.8 netmask 255.255.255.0 확인

$ whoami

u0_a195

7. windows10의 cmd 창에서 

8. mysql client 접속 (mysql을 설치하고 demon을 실행 했으면)

 



안드로이드 휴대폰에 mysql(MariaDB) 설치

 1. GooglePlay에서 termux를 찾아 설치


!! 수정 2024년 https://f-droid.org/packages/com.termux/ 에서 다운 받습니다.
!! DOWNLOAD F-DROID 아니라 Version 0.118.0(118) suggested 아래에 있는 apk 파일 다운로드 받아 설치합니다.

2. termux를 실행


3. mysql을 설치

$pkg upgrade 

;패키지 설치전에 패키지 상태를 확인 필요하면 'Y'

$pkg install mariadb

$ cd  ;사용자 폴더로 이동

$ cd ..  ;상위폴도로 이동

$ cd usr

$ cd etc

$ ls  ;my.cnf.d 폴더 확인

$ cd ;사용자 폴더로 이동

$ mkdir my.cnf.d

$ mysql_install_db

$ mysql_upgrade

$ mysqld_safe -u root

CTRL+Z

$ mysql

MySql client에 들어가서 show databases; 하여 상태 확인

MariDB [(none)]> exit;  //mysql client 에서 빠려나오기

$ exit  ;데몬에서 나오기

$ exit  ;termux에서 나오기


2020년 10월 12일 월요일

Remove the list of Mac applications in Windows 패러럴설치후

부트캠프를 이용하는 방식의 패러럴을 설치하고 나면

탐색기에서 특정 확장자의 파일을 우크릭해서 연결프로그램... 을 선택하면

맥용 프로그램이 나타난다.

이것을 고치기위해서 여러방법을 시도 했지만 딱히 이렇다 할 방법을 찾지 못했다.
나는 이렇게 해결했습니다.
1. regedit.exe 를 실행한후 아래 그림과 같이 항목을 삭제 한다.
이곳에서 ..(Mac)..  이렇게 되어 있는 키를 삭제한다.

2. C:\Users\G0516\AppData\Roaming\Parallels\Shared Applications
아래에 있는 모든 파일을 삭제한다.

그결과 아래와 같이 깨끗하여졌다.

그러나 레지스트리에는 아직 조각들이 남아 있다.

검색결과 이렇게 하라고 되어 있는데...

Remove the list of Mac applications in Windows 로 구굴링해보시기 바랍니다.

#Paralles #Openwith list #연결프로그램 #패러럴 #윈도우





2020년 10월 9일 금요일

윈도우에서 사진파일에 있는 카메라 정보를 이용하여 사진 파일을 관리할 수 있습니다.

사진파일에 있는 카메라 정보를 이용하여 파일을 날자 또는 년월별로 폴더를 만들어서 관리할 수 있습니다.

관련자료를 검색했더니 ExifRenamer라는 맥용파일이 있더군요.
윈도우용은 찾아도 안보이더니, 이곳에 숨어 있었군요.

윈도우용 ExifRenamer 은 이곳을 방문하면 다운 받을 수 있습니다.

이제 앞에서 설명한 RaiDrive 와 ExifRenamer를 이용하여 사진을 정리 할 수 있습니다.
RaiDrive는 원드라이브나 구글포토등의 크라우드를 내 컴퓨터의 드라이버로 잡을 수 있으니 손쉽게 그림 파일을 정리 할 수 있을 것 입니다.

ExifRanamer 는 프로그램 만드신 분의 설명서를 참고 하세요.
https://www.clien.net/service/board/pds/4170735

먼저 사진을 크라우드에 동기합니다.
RaiDrive로 Z: 드라이버 연결을 합니다.
ExifRenamer로 정리 복사 이동을 하시면 됩니다.

아래는 사진 파일 정리 화면입니다.


윈도우에서 RaiDrive(무료 프로그램)로 네트워크 폴더 만들기

레이드라이브(RaiDrive)는 오픈박스연구소(OpenBoxLab)에서 개발한 윈도우용 클라우드 스토리지 게이트웨이(cloud storage gateway) 소프트웨어로, 윈도우의 기본 기능으로 연결할 수 없는(또는 어려운) 원격 스토리지를 윈도우 파일 탐색기의 네트워크 드라이브로 만들어주는 것이 핵심기능이다.

개인용, 기업용, 교육용 클라우드 스토리지를 모두 지원하며,

표준 프로토콜을 지원하는 NAS[3], 공유기[4], 서버[5]와도 연결가능하다.

 

클라우드 스토리지

구글 드라이브 (Google Drive)

구글 팀드라이브 (Google Team Drive)

구글 포토 (Google Photos)

원드라이브 (OneDrive)

셰어포인트 (SharePoint)

드롭박스 (Dropbox)

박스 (Box)

메가 (MEGA)

피클라우드 (pCloud)

얀덱스 디스크 (Yandex Disk)

메일루 클라우드 (Mail.ru Cloud)

아마존 S3 (AWS S3)

애저 스토리지 (Azure Storage)

구글 클라우드 스토리지 (Google Cloud Storage)

네이버 오브젝트 스토리지 (Naver Object Storage)

알리바바 오브젝트 스토리지 (Alibaba Object Storage)

와사비 오브젝트 스토리지 (Wasabi Object Storage)

아이비엠 오브젝트 스토리지 (IBM Object Storage)



레이드라이브 - 공식 웹사이트에서 다운로드 받을 수 있다.


설치도 쉽고 사용도 간단합니다.

아래그림은 현재 제가 사용하고 있는 상태 인데 구글드라이버를 추가해보겠습니다.

추가버튼(+)를 누릅니다.





계속하여 1~5까지 한 다음 6 확인을 누릅니다.



익스프로워가 실행되며, 아이디와 패소우드를 넣습니다.



계속하여...



계속하여...



계속하여...


아래처럼 탐색창이 하나 U: 드라이브로 잡혔습니다. 

이제 일반 드라이브에서 사용하듯이 접근하면 됩니다.



























2020년 10월 4일 일요일

MAC에서 jfif 확장자 이미지 파일 보기

미리보기로 볼 수 있으나 사전에 지정해부어야 합니다.


파인더에서 정보가져오기 한다음  

다음으로 열기 > 미리보기.app > 모두변경













Mac 에서 화면 정리 앱인 Option Layout 소개

 Optimal Layer


윈도우를 사용해본 사람은 화면에 나타난 앱의 캡션바를 당겨 화면 왼쪽이나 오른쪽으로 보내면 앱이 가장자리에 달라 붙어 화면이 깔끔해집니다.


맥에서는 OS X EI Caption 이상이면 Split View를 이용하면 됩니다.

Split View 활성화는 Mition Control“에서 각각의 Spaces가 있는 디스플레이”가 선택되어 있어야 합니다.



화면 상단의 메뉴바의 윈도우 메뉴에 윈도우 배치 메뉴가 있습니다.

또는 상단 메뉴에 윈도우를 최소, 확대, 왼쪽으로, 오른쪽으로 정리하는 메뉴가 있습니다.

또는 전체화면 아이콘을 길게누를 수도 있습니다.




왼쪽에 윈도우 배치를 선택하면 반때편쪽에 배치할 윈도우를 선택 하게합니다.



 

선택하면 화면이 둘로 나누어 지고 각각의 화면의 크기를 조절 할 수 있는 바가 중간에 나타납니다.




그런데 전체화면 모드가 되버립니다.

물론 마우스를 화면 위쪽으로 옮기면 메뉴바가 나타납니다.

종료는 해당 윈도우에서 전체화면 모드를 해제 하면 됩니다.

해제시 윈도우 배치가 이상하게 되어 버려 다른 가상 데스크탑 화면으로 옮겨가 버립니다.



그외에 외부앱을 설치하여 유사한 기능을 간단하게 구현 하는데 무료인 Optimal Layout이라는 앱을 소개 하려고 합니다.

사파리에서 사파리확장 프로그램…을 선택하고 검색 창에서 optimal layout을 선택합니다.





설치되면 메뉴바에 아이콘이 등록되고




Cmd+Option +2를 한번 누르면 왼쪽 한번더 누르면 오른쪽 화면에 배치 됩니다.



또한 속성창을 불러내어  위치지정 단축키를 조정 할 수 있습니다.



로그인시 바로 실행하게 할 수도 있습니다.


Option + Tab 키로 특정 윈도우로 옮겨 갈 수 도 있습니다.

임의 윈도우가 다른 가상데스크탑에 있으면 곧바로 이동도 됩니다.


많이 사용하셔서 편리만 맥의 세계에 빠지세요.



 



2020년 8월 25일 화요일

MAC 북에서 YOUTUBE 다운로드

유투브 동영상등을 맥에서 다운 받기위해서는 MediaHuman 이나 4kDownloader 등을 사용해야하나 유료이며 무료는 유투브 환경이 자주바뀌기에 되다가 어느날 안된다.

안드로이드 폰에서는 tubemate 라는 앱이 있어서 다운로드가 가능하다. 물론 광고를 봐야 한다.

이것을 이용하여 이런 멍청한 방법을 이용하여 다운로드를 해보았다.

먼저 안드로이드 에뮬레이터를 설치 한다. 나는 NOX를 설치 했다. 가끔 게임도 하곤하기에...

tubemate.apk를 다운로드 받는다. 

googleplay에는 없으니 인터넷 검색하여 제작자 홈피에서 받아야 한다.

tubemate 에서 유투브에서 다운받을 동영상을 선택하고 다운로드버튼(빨강 아래 화살표)을 크릭하면 받아진다. 그런데 아직 맥북의 어느위치에 저장되는지 못 찾았다.

NOX에서 sendanyware를 설치하거나 익스플러어에 접속하여 보내기 하면 6자리 코드가 생성된다.

맥에서 사파리등을 이용하여 sendanyware에 접속하여 받기를 선택하고 6자리 코드를 입력하면 받아 진다.

물론 tubemate에서 mp3로 변환하여 저장할 수도 있다.

다른 방법으로는 사파리를 이용하여 유투브다운로드 사이트에 접속한 후, 

유투브의 공유 링크를 입력하고 다운받아도 된다. 이게 쉬운가? 그런데 너무 이상한 광고들이 화면을 도배하므로 권정하기는 그렇네요.

웹 사이트 URL : Y2Mate.com

웹 사이트 URL : Youtube Video Downloader

웹 사이트 URL : SaveFrom.Net

웹 사이트 URL : iTubeGo



2020년 5월 9일 토요일

델파이에서 TAcroPDF 사용후 종료시 프로세서가 종료되지 않을 때

델파이에서 TAcroPDF 사용후 종료시 프로세서가 종료되지 않을 때
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
  Ref : Integer;
begin
  Ref := AcroPdf1.ControlInterface._AddRef;
  AcroPdf1.Src := '';
  AcroPdf1.Free;
  AcroPdf1 := Nil;
end;
하거나
AcroPDFLib_Tlb.pas 에서 
Type
TAcroPDF = class(TOleControl)
  ...
  public
    destructor Destroy; override; // <- New Line
  ...
  end;

Implementation
.....  
destructor TAcroPDF.Destroy;
begin
 FIntf := NIL;
 inherited;
end;
하면 정상 종료된다.

델파이 12.1이냐 11.3이냐?

 델파이가 12.1이 나왔습니다. 혹시 11.3버전의 커뮤니티버전이 필요하시는분이 있을 수 있을 것 같아 https://altd.embarcadero.com/.../RADStudio_11_3_esd_28... 와 이것 찾느랴 엄청고생함.