Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4 5 6 7   вперед  Ctrl      все
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
GunSmoker
Member

Откуда:
Сообщений: 3210
Вот что не сработает - так это константы в коде:
ShowMessage('Песик');

здесь 'Песик' хранится как AnsiString со всеми вытекающими...
7 апр 21, 17:52    [22305592]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 52921

GunSmoker
всё прекрасно показалось, как и ожидалось.

Теперь осталось понять какой именно из навороченных аффтаршей костылей усекает значение по
байтам вместо символов.

Posted via ActualForum NNTP Server 1.5

7 апр 21, 17:55    [22305595]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
Анна Петровна
Member

Откуда:
Сообщений: 68
GunSmoker,

В Button - да, в этом случае всё нормально отображается.
А если задать "Пёсик" в Edit (в свойствах формы) - тогда Edit отображается с крякозябрами.
Как оказывается, там 6 символов вместо 5. Если записать значение Edit.Text в файл - то файл будет 6 байт, при открытии в FAR в кодировке 65001 покажет "Пёс".

Сообщение было отредактировано: 7 апр 21, 17:59
7 апр 21, 18:05    [22305602]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
Анна Петровна
Member

Откуда:
Сообщений: 68
В свойствах на форме задаём (Delphi 7):

Edit1.Text = Пёсик

object Edit1: TEdit
Left = 8
Top = 16
Width = 121
Height = 21
TabOrder = 0
Text = #1055#1105#1089#1080#1082
end

Далее запускаем программу, в FormActivate выполняем

System.Assign(f, 'c:\temp\15.txt');
System.Rewrite(f);
System.Write(f, Edit1.Text);
System.Close(f);

каким-то магическим образом в 15.txt оказывается 6 символов вместо 5:

#208 #159 #209 #145 #209 #129

Если в FAR установить кодировку UTF-8 то будет

Пёс

Но вопрос этот решаемый. Как я понимаю - надо перекодировать значение до вызова OnActivate тогда всё будет нормально, без потери данных.
7 апр 21, 18:13    [22305608]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
Анна Петровна
Member

Откуда:
Сообщений: 68
GunSmoker,

ShowMessage('Песик');

- ну тут как раз всё просто - перекодируем в UTF-8 и выводим. Переписывать код не придется - достаточно в конце секции USES подключить свой модуль с правильным ShowMessage - который перекодирует данные перед выводом. Или отказываемся от ShowMessage, используем MessageBoxW.
7 апр 21, 18:18    [22305613]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 52921

Анна Петровна
каким-то магическим образом в 15.txt оказывается 6 символов вместо 5:

Магии никакой нет. Какой-то из ваших "перехватчиков" свойств и/или сообщений обрезал
строку по пути.

Posted via ActualForum NNTP Server 1.5

7 апр 21, 18:22    [22305616]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
Анна Петровна
Member

Откуда:
Сообщений: 68
Dimitry Sibiryakov,

Такое поведение - вообще если создать новый чистый проект без каких либо перехватчиков. С Button всё нормально как и пишет GunSmoker. А с Edit как-то по-другому получается, значение портится, вместо 5 байт получается 6 и "Пёсик" обрезается до "Пёс" - правда, становится 6 байт вместо 5.



DFM:
##################################
object Form1: TForm1
  Left = 445
  Top = 277
  Width = 265
  Height = 214
  Caption = 'Form1'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object Edit1: TEdit
    Left = 8
    Top = 16
    Width = 121
    Height = 21
    TabOrder = 0
    Text = #1055#1105#1089#1080#1082
  end
  object Button1: TButton
    Left = 8
    Top = 40
    Width = 121
    Height = 25
    Caption = #1055#1105#1089#1080#1082
    TabOrder = 1
    OnClick = Button1Click
  end
end
##################################
 
 
 
Unit1:
##################################
unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
  public
  end;
var
   Form1: TForm1;
implementation
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
var
   f: System.Text;
begin
   System.Assign(f, 'c:\temp\15.txt'); //тут будет "Пёс" из 6 байт если запускать на Win-10 с обсуждаемой опцией
   System.Rewrite(f);
   System.Write(f, Edit1.Text);
   System.Close(f);
