powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Lazarus
25 сообщений из 314, страница 7 из 13
Lazarus
    #39878519
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
{$mode delphiunicode}
...
Рейтинг: 0 / 0
Lazarus
    #39878527
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
program Test1;

{$mode delphiunicode}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  Classes,
  SysUtils,
  graphtype,
  intfgraphics,
  lazcanvas,
  fpimage,
  fpcanvas,
  types
  { you can add units after this };

var
  RawImage : TRawImage;
  Img      : TLazIntfImage;
  CV       : TLazCanvas;
begin
  try
    RawImage.Init;
    RawImage.Description.Init_BPP32_A8R8G8B8_BIO_TTB(1280, 1024);
    RawImage.CreateData(True);

    Img:=TLazIntfImage.Create(0,0);
    try
      Img.SetRawImage(RawImage);
      CV:=TLazCanvas.Create(img);
      try
        CV.TextOut(100,100,'Text');  // Error: Not availlable


?!
...
Рейтинг: 0 / 0
Lazarus
    #39878532
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

{$mode delphiunicode}

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
function TNode.NormalizedName: String;
var
  i : integer;
begin
  Result:=Name;
  if length(Result)>0 then begin
    Result:=AnsiLowerCase(Result);
    Result[1]:=AnsiUpperCase(Result[1])[1];
    for i:=1 to length(Result) do begin
      if Result[i]='i' then Result[i]:='I';
      if (i>1) and (Result[i-1]='-') then Result[i]:=AnsiUpperCase(Result[i])[1];
    end;
  end;
end;



Код: pascal
1.
2.
WriteLn(Core.Nodes[1].Name);
WriteLn(Core.Nodes[1].NormalizedName);


Выводит:

Код: plaintext
1.
МОСКВА-П-КУР
?осква-?-?ур

Подсовываю обертку AnsiUpperCase - все норм.
...
Рейтинг: 0 / 0
Lazarus
    #39878535
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код корявенький, конечно, но я его почти 20 лет назад такой написал. :)
...
Рейтинг: 0 / 0
Lazarus
    #39878539
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatПодсовываю обертку AnsiUpperCase - все норм.
Этот код должен выглядеть так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
type

  RTLString = AnsiString;

function NormalizedName(const Name : string): String;
var
  i : integer;
begin
  Result:=Name;
  if length(Result)>0 then begin
    Result:=string(AnsiLowerCase(RTLString(Result)));
    Result[1]:=string(AnsiUpperCase(RTLString(Result[1])))[1];
    for i:=1 to length(Result) do begin
      if Result[i]='i' then Result[i]:='I';
      if (i>1) and (Result[i-1]='-') then Result[i]:=string(AnsiUpperCase(RTLString(Result[i])))[1];
    end;
  end;
end;


Псевдоним типа исключительно для того, чтобы потом, когда RTL станет полностью UTF-16, заменить AnsiString на UnicodeString;
...
Рейтинг: 0 / 0
Lazarus
    #39878541
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. вот так?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
type
  RTLString = AnsiString;

function AnsiUpperCase(Text: string): string;
begin
  Result:=string(SysUtils.AnsiLowerCase(RTLString(Text)));
end;

function AnsiLowerCase(Text: string): string;
begin
  Result:=string(SysUtils.AnsiLowerCase(RTLString(Text)));
end;
...
Рейтинг: 0 / 0
Lazarus
    #39878543
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чем UTF8Decode/UTF8Encode не катят?
...
Рейтинг: 0 / 0
Lazarus
    #39878545
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, "когда RTL станет полностью UTF-16" RTLString да и вообще эти костыли не понадобятся.
...
Рейтинг: 0 / 0
Lazarus
    #39878546
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatТ.е. вот так?
Можно и так, да.

rgreatА чем UTF8Decode/UTF8Encode не катят?
Ну если хочется потом это ещё раз переписать, можно и их использовать. Просто, когда в RTL будут дефолтные строки utf-16, цена тайп-каста станет нулевой, а ручное конвертирование будет продолжать делать уже ненужную работу.
...
Рейтинг: 0 / 0
Lazarus
    #39878547
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда RTL будут дефолтные строки utf-16 это все вообще не понадобиться.

И уж лучше тогда сделать хуки на RTL функции. Так можно будет основной код не трогать.
--------
По TextOut не подскажешь?
Как включить у TLazIntfImage/TLazCanvas поддержку текста?
...
Рейтинг: 0 / 0
Lazarus
    #39878549
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,

Можно вообще пользоваться функциями TCharacter, например TCharacter.ToUpper();

rgreatПо TextOut не подскажешь?
NotImplemented;
...
Рейтинг: 0 / 0
Lazarus
    #39878552
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev AlexeyNotImplemented;Привет, приехали. (с)

Нафига нужен канвас в котором нет вывода текста?!

Блин, ну ты и диверсант! Зачем ты мне его посоветовал?
Я уже неделю код под него адаптирую!
...
Рейтинг: 0 / 0
Lazarus
    #39878553
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatБлин, ну ты и диверсант! Зачем ты мне его посоветовал?
Ты не говорил, что тебе текст будет нужен. Впрочем, я всё равно не знал, что там оно не реализовано.

Тебе же, наверняка, просто подписи простенькие нужны? Сделай алфавит из картинок и всё :)
...
Рейтинг: 0 / 0
Lazarus
    #39878554
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev AlexeyТебе же, наверняка, просто подписи простенькие нужны? Сделай алфавит из картинок и всё :)
Как бы нет. У меня рендер картографии. ;)

Но я вот тут некие костыли нашел:
https://wiki.lazarus.freepascal.org/fcl-image#Drawing_text
...
Рейтинг: 0 / 0
Lazarus
    #39878555
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,

Я нашёл пример к этому пакету:
https://github.com/graemeg/freepascal/blob/master/packages/fcl-image/examples/textout.pp
...
Рейтинг: 0 / 0
Lazarus
    #39880133
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то у меня не выходит приделать перегрузку операторов.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
type
  TColor = Cardinal;

  operator := (R: TFPColor)L: TColor; // Fatal: Syntax error, "=" expected but ":=" found

implementation

operator:=(R: TFPColor)L: TColor;
begin
  L:=(R.Alpha shr 8) shl 24+
     (R.Red shr 8) shl 16 +
     (R.Green shr 8) shl 8+
     (R.Blue shr 8) ;
end;


Как?
...
Рейтинг: 0 / 0
Lazarus
    #39880135
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавлял, удалалял {$mode delphiunicode} - не помогает.
...
Рейтинг: 0 / 0
Lazarus
    #39880136
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatЧто-то у меня не выходит приделать перегрузку операторов.
Как?
А справку почитать?
Delphi allows certain functions, or "operators", to be overloaded within record declarations .
...
Рейтинг: 0 / 0
Lazarus
    #39880137
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp,

А, блин, туплю, это FPC :)
...
Рейтинг: 0 / 0
Lazarus
    #39880138
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,

Код: pascal
1.
2.
3.
4.
operator := (const fpcolor : TFPColor) : TColor; inline;
begin
 result := FPColorToTColor(fpcolor);
end;


Но такой синтаксис только для диалекта {$mode objfpc}, если выбираешь диалект дельфей то и синтаксис должен быть дельфийским.
...
Рейтинг: 0 / 0
Lazarus
    #39880141
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, разобрался.

Как бы прикрутить implicit автоперекодировку из TFPColor в cardinal, если TFPColor - рекорд в другом модуле, а в текущем модуле - $Mode Delphi ?
...
Рейтинг: 0 / 0
Lazarus
    #39880144
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,

Полагаю, можно вынести оператор в другой модуль с диалектом fpc и подключать в требуемом.
...
Рейтинг: 0 / 0
Lazarus
    #39880146
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прикольные игры с диалектами паскаля в одном проекте. :)
...
Рейтинг: 0 / 0
Lazarus
    #39880150
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,

Почему нет, у fpc, кстати, ещё и тайп-хелперы множественные допускаются.
...
Рейтинг: 0 / 0
Lazarus
    #39880178
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

Ну я тут внезапно выяснил что в дельфях тоже можно несколько хелперов иметь.
Родив наследника.
...
Рейтинг: 0 / 0
25 сообщений из 314, страница 7 из 13
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Lazarus
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]