Jump to content
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr ×
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr

김원경

관리자그룹
  • 포스트

    36
  • 가입

  • 마지막 방문

  • 방문일수

    3

김원경 님이 마직막으로 취득한 날:

김원경 님은 가장 좋아하는 콘텐츠를 가지고 있습니다!

1 팔로워

최근 프로필 방문자

최근 방문자 보기가 꺼져있어서 다른 사람에게 보이지 않습니다.

김원경 님의 성취

Explorer

Explorer (4/14)

  • One Year In
  • Conversation Starter
  • Collaborator
  • One Month Later
  • First Post

최근 배지

3

평판

4

답변

  1. 알아둘 점! 델파이 폼 디자이너에서 TImage, TImageList 등을 사용하여, 이미지를 넣거나, Project Options 창을 열고, Application > Icons에서 원하는 아이콘 이미지를 넣는 등의 일반적인 경우에는 자동으로 반영되므로, 굳이 이 글에 설명하고 있는 리소스 파일 따로 쓸 필요가 없다. 애플리케이션을 만들 때, 아이콘 이미지, 폰트 등 외부에 독립된 파일로 있는 데이터를 사용해야 하는 경우가 있다. 이런 외부 데이터를 애플리케이션 안에 넣을 때는 리소스 파일을 사용할 수 있다. 리소스 파일이란? 델파이에서 만든 애플리케이션이 사용하는 (이미지, 사운드, 텍스트, 폰트, 기타 바이너리 등) 다양한 데이터를 담는데 사용되는 파일이다. 리소스 파일을 프로젝트 안에 포함하면 실행 파일 안에 내장된다. 리소스 파일을 사용할 때의 장단점 실행 파일 안에 데이터가 들어가기 때문에 다음과 같은 장단점이 있다. 장점: 배포가 편하다. 리소스를 빠르게 적재한다. 단점: 실행 파일의 크기가 커진다. 메모리를 많이 사용할 수 있다. 리소스 파일을 만들고 사용하는 방법 따라하기 예제 (델파이) 외부 텍스트 파일(예: MyText.txt) 1 개를 리소스로 추가하고, 그 파일의 텍스트를 폼의 TMemo에서 보여주도록 해보자. 1. 새 VCL 프로젝트를 하나 생성한다 메인 메뉴 > File > New > VCL Forms Application 클릭 2. 외부 데이터 파일을 추가한다 메인 메뉴 > Project > Resources and Images… 를 클릭 리소스 매니저가 나타나면, [Add...] 버튼을 클릭하고, 원하는 외부 데이터 파일(예: MyText.txt)을 선택한 후 [OK] 버튼을 클릭한다. (이때, 선택한 데이터 파일의 Resource identifier는 자동으로 지정되는 그대로 둔다. 예: Resource_1) 3. 리소스 데이터를 사용할 폼의 UI를 만든다. 폼 위에 TMemo 1개와 TButton 1개를 올려 놓는다. (이때 이 컨트롤들의 Name은 자동으로 지정되는 그대로 둔다. 예: Memo1, Button1) 4. 리소스 데이터를 사용하는 코드를 작성한다. 폼에서 Button1을 선택하고, 오브젝트 인스펙터에서 Events 탭을 클릭하고 그것의 OnClick 이벤트를 더블 클릭하여 디펄트 이벤트 핸들러를 생성한다. 그 이벤트 핸들러 안에 아래 코드를 넣는다. procedure TForm1.Button1Click(Sender: TObject); var Stream: TResourceStream; begin Stream := TResourceStream.Create(HInstance, 'Resource_1', RT_RCDATA); try Memo1.Lines.LoadFromStream(Stream, TEncoding.UTF8); finally Stream.Free; end; end; 5. 프로젝트를 실행하여 리소스 데이터를 잘 가져오는 지 확인한다 F9를 눌러서 실행한다. MyText.txt 파일에 있는 내용이 Memo1에 그대로 표시될 것이다. 보너스! 혹시 궁금하다면, 리소스 파일을 사용하기 위해 델파이가 무슨 일을 해주었는지 보자. .rc 파일과 .dres 파일이 만들어 지는 것을 보려면, 메인 메뉴 > Project > Build를 클릭한다. (참고로, .res 파일은 리소스 매니저에서 외부 데이터 파일을 리소스에 넣으면, 따로 Build를 하지 않아도 만들어진다) 프로젝트 폴더 안에 아래 3개 파일이 생성된다. (만약, .rc 파일과 .dres 파일이 없다면, 메인 메뉴 > Project > Build를 클릭한다) <프로젝트이름>.dres <프로젝트이름>Resource.rc 이 리소스 스크립트 파일(.rc)을 메모장에서 열면 리소스를 추가하는 스크립트를 볼 수 있다 추가되는 리소스 마다: 리소스 Identifier, 리소스의 Type, 리소스의 파일명 기록된다. (Docwiki 도움말 보기) Resources and Images…를 리소스 매니저를 열어 리소스를 추가/삭제/변경하는면, 이 스크립트도 변경된다. <프로젝트이름>.res 프로젝트 소스 코드를 보면 (프로젝트 매니저 창 > 프로젝트 파일 위에서 마우스 오른쪽 버튼 클릭 > View Source 선택) {$R *.dres} 코드가 추가되었다. 컴파일된 리소스 파일(.dres)을 그 프로젝트 안에 포함하라는 컴파일러 지시어이다. 그러면 그 리소스 파일이 프로젝트 안에서 함께 컴파일 된다. 참고: 메인 메뉴 > Project > Resources and Images…에 대한 DocWiki 도움말 https://docwiki.embarcadero.com/RADStudio/en/Resources_and_Images 리소스 파일 지원 및 예제에 대한 DocWiki 도움말 https://docwiki.embarcadero.com/RADStudio/en/Resource_Files_Support .rc 파일과 .res 파일에 대한 부연 설명 .rc 파일의 스크립트를 이용하여 리소스를 컴파일 하는 기본 도구는 brcc32.exe (설치 폴더/bin/안에 있음)이다. 메인 메뉴 > Project > Options를 선택하여 프로젝트 옵션 창을 열고 Building > Resource Compiler를 클릭하고 Resource compiler to use 항목을 보면, 디펄트로 이 brcc32.exe가 선택되어 있을것이다. 이처럼 IDE에서 직접 .rc 파일을 읽어서 .res 파일을 만들고 넣어주기 때문에, (특별한 경우가 아니라면) 개발자가 명령줄에서 brcc32.exe를 직접 불러서 사용할 필요는 없다. 혹시라도, .rc 파일 또는 .res 파일을 직접 편집하고 싶다면 자세한 내용은 구글 검색을 하면 쉽게 방법을 알 수 있다.
  2. 해결하시느라 애쓰셨습니다. 그래도 해결 되어서 다행입니다. 이 글이 다른 분들에게도 도움이 될 것입니다. 감사합니다.
  3. 저희 교육생분이 지난 수업에 안드로이드 12를 사용하셔서 테스트하셨는데 처음에 타겟에 안올라오다가 해결되셨어요. 아래와 같이 조치하셨답니다. 1. 개발자옵션> USB 디버깅 껏다가 다시 키세요. 2.그리고 다시 연결하면 권한 물어볼꺼에요.그때 OK주고 30초 전후로 기다리면 올라옵니다. (조금 더 기다려도 됩니다.) 3. 만일 안올라오면 다시 재반복하면 올라옵니다. 참고로 약간 기다려주는 센스가 필요합니다. 한번 해보시고 결과를 알려주십시오.
  4. 1. 먼저 GetReceiverInfoFrame()은 어디에서 호출하시나요 ? 2. 그리고 아래의 코드 부분에서 FReseiverInfoFrame := nil; 은 왜 필요하신지 ? 화면이 메모리에서 해제될떄 프레임이 해제되기 때문에 필요없을것 같고 널처리 하신다고 해도 화면이 create 되는 시점보다는 프레임이 필요없는 시점에 해주시는게 좋습니다. 코드도 FreeAndNil(FReseiverInfoFrame)로 작성하시면 됩니다. procedure TfrmAANoteWN.FormCreate(Sender: TObject); begin FReseiverInfoFrame := nil; inherited; end; 3. 아레 오류가 나는 소스에서 pnReceiver 선언 부분이나, 인스턴스 할당 부분 코드 좀 알려주세요 Parent := pnReceiver;
  5. 1. 먼저 해당 프레임을 오른쪽 마우스를 누르시고 "Add to Pallete"에 등록하신 후에 설계시점에 팔레트에서 선택하새 한 번 사용해 보십시오. 2. 그리고 문제가 없으시다면 코드로 동적으로 하시는 부분에서 문제 없는 화면과 문제가 있는 화면의 dfm을 "view with text"로 확인하신다음 폼의 동일한 속성읭 값을 자세히 살펴보시기 바랍니다. 특히 ParentFont 속성등 3 차이점이 있으면 문제가 없는 화면의 속성값으로 수정해서 테스트 해보시 바랍니다. 결과를 알려주시기 바랍니다. 혹시 안되시면 해당 프레임소스와 해당화면 화면이 있는 프로젝트 소스를 보내주시면 한 번 보도록하겠습니다.
  6. 먼저 다른 컴에서도 프로그램을 실행해 보시는것도 방법입니다. 그래서 실행되는 컴과 환경을 비교해 보시는것도 좋습니다. 0. 디렉토리에서 해당 유니트가 있는지 확인합니다. 1. 유니트가 있다면 Library path를 확인해서 경로에 없는 경우에 추가합니다. 2.tools -> option -> "환경 옵션" -> 라이브러리 PATH가 있는 페이지에 Unit Scope항목에 "VCLTee" 가 추가되어 있는지 확인하시고 없으면 추가합니다. 해당하는 플랫폼 (32 or 64)을 각각 확인하시기 바랍니다. 예를들어 64비트 컴파일인데 32비트에만 옵션이 지정되어 있으면 안됩니다. 한번 테스트해보시고 결과 알려주시면 감사하겠습니다.
  7. GDS_DB에서 instance2로 바뀐것은 이전 인스턴스가 남아있기때문입니다. 위의 스크린샷을 보시면 INTERBASE2017과 XE7 두 버전이 다 설치된것 같습니다. 두 버전의 인터베이스를 각각 언인스톨 하십시오. 인터베이스를 언인스톨 하는 방법을 다시한번 저세히 적어보도록 하겠습니다. 그리고 컴퓨터에 FireBird도 설치되어 있으면 삭제해주세요 충돌이 생길수 있습니다. 문제: Windows InterBase를 수동으로 제거하고 싶습니다. 해결책: InterBase를 제거하려면 다음 단계가 필요합니다. 1A) 서비스 제거(로컬 InterBase가 NT 서비스로 실행되는 경우에만) a) instsvc 중지(서비스 중지) b) instsvc 제거(서비스 제거) 1B) 응용 프로그램으로 실행 중인 경우 서버 종료 a) 시스템 트레이에서 InterBase 아이콘을 마우스 오른쪽 버튼으로 클릭하고 서버 종료를 선택합니다. 2) 레지스트리 항목 삭제 [자동으로] -> instreg 제거 [수동으로[ -> 전체 InterBase 키 삭제: HKEY_LOCAL_MACHINE소프트웨어BorlandInterBase 3) 시스템에서 gds32.dll 삭제 로컬 InterBase의 경우 이 라이브러리는 windowssystem 디렉토리(win95)에 있습니다. 또는 winntsystem32 디렉토리(NT) 4) 모든 바로 가기 삭제(InterBase를 NT 서비스로 실행하지 않는 경우) a) NT 3.51에서 시작 그룹에서 InterBase 서버 아이콘을 삭제하는 경우 b) win95 또는 NT 4.0에서 InterBase의 Windows 시작을 위한 레지스트리 항목을 삭제하는 경우: HKEY_LOCAL_MACHINE소프트웨어MicrosoftWindowsCurrentVersionRun 5) 로컬 InterBase 디렉토리 삭제 위의 과정이 끝나시면 다시 인터베이스를 설치하십시오. 그리고 설치하실 인터베이스 버전을 반드시 확인하시고 재설치 해주시기 바랍니다.
  8. 아래의 링크에 비슷한 경우의 사례가 있습니다. https://groups.google.com/g/borland.public.interbase.general/c/d_9bPcZHznM 위의 있는 조치 사항을 번역하여 올립니다. 이 오류는 Interbase 라이선스 인증으로 인한 것입니다. 따라서 라이센스 관리자에서 볼 수 있더라도 인터베이스가 "등록되지 않음"이므로 연결이 닫힙니다. 이것은 두 개 이상의 인터베이스 설치 또는 일부 오래된 인터베이스/파이어버드가 부적절하게 제거되었을 때 발생할 수 있습니다. 혹시 파이어버드나 인터베이스가 기존에 설치되어 있는지 확인하십시오. 1. 모든 INTERBASE/FIREBIRD INTALS를 제거하고 레지스트리 항목과 설치 해제 후 남은 모든 디렉토리를 삭제합니다. 2. Interbase를 다시 설치합니다. 3. IBConsole에 등록된 localserver 및 이전 세션에 남아 있는 등록된 별칭을 삭제합니다.(THIS IS THE CLUE) 4. 로컬 서버 및 모든 데이터베이스에 다시 등록하십시오.(이것이 단서입니다) INTERBASE가 데스크탑 또는 서버인 경우 RAD STUDIO에 자체 라이선스 관리자가 있음을 유의하십시오(RAD STUDIO와 함께 제공되지 않음). 그런 다음 이 INTERBASE 제품에 대해 다른 라이선스 관리자를 갖도록 interbase에 기본 설치 디렉토리를 사용하지 않는 것이 좋습니다. 위와 같이 조치해보시고 결과를 다시 한번 올려주십시오.
  9. 보내는 Push Message 사이즈나 Character 수를 한번 체크해 보시기 바랍니다. 아래는 push 메세지의 Character 제한 사이즈를 ios, 안드로이드별로 정리한 자료입니다. https://clevertap.com/blog/what-are-push-notification-character-limits/ Apple 푸시 알림 서비스(APN)는 페이로드의 총 크기가 다음 제한을 초과하는 경우 알림을 거부합니다. VoIP(Voice over Internet Protocol) 알림의 경우 최대 페이로드 크기는 5KB(5120바이트)입니다. 다른 모든 원격 알림의 경우 최대 페이로드 크기는 4KB(4096바이트)입니다. 아래 링크에 자세한 내용을 참조하십시오. https://developer.apple.com/documentation/usernotificup_ations/setting_a_remote_notification_server/generating_a_remote_notification 테스트해보시고 결과를 알려주시기 바랍니다.
  10. 인디 FTP 컴포넌트가 이전 버전에서도 List 시용시 경우에 따라서 버그가 발생하는 경우가 있었습니다. https://forum.lazarus.freepascal.org/index.php?topic=51877.0 보내주신 아래 링크에 해결책이 표시되어 있습니다. 일단 TIdFTP.Passive 속성을 true로 설정하시고 테스트 해보십시오. https://github. /IndySockets/Indy/issues/377 테스트해보시고 결과를 알려주시면 같은 상황이신 분들에게 도움이 될것입니다.
  11. 아래 주소를 보시면 엣지브라우저에서 스크립트를 실행하여 html 소스를 구해오는 방법이 소개 되어 있습니다. https://www.devgear.co.kr/archives/4923 아래 예는 구한 HTML의 특정 Elenment에 값을 할당하는 예입니다. <input name="key1" id="passwordInput1" autocomplete="off" type="password"> document.getElementById("passwordInput1").value := 'mypass' 테스트 해보시고 결과를 댓글로 알려주시면 다른 분들에게도 도움이 될것입니다.
  12. TGridPanel은 델파이 2006 버전에서 처음 소개되었다. TGridPanel은 그리드 형태의 컨테이너로써 각 셀(cell) 안에 컴포넌트를 하나씩 넣어 배치할 수 있고 구조화되고 정돈된 화면을 구성하기에 좋다. 이에 DocWiki 번역과 사용법 동영상 등을 정리했다. 목차 DocWiki 번역: Vcl.ExtCtrls.TGridPanel 설명 기타 참조 (See Also) 사용법 동영상 TGridPanel을 동적으로 생성하려면 DocWiki 번역: Vcl.ExtCtrls.TGridPanel DocWiki에 있는 계층도, 프로퍼티 등 자세한 내용은 원문 링크 참조: https://docwiki.embarcadero.com/Libraries/en/Vcl.ExtCtrls.TGridPanel 설명 TGridPanel은 그리드(grid) 패널(panel) 컨트롤은 구현한 것으로써 그리드 안에 있는 각 셀(cell) 마다 컴포넌트를 하나씩 넣을 수 있다. TGridPanel을 폼 위에 놓아 두면 비어있는 그리드 패널이 하나 생긴다. 전통적인 패널(panel)과 그리그 패널의 차이점은 컨트롤이 배치되는 방식이다. 전통적인 패널 위에는 (버튼 등) 컨트롤을 원하는 위치를 지정하여 배치하기 때문에 마우스를 이용하여 패널 안에 어느 곳이든 원하는 곳에 배치할 수 있다. 하지만, 그리드(grid) 패널(panel)에서는 패널의 행과 열의 갯수를 먼저 명시한 후에 컨트롤을 추가한다. 추가되는 컨트롤은 각 셀(cell) 당 하나씩 순서대로 배치된다. 마우스를 사용해도 컨트롤이 배치되는 위치를 지정할 수는 없다. 그리드의 각 열과 행에는 원하는 정렬 방식을 지정할 수 있다. 오브젝트 인스펙터(Object Inspector)에서 해당 값을 지정하면 된다. 열과 행을 설정하는 올바른 방식은: TGridPanel에서 마우스 오른쪽을 클릭하고, "Disable Relayout" 선택 columns / rows width 값을 지정 TGridPanel에서 마우스 오른쪽을 클릭하고, "Enable Relayout" 선택 그리드 안에 있는 모든 셀(cell)에 각자 컨트롤을 가지고 있는 상태에서 그리드 패널에 컨트롤을 더 추가하는 경우도 있을 것이다. 이 경우 새 컨트롤의 위치는 ExpandStyle 프로퍼티에 의해 결정된다. 예를 들어, ExpandStyle 프로퍼티가 AddRows(기본값이다)로 지정되어 있는 경우, 그리드 안에 행이 하나 새로 추가되고, 그 행의 셀에 새 컨트롤이 들어간다. 기타 참조 (See Also) TPanel 기타 컨트롤(들) 사용법 동영상 위 동영상에서는 .dfm파일 (폼 화면 구성 소스가 담긴 파일)을 텍스트로 편집하는 방법, 원하는 셀에 컨트롤을 넣는 방법이 설명되어 있습니다. 잘 활용하면 생산성을 더욱 높일 수 있습니다. 예를 들어 100개 셀을 만들고 모든 셀에 TEdit을 넣기를 2-3분이면 충분히 끝낼 수 있습니다. TGridPanel을 동적으로 생성하려면 Quick Tip: Dynamically Add Rows, Columns and Controls to Delphi’s TGridPanel
  13. 위의 글만 보시고 혹시 폼을 패키지로 작성시 MDI Child 폼에서만 사용 한다고 생각 하시는 분들이 혹시 계실수 있어서 SDI(Single Document Interface)의 폼을 패키지로 작성하는 방법을 설명한 링크를 공유합니다. https://edn.embarcadero.com/article/27178 그리고 수정이 빈번이 일어나는 화면이나 공통 모듈 개발시 패키지로 개발할 것인지 DLL로 개발 할 것인지 고민하고 질문하시는 분들이 종종 있습니다. 아래 링크는 패키지와 DLL 방식의 장단점을 정리해본것 입니다. 둘 중 어느 방식으로 개발하는가는 업무 상황에 따라 그때 그때 달라집니다. https://tech.devgear.co.kr/index.php?mid=delphi_news&search_keyword=dll&search_target=title_content&page=2&document_srl=441181
  14. 델파이 버전 별 지원 OS가 표를 참고하세요. 아래 웹페이지에 있습니다. https://docwiki.embarcadero.com/PlatformStatus/en/Main_Page
  15. ibconsole에서 해당 데이터베이스가 연결이 되신다면 database > view metadata로 들어가셔서 아래와 같은 경로를 확인하실 수 있습니다. CREATE DATABASE '127.0.0.1/gds_db:E:\Book_SampleDB\SAMPLE.IB' USER 'SYSDBA' password 'Enter_Password_here' PAGE_SIZE 4096 여기에서 127.0.0.1/gds_db:를 복사해서 델파이의 DataExploer에서 인터베이스용 connection을 만들고 modify로 들어가서 데이터베이스 선택옵션에 127.0.0.1/gds_db:해당경로 설정하시어 연결되시는지 테스트 해보시기 바랍니다. 참고: 인터베이스의 인스턴스는 예를들면 gds_db 가 디폴트인데 다른 다른 인스턴스가 있을 수 있습니다.(인터베이스 설치 시 기존 인스턴스가 삭제가 제대로 안되어서..) serverManager에서도사용하시는 인스턴스만 start 시키시고 사용하십시오. 테스트해보시고 결과를 알려주시기 바랍니다.
×
×
  • Create New...

중요한 정보

이용약관 개인정보보호정책 이용규칙 이 사이트가 더 잘 작동하기 위해 방문자의 컴퓨터에 쿠키가 배치됩니다. 쿠키 설정 변경에서 원하는 설정을 할 수 있습니다. 변경하지 않으면 쿠키를 허용하는 것으로 이해합니다.