end;
 
end.
##################################
7 апр 21, 18:31    [22305626]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
GunSmoker
Member

Откуда:
Сообщений: 3210
В случае с TEdit.Text свойство Delphi хранит как AnsiString и его чтение выполняется функцией:
function TReader.ReadString: string;
var
  L: Integer;
begin
  if NextValue in [vaWString, vaUTF8String] then
    Result := ReadWideString
  else
  begin
    L := 0;
    case ReadValue of
      vaString:
        Read(L, SizeOf(Byte));
      vaLString:
        Read(L, SizeOf(Integer));
    else
      PropValueError;
    end;
    SetLength(Result, L);
    Read(Pointer(Result)^, L);
  end;
end;

Разумеется, это работать не будет.

Интересно, что и Caption у TButton, и Text у TEdit - это свойства TControl типа TCaption. Разницы между ними я не вижу.
7 апр 21, 18:52    [22305637]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
GunSmoker
Member

Откуда:
Сообщений: 3210
Анна Петровна
ну тут как раз всё просто - перекодируем в UTF-8 и выводим. Переписывать код не придется - достаточно в конце секции USES подключить свой модуль с правильным ShowMessage - который перекодирует данные перед выводом. Или отказываемся от ShowMessage, используем MessageBoxW.


Т.е. вы готовы весь код перелопатить, понавставлять всюду костылей? Это же ведь не только ShowMessage, а вообще любое использование строковых не-ASCII литералов в коде.

Я вот из личного опыта скажу: перейти на Unicode это в несколько раз проще, чем расставлять везде костыли.
7 апр 21, 18:54    [22305639]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
GunSmoker
Member

Откуда:
Сообщений: 3210
Давайте просуммируем:
1. Чтобы программа могла работать с GetACP = UTF8, в идеале исходники её строк должны быть UTF8 или UTF16. В не идеале - ANSI + перекодировка. В последнем случае придётся добавлять код перекодировки. В некоторых случаях (типа загрузки формы или 3rd party code) - он может быть весьма нетривиальным.
2. Изменить GetACP только для своей программы "чисто" не получится. Это глобальная настройка системы - не зря она просит полный перезапуск после её изменения. Хотя вот тут описывается настройка манифеста - надо проверить.
3. Можете попробовать хаки типа Microsoft AppLocale или Locale Emulator. Но надо понимать, что это хаки. Программа, использующая их, может перестать работать в будущем.
4. Менять глобальную настройку (опцию системы) для решения локальной проблемы (ваши проблемы с кодировкой) - путь в ад.

Итого, я вижу два варианта нормального решения:
1. Обновиться на Unicode.
2. При установке проверять, если GetACP = UTF-8, выводить предупреждение пользователю, что программа работать так не сможет и предложить это исправить. Исправлять без согласия пользователя - низзя.
7 апр 21, 19:16    [22305649]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
avp_
Member

Откуда:
Сообщений: 100
Что разве MS сделали по дефлоту включенным UTF-8 ?
7 апр 21, 20:22    [22305676]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 682
В принципе, Д7 можно подсунуть исходники в utf8. Ей должно быть пофиг на содержимое литералов. Обратная совместимость с ansi софтом - имхо, чуть ли не главная фишка данной кодировки

Сообщение было отредактировано: 7 апр 21, 20:32
7 апр 21, 20:38    [22305684]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
s62
Member

Откуда: Жуковский
Сообщений: 1299
GunSmoker

Итого, я вижу два варианта нормального решения:
1. Обновиться на Unicode.
2. ...

+
7 апр 21, 21:05    [22305696]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 2520
Могу добавить, что "десятки тысяч строк кода" - это копейки. В любой серьёзной библиотеке их сотни тысяч, а то и миллионы.
7 апр 21, 22:34    [22305714]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
crossa
Member

Откуда:
Сообщений: 90
Если опция включена в региональных настройках Windows, множество старого софта перестанет нормально работать. Рекомендую добавить информацию в раздел "Часто задаваемые вопросы", если есть такой на сайте Вашего программного продукта (как сделано здесь, например). Это и будет разумным решением проблемы (и авторам других старых программ поможет).

А самовольно менять системные настройки чужой операционной системы - что-то как-то не есть хорошо.

P.S. В сети встречаются сообщения о проблемах с включенной опцией: "Problem: ArcGIS Pro crashes or experiences character encoding issues when the ‘Beta: Use Unicode UTF-8 for worldwide language support’ region setting is enabled on Windows 10".

Сообщение было отредактировано: 8 апр 21, 01:50
8 апр 21, 01:52    [22305756]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
Анна Петровна
Member

Откуда:
Сообщений: 68
GunSmoker,

>Я вот из личного опыта скажу: перейти на Unicode это в несколько раз проще, чем расставлять везде костыли.

Да - правильнее всего, конечно, будет перейтти на D2010. Но и в пользу костылей есть некоторые аргументы.

К счастью, не у всех пользователей включена по умолчанию опция

"Бета-версия: Использовать Юникод (UTC-8) для поддержки языка во всем мире"

поэтому вставка костылей не повлияет на стабильность работы отлаженного ПО у 90% пользователей - у кого эта опция по умолчанию отключена ничего не изменится и всё останется как было. А у тех, у кого опция включена - да, будут ловить баги (но постепенно, с расстановкой костылей количество багов будет уменьшаться).

А вот при переходе на Delphi 2010 изменения затронут сразу 100% пользователей. И придется вести две версии - стабильную на D7 и тестовую на D2010. Поэтому и пугает так переход на D2010.

Хотя я понимаю, что это всё равно неизбежно - и чем дальше тем труднее будет перейти, тк количество кода, хаков и прочего в программе растёт, а у D7 и так понятно, что нет будущего (например, опасаюсь, что рано или поздно Microsoft вообще откажется от поддержки 32-битного кода как недавно сделала Apple и это поставит окончательную точку в использовании D7). Всякие TntComponents использовать не хочется - т. к. опасаюсь, что это ещё больше затруднит слезание с D7 в будущем.

Поэтому, наверное, расставить временно костыли и готовить проект к переходу на D2010 раз уже такие сложности с переходом сразу на XE8/XE10. Надеюсь, D2010 - правильный выбор - т. к. это наиболее ранняя из версий с поддержкой Unicode и разницы с D7 у неё должно быть меньше, чем в случае скажем с XE2, XE8 или XE10. Есть, конечно еще D2009 - но судя по всему, D2010 это та же 2009 только меньше глюков.

А вы не знаете случайно - как запретить компилятору в редакторе кода портить секцию USES? Если в начале каждого модуля формы уже прописано

USES {$I AllVcl.pas}
а в файле AllVcl.pas - список всех модулей, которые могут потребоваться и незачем туда что-то добавлять

но при сохранении и при запуске программы D2010 (кстати, XE2 и XE8 тоже эти страдают) зачем-то добавляет
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;

и получается каша вида

uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;
USES {$I AllVcl.pas}

которая разумеется, не компилируется. D7 так не делает - а при разработке проекта не задумывалась что потом такие проблемы с переходом на новые версии Delphi возникнут. Неужели в новых версиях Delphi нельзя делать USES сразу всех нужных модулей, подгружая список из файла, а необходимо через запятую перечислять в USES каждого модуля? Но ведь там 10 строк в списке модулей может быть и это очень неудобно - например, если потребуется какой-либо модуль добавить в USES сразу всех форм программы ...
8 апр 21, 02:16    [22305760]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
Анна Петровна
Member

Откуда:
Сообщений: 68
avp_
Что разве MS сделали по дефлоту включенным UTF-8 ?


Боюсь, что сделают рано или поздно. Более того, могут подобно Apple вообще отказаться от поддержки 32-разрядного кода. Как подумаю об этом, холодный пот пробирает ...
8 апр 21, 02:19    [22305761]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 682
Анна Петровна

Поэтому, наверное, расставить временно костыли и готовить проект к переходу на D2010 раз уже такие сложности с переходом сразу на XE8/XE10. Надеюсь, D2010 - правильный выбор - т. к. это наиболее ранняя из версий с поддержкой Unicode и разницы с D7 у неё должно быть меньше, чем в случае скажем с XE2, XE8 или XE10. Есть, конечно еще D2009 - но судя по всему, D2010 это та же 2009 только меньше глюков.

XE2 не сильно отличается, зато поновее. Хотя и на 2010 сидел долгое время, тоже неплохая версия.


автор
А вы не знаете случайно - как запретить компилятору в редакторе кода портить секцию USES?

Так добавь в модули форм всю стандартную требуху, которую среда хочет (uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs), а потом следующей строкой вставляй свои добавочные USES {$I AllVcl.pas}. Должно сработать.
Ну и в целом эта практика какая-то нехорошая. Если требуется добавлять модуль - значит, в коде что-то начинает его использовать, значит, все равно код меняется.
8 апр 21, 10:32    [22305844]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
Анна Петровна
Member

Откуда:
Сообщений: 68
Fr0sT-Brutal

Так добавь в модули форм всю стандартную требуху, которую среда хочет (uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs), а потом следующей строкой вставляй свои добавочные USES {$I AllVcl.pas}. Должно сработать.
Ну и в целом эта практика какая-то нехорошая. Если требуется добавлять модуль - значит, в коде что-то начинает его использовать, значит, все равно код меняется.


Так проблема в том, что среда добавляет требуху - но не всё, что у меня прописано в AllVcl.pas, а только ту требуху, которую захочет, в зависимости от того, какие компоненты на данной форме. А в у меня AllVcl.pas прописаны все модули VCL, которые могут потребоваться (а еще IB.pas, shellapi.pas, ComObj.pas и прочее).

И после AllVcl.pas у меня следом идёт MyUnits.pas - то есть

USES {$I AllVcl.pas}, {$I MyUnits.pas};

в котором перечислены мои модули - функционал которых во многом базируется на AllVcl.pas. И если вместо AllVcl.pas использовать требуху, которую вставляет Delphi - мои модули перестанут работать - если Delphi вставит не всё, что нужно - а он как правило вставит не всё - а только то, что ему нужно. И ещё ситуация - если в AllVcl.pas надо будет добавить новый модуль - это делается простой правкой файла AllVcl.pas - а не надо будет лазить по всем модулям и добавлять.

Проблема в том, что если разрешить вставлять Delphi требуху - вроде

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

а потом дописывать чтобы было

uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, {$I AllVcl.pas}, {$I MyUnits.pas};

то при компиляции Delphi будет ругаться identifier redeclared. То есть требуха, которую добавляет Delphi - пересекается с той, что у меня в AllVcl.pas, а AllVcl.pas убирать нельзя, так как на нем базируется MyUnits.pas. В этом и проблема. Если бы D2010 не трогал секцию USES как D7 всё было бы нормально.

Сообщение было отредактировано: 8 апр 21, 12:00
8 апр 21, 12:06    [22305886]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
Анна Петровна
Member

Откуда:
Сообщений: 68
Fr0sT-Brutal

XE2 не сильно отличается, зато поновее. Хотя и на 2010 сидел долгое время, тоже неплохая версия.


На 2010 в комплекте есть исходники VCL? Очень нужно чтобы перенести костыли с 7 на 2010. У меня в комплекте с 2010 только dcu. Подозреваю, Embarcadero в 2010 закрыла исходный код VCL, распространяя только DCU. В XE2, XE8, XE10 - кстати исходники есть, как и в 7. А вот в 2010 нет. Вот теперь и думаю, или это целенаправленная политика Embarcadero в 2010 (от которой они потом отказались) или это просто у меня кривая 2010.

Хочется именно 2010, а не XE2 - чтобы изменения были минимальными, а в XE2 уже добавились новые фишки в сравнении с 2010 - вроде USES Vcl.Classes вместо USES Classes и прочее - что создаст дополнительный геморрой при переходе - а переход на Unicode сам по себе уже и так не сахар зачем еще дополнительный геморрой. А уж потом - обжившись на 2010 - переходить сразу на XE10.
8 апр 21, 12:14    [22305887]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
Анна Петровна
Member

Откуда:
Сообщений: 68
[quot GunSmoker#22305639]
Анна Петровна
ну тут как раз всё просто - перекодируем в UTF-8 и выводим. Т.е. вы готовы весь код перелопатить, понавставлять всюду костылей? Это же ведь не только ShowMessage, а вообще любое использование строковых не-ASCII литералов в коде.


Не так уж и много костылей получается. Т. к. в конце каждого модуля у меня подключен список моих модулей

{$I MyUnits.pas}

Там можно и прописать новый вариант ShowMessage и прочего, что перекроет стандартные методы.
Это удобно с одной стороны - а с другой стороны - мешает переходу на новые версии Delphi.
8 апр 21, 12:18    [22305888]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
avp_
Member

Откуда:
Сообщений: 100
Анна Петровна

Боюсь, что сделают рано или поздно. Более того, могут подобно Apple вообще отказаться от поддержки 32-разрядного кода. Как подумаю об этом, холодный пот пробирает ...

Откажутся вряд ли, но вот усложнить жизнь всякими мелкими пакостями вполне смогут.

Пока стоит сделать юзеру предупреждение при старте программы, что кодировка отличается от 1251 и потребовать её измерения.
8 апр 21, 12:27    [22305894]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
Анна Петровна
Member

Откуда:
Сообщений: 68
[quot avp_#22305894]
Анна Петровна

Пока стоит сделать юзеру предупреждение при старте программы, что кодировка отличается от 1251 и потребовать её измерения.


Разумеется, это уже сделала - причем программа задаёт вопрос пользователю сначала об изменении языковых настроек, а потом о перезагрузке компьютера, а не просто меняет системные настройки и следом перезагружает систему.

Был соблазн сделать, чтобы программа просто меняла системные настройки как нужно и потом перезагружала компьютер - но в этом случае опасаюсь, что программа по поведению будет похожа на вредоносную и соответственно, имеет шанс попасть в базы антивирусов. И вообще это выглядит как серпом по одному месту.

Сейчас занимаюсь подготовкой костылей - чтобы всё приемлемо пусть хотя бы и с некоторыми багами (а не как сейчас - сплошные крякозябры и невозможность работы) работало и при включенной опции "Бета-версия: Использовать Юникод (UTC-8) для поддержки языка во всем мире" на случай если пользователь откажется что-то менять.

И разумеется, хочу перейти на Delphi 2010. Но вот мои USES {$I AllVcl.pas}, {$I MyUnits.pas}; в каждом модуле очень этому мешают.
8 апр 21, 12:53    [22305909]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
Анна Петровна
Member

Откуда:
Сообщений: 68
avp_

Откажутся вряд ли, но вот усложнить жизнь всякими мелкими пакостями вполне смогут.


Ну да - могут сделать какие-нибудь пакости - например, сделать чтобы по умолчанию работали только 64-разрядные программы. А для возможности работы 32-разрядных чтобы было необходимо включить какую-нибудь хитрую галочку в недрах системы и перезагрузить компьютер, разумеется.

Впрочем, с переходом на юникодную версию Delphi подобные пакости будут не страшны. Тк с юникодной 2010 перейти хотя бы на XE2 (минимальная что поддерживает 64-бит) думаю не составит большого труда. Главное уйти с неюникодного D7.
8 апр 21, 12:57    [22305916]     Ответить | Цитировать Сообщить модератору
 Re: Крякозябры вместо русских символов на Windows 10 - при включенной опции Юникод  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 52921

Анна Петровна
Но вот мои USES {$I AllVcl.pas}, {$I MyUnits.pas}; в каждом модуле очень этому мешают.

"Search-and-Replace in Files" решит эту проблему быстрее, чем вы прочитаете это сообщение.
Так что мешают отнюдь не они.

Posted via ActualForum NNTP Server 1.5

8 апр 21, 12:58    [22305919]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4 5 6 7   вперед  Ctrl      все
Все форумы / Delphi Ответить