Какие это компоненты в Lazarus ?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
jsa
постоялец
Сообщения: 295
Зарегистрирован: 28.11.2017 12:46:04

Какие это компоненты в Lazarus ?

Сообщение jsa »

Здравствуйте.
Есть задача переписать с C++Builder6 программу на Lazarus
Имеется файл dfm и cpp
программа простейший rest сервер используются компоненты доступа к базе TADOConnection,TADOQuery и Indy - TIdHTTPServer

В dfm есть и такие компоненты

object NMURL1: TNMURL
Left = 72
end
object IdBase64Encoder1: TIdBase64Encoder
Left = 104
end
object IdBase64Decoder1: TIdBase64Decoder
Left = 136
end

1й вообще не понятно что это
2й и 3й - вроде должны быть в пакете Indy но не могу их там найти.

Подскажите пожалуйста чем заменить в Lazarus
DedFrend
постоялец
Сообщения: 157
Зарегистрирован: 25.11.2018 11:21:50

Сообщение DedFrend »

Я бы советовал сначала на Delphi перенести. Это все же проще будет.
TNMURL - компонента со страницы FastNet палитры, по-моему ставится вместе с Delphi 6.
TidBase64Encoder/Decoder - компоненты Indy со страницы Indy Misc
jsa
постоялец
Сообщения: 295
Зарегистрирован: 28.11.2017 12:46:04

Сообщение jsa »

На закладке Indy Misk Protokol Encoder/Decoder
Имеются компоненты
IdEncoderMIME (с числом 64 на иконке)
IdEncoderUUE
IdEncoderXXE
IdEncoderQuotedPrintable
IdMessageEncoderMIME
IdMessageEncoderYenc

С наименованием именно таким TidBase64Encoder отсутсвует
DedFrend
постоялец
Сообщения: 157
Зарегистрирован: 25.11.2018 11:21:50

Сообщение DedFrend »

IndyMisc.JPG
Вот как это выглядит у меня
У вас нет необходимых прав для просмотра вложений в этом сообщении.
jsa
постоялец
Сообщения: 295
Зарегистрирован: 28.11.2017 12:46:04

Сообщение jsa »

Какая версия Indy стоит?
DedFrend
постоялец
Сообщения: 157
Зарегистрирован: 25.11.2018 11:21:50

Сообщение DedFrend »

IndyAbout.JPG
Бог его знает. Он входит в состав Delphi6
Вот все что нашел
У вас нет необходимых прав для просмотра вложений в этом сообщении.
haword
постоялец
Сообщения: 301
Зарегистрирован: 02.03.2006 10:34:40

Сообщение haword »

есть Indy 9 и Indy 10, они не совместимы напрямую между собой. в последнем лазаре используется 10. а значит надо не копи-пасте делать а переделывать логику под работу indy 10.
jsa
постоялец
Сообщения: 295
Зарегистрирован: 28.11.2017 12:46:04

Сообщение jsa »

Я эти и занимаюсь, переделываю.
В общем нарыл текст функций.

Код: Выделить всё

unit unit_Base64;

{$mode objfpc}{$H+}

interface

uses  Classes, SysUtils;

function EncodeBase64(Value: String): String;
function DecodeBase64(Value: String): String;

implementation

const
 b64alphabet: PChar = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';

function EncodeBase64(Value: String): String;
const pad: PChar = '====';
  //------       
  function EncodeChunk(const Chunk: String): String;
  var
    W: LongWord;
    i, n: Byte;
  begin
    n := Length(Chunk); W := 0;
    for i := 0 to n - 1 do
      W := W + Ord(Chunk[i + 1]) shl ((2 - i) * 8);
    Result := b64alphabet[(W shr 18) and $3f] +
              b64alphabet[(W shr 12) and $3f] +
              b64alphabet[(W shr 06) and $3f] +
              b64alphabet[(W shr 00) and $3f];
    if n <> 3 then
      Result := Copy(Result, 0, n + 1) + Copy(pad, 0, 3 - n);   //add padding when out len isnt 24 bits
  end;
  //-------
begin
  Result := '';
  while Length(Value) > 0 do
  begin
    Result := Result + EncodeChunk(Copy(Value, 0, 3));
    Delete(Value, 1, 3);
  end;
end;

function DecodeBase64(Value: String): String;
  //-------
  function DecodeChunk(const Chunk: String): String;
  var
    W: LongWord;
    i: Byte;
  begin
    W := 0; Result := '';
    for i := 1 to 4 do
      if Pos(Chunk[i], b64alphabet) <> 0 then
        W := W + Word((Pos(Chunk[i], b64alphabet) - 1)) shl ((4 - i) * 6);
    for i := 1 to 3 do
      Result := Result + Chr(W shr ((3 - i) * 8) and $ff);
  end;
  //-------
begin
  Result := '';
  if Length(Value) mod 4 <> 0 then Exit;
  while Length(Value) > 0 do
  begin
    Result := Result + DecodeChunk(Copy(Value, 0, 4));
    Delete(Value, 1, 4);
  end;
end;

end.
Аватара пользователя
alexs
долгожитель
Сообщения: 4069
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

Для кодиравания Base64 лучше использовать штатные функции FPC. Модуль так и называется - base64.
jsa
постоялец
Сообщения: 295
Зарегистрирован: 28.11.2017 12:46:04

Сообщение jsa »

Спасибо.
Ответить