Delphi. Создаем билдер (builder)

В сети уже имеется инструкция по созданию билдера (builder) на Delphi, рассказывающая, как изменять код готовой программы. Там применяют поиск нужного текста в WinHex, высчитывание байтов и т.д. Я покажу, как всё сделать проще и быстрее. А раз быстрее, то сделаю еще и извлечение файла, который буду изменять, из программы-билдера.

Первым делом надо создать программу, код которой будем менять. Программа максимально простая: форма с меткой (Label). Метка — ссылка, по клике на нее в браузере будет открываться страница. Вот адрес этой страницы (а соответственно и отображение метки) будем менять.
Итак, код этой программы:

procedure TForm1.FormCreate(Sender: TObject);
var
 url:string;
 i:integer;
begin
 url:='????????????????????????';
 i:=length(url);
 while url[i]='?' do
  begin
   delete(url, length(url), 1);
   dec(i);
  end;

 Label1.caption:=url;
end;

procedure TForm1.Label1Click(Sender: TObject);
begin
 ShellExecute(0, 'open', PChar(Label1.caption), nil, nil, SW_SHOW);
end;

Переменная url имеет значение «много вопросительных знаков«, которое и нужно менять на нужную ссылку. Замечу, что длина строки url (количество знаков) должна быть не меньше длины ссылки, на которую мы будем менять.
Т.к. длина ссылки будет не больше установленной длины url (в данном случае — 24), то в конце останутся лишние вопросительные знаки, которые нужно обрезать, что и делает цикл while. После цикла отображаем в Label текст ссылки.
А по клику на Label открываем ссылку в браузере. Для использования ShellExecute необходимо вuses добавить модуль ShellApi.

Delphi builder

После создания и компилирования программы её нужно компилировать в ресурс. Для этого будет нужен файл brcc32.exe, который находится в каталоге bin каталога Delphi (его можно без проблем скопировать в любую удобную вам папку). А также файл со списком ресурсов (в данном случае одним ресурсом) с расширением «rc» (например, File.rc). Создаем такой файл и записываем в него:

FILE1 EXEFILE C:\Project1.exe

Где C:\Project1.exe — путь к первой скомпилированной программе.
Теперь компилируем. Либо в проводнике переносим файл File.rc на brcc32.exe, либо запускаем командную строку и выполняем команду: «brcc32 File.rc» (файл brcc32.exe конечно должен быть в текущем каталоге).
В результате в папке появится файл FILE.RES. Его переносим в новую папку, где будет наш проект билдера.

Теперь создаем непосредственно программу-билдер. На форму кидаем кнопку (Button), поле для ввода (Edit) и метку (Label).
После implementation добавляем строку:

{$R FILE.RES}

И код кнопки:

procedure TForm1.Button1Click(Sender: TObject);
var
 ResStream: TResourceStream;
 FileName, oldstring, newstring, s: string;
 f: file;
 l: Longint;
 go:boolean;
begin
 label1.caption:='wait';
 Application.ProcessMessages;
 FileName := 'pr.exe';
 
 ResStream:=TResourceStream.Create(HInstance,'FILE1','EXEFILE');
 ResStream.SaveToFile(ExtractFilePath(Application.ExeName)+FileName);
 ResStream.Free;

 oldstring := '????????????????????????';
 newstring := Edit1.Text; 
 s := oldstring;
 AssignFile(f, FileName);
 Reset(f, 2);
 l:=0;
 go:=true;
 while (l<=(FileSize(f) - Length(oldstring) - 1)) and go do
  begin   
   Seek(f, l);
   BlockRead(f, oldstring[1], Length(oldstring));
   if oldstring = s then
    begin
     seek(f, l);
     BlockWrite(f, newstring[1], Length(newstring));
     go:=false;
    end;
   inc(l);
  end;
 CloseFile(f);
 label1.caption:='ok';
end;

Немного комментариев:
— определяем имя создаваемого файла и присваиваем label1 значение «wait»
— распаковываем файл из ресурса и сохраняем под именем «pr.exe»
— «oldstring» — строка, которую ищем в созданном файле (она там точно есть)))
— «newstring» — строка, на которую заменяем знаки вопроса
— открываем файл как двоичный для записи в него (Reset(f, 2);) (одну запись определяем как два байта)
— в цикле считываем из файла байты (BlockRead) и при нахождении нужной строки записываем в это место новый текст (BlockWrite)
— закрываем файл и присваиваем label1 значение «ok«

Теперь запускаем билдер, вводим адрес, нажимаем кнопку.

Delphi builder

В результате получаем файл pr.exe:

Delphi builder

И по клике на метку, происходит переход по ссылке))

Комментариев 3 на “Delphi. Создаем билдер (builder)

Добавить комментарий