::: 델파이 Tip&Trick :::

델파이 Tip&Trick 성격에 맞지 않는 광고,비방,질문의 글은 즉시 삭제하며
내용을 복사하여 사용할 경우 반드시 이곳(http://www.howto.pe.kr)을 출처로 명시하여 주세요


Category

  김영대(2004-08-17 15:51:51, Hit : 5018, Vote : 1340
 http://www.howto.pe.kr
 실행파일에서 잃어버린 DFM 파일 뽑아내기

// 델파이로 프로그램 작성하다 dfm 파일 삭제하여 다시 만든 경헙이 있다면
// 한번 사용해 보세요

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Button2: TButton;
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

type
  TDFMorTXT = (ConvertToForm, ConvertToText);

var
  Form1: TForm1;

implementation

{$R *.dfm}

function ConvertFormOrText(FileToConvertFrom: string;
                           ConversionType: TDFMorTXT): boolean;
var
  InputStream, OutputStream: TFileStream;
  FileToConvertTo: string;
begin
  Result := True;
  FileToConvertTo := FileToConvertFrom;

  {파일의 확장자를 변환하는 방법에 따라 바꾼다}
  case ConversionType of
    ConvertToForm: {TXT -> DFM}
      begin
        FileToConvertFrom := SysUtils.ChangeFileExt(FileToConvertFrom, '.TXT');
        FileToConvertTo   := SysUtils.ChangeFileExt(FileToConvertFrom, '.DFM');
      end;
    ConvertToText: {DFM -> TXT}
      begin
        FileToConvertFrom := SysUtils.ChangeFileExt(FileToConvertFrom, '.DFM');
        FileToConvertTo   := SysUtils.ChangeFileExt(FileToConvertFrom, '.TXT');
      end;
  end;

  try
    try
      {file stream 을 만든다}
      InputStream  := TFileStream.Create(FileToConvertFrom, fmOpenRead); {읽기용}
      OutputStream := TFileStream.Create(FileToConvertTo, fmCreate); {쓰기용}

      {변환}
      case ConversionType of
        ConvertToForm: ObjectTextToResource(InputStream, OutputStream);
        ConvertToText: ObjectResourceToText(InputStream, OutputStream);
      end;
    except
      on EStreamError do
        Result := False;
    end;
  finally
    InputStream.Free;
    OutputStream.Free;
  end;
end;

function ExtractDFM(ApplicationName, FormClassName: string): string;
var
  AppHandle: THandle;
  ResStream: TResourceStream;
  ResultStream: TStringStream;
begin
  Result := '';
  AppHandle := LoadLibraryEx(PChar(ApplicationName), 0, LOAD_LIBRARY_AS_DATAFILE);
  if AppHandle = 0 then
    raise Exception.Create('Could not load application');
  ResStream := nil;
  ResultStream := nil;
  try
    ResStream := TResourceStream.Create(AppHandle, FormClassName, RT_RCDATA);
    ResultStream := TStringStream.Create('');
    ObjectBinaryToText(ResStream, ResultStream);
    Result := ResultStream.DataString;
  finally
    ResultStream.Free;
    ResStream.Free;
    FreeLibrary(AppHandle);
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  // 실행파일에서 TForm1 을 TXT 형태로 뽑아내기
  Memo1.Text := ExtractDFM('Project1.exe', 'TForm1');
  Memo1.Lines.SaveToFile('ExtractedForm.txt');

  // TXT -> DFM 변환
  ConvertFormOrText('ExtractedForm.txt', ConvertToForm);
end;

end.





731   [시스템] 오직 하나의 프로그램만 실행...  김영대 2003/03/04 5028 1354
730   [윈도우즈 API] 윈도우즈 재부팅하고 프로그램 실행하기  김영대 2003/03/04 4241 1353
729   [윈도우즈 API] 델파이에서 시간을 기다리는 함수  김영대 2003/03/04 5905 1353
728   [윈도우즈 API] TaskBar의 다양한 기능제어  김영대 2003/03/07 5001 1352
727   [시스템] 파일(들)을 클립보드로 복사하여 탐색기에서 붙여넣기 하기  김영대 2003/04/10 5314 1350
726   [일반/컴포넌트] StringGrid - multiline text  김영대 2003/03/07 5793 1350
725   [일반/컴포넌트] Search and Select  김영대 2004/08/03 5161 1349
724   [윈도우즈 API] 바탕화면의 모든 창 최소화하기  김영대 2006/02/28 5592 1348
723   [일반/컴포넌트] 리스트뷰에서 동적으로 칼럼삭제하기  김영대 2003/03/05 5011 1348
722   [시스템] Windows NT 에서 한글 NT인지 영문 NT인지 구분하는 방법  김영대 2003/03/04 5162 1348
721   [일반/컴포넌트] TStringGrid 인쇄하기  김영대 2003/03/07 5427 1347
720   [COM/OLE] 윈도우즈 "검색: 파일 또는 폴더" 화면  김영대 2004/07/25 4834 1346
719   [시스템] 내 프로그램의 실행 우선순의 바꾸기  김영대 2004/07/24 4954 1345
718   [COM/OLE] TWebBrowser 에서 새창을 열때 cookie 공유되게 하기  김영대 2004/11/24 6614 1344
717   [시스템] DOS 명령어 실행하고 결과 받아오기 (Win2k,XP)  김영대 2004/08/03 5615 1342
716   [일반/컴포넌트] 문자열의 암호화(Password 처리) & INI 파일  김영대 2003/03/06 5884 1342
715   [일반/컴포넌트] 폼에 자석효과 주기 (Delphi 6 이하)  김영대 2005/08/04 6389 1341
714   [일반/컴포넌트] 투명한 Bitmaps 인쇄  김영대 2003/03/07 5738 1341
713   [데이터베이스] Save DBGrid To Excel  김영대 2003/03/06 6056 1341
  [일반/컴포넌트] 실행파일에서 잃어버린 DFM 파일 뽑아내기  김영대 2004/08/17 5018 1340
711   [시스템] CD-ROM 문 열기/닫기  김영대 2003/03/04 4742 1340
710   [윈도우즈 API] 세로 타이틀바 만들기  김영대 2004/08/04 4904 1338
709   [데이터베이스] DB그리드 Row Height를 조절할 수 있는 콤포넌트  김영대 2003/03/05 5864 1337
708   [시스템] IP address 바꾸기  김영대 2003/03/07 5378 1336
707   [시스템] System, User, GDI Resource  김영대 2003/03/07 4599 1334
706   [윈도우즈 API] 프린터 스풀러에 대기중인 job의 수  김영대 2003/03/04 4547 1334
705   [네트웍/인터넷] Internet에 연결중인지 여부를 알려면...  김영대 2003/03/04 5183 1334
704   [COM/OLE] TWebBrowser에 직접 HTML 소스코드 넣기  김영대 2004/12/26 6437 1333
703   [시스템] 조합중인 한글 얻기  김영대 2004/09/06 6019 1333
702   [일반/컴포넌트] DateTimePicker 의 표시형식(format) 바꾸기  김영대 2003/03/04 6224 1333
701   [시스템] 윈도우즈 사용자 계정 정보 구하기  김영대 2004/08/03 5163 1332
700   [일반/컴포넌트] StringGrid의 중간에 제목 Cell 두기  김영대 2003/03/07 5286 1332
699   [시스템] Sleep 중에도 타이머 이벤트 발생시키기  김영대 2004/08/09 5752 1331
698   [윈도우즈 API] 윈도우즈 탐색기와의 연동  김영대 2003/03/04 5522 1331
697   [시스템] PrintScreen 키가 눌렸는지 검사하기  김영대 2003/03/04 4281 1330
696   [윈도우즈 API] 폼의 최대/최소화 막기  김영대 2003/03/06 4952 1329
695   [윈도우즈 API] 키보드의 임의키 발생  김영대 2003/03/04 5231 1329
694   [윈도우즈 API] 도구모음 Bar는 어떻게 만드는지...  김영대 2003/03/04 4702 1328
693   [시스템] 프린터의 "용지 공급" 리스트 구하기  김영대 2003/03/07 4626 1327
692   [일반/컴포넌트] WMF 를 BMP 로 변환하기  김영대 2003/03/07 4325 1326

[1][2][3][4][5][6] 7 [8][9][10]..[25] [다음 10개]
 

Copyright 1999-2020 Zeroboard / skin by zero