<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Форум 'Delphi &amp; Builder' на RSDN</title>
    <link>http://rsdn.org/Forum/delphi/</link>
    <description></description>
    <category>delphi</category>
    <language>ru-ru</language>
    <copyright>Copyright ©, RSDN, 2001-2007</copyright>
    <webMaster>forum@rsdn.org</webMaster>
    <generator>RSDN RSS Generator 1.3</generator>
    <image>
      <url>http://rsdn.org/rsdn.gif</url>
      <title>RSDN</title>
      <link>http://rsdn.org</link>
    </image>
    <lastBuildDate>Sun, 12 Apr 2026 05:06:38 GMT</lastBuildDate>
    <ttl>5</ttl>
	<item>
		<title>Lazarus, Linux, Android</title>
		<link>http://rsdn.org/Forum/delphi/8978699.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/delphi/8978699</guid>
		<comments>http://rsdn.org/Forum/delphi/8978699</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8978699</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8978699</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8978699</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;А что, реально на Linux (Ubuntu) с помощью Lazarus делать Android-приложения?&lt;br /&gt;
&lt;br /&gt;
У кого есть положительный опыт?&lt;/div&gt;
				
		</description>
		
		<category>delphi</category>
		<pubDate>Sat, 16 Aug 2025 06:19:06 GMT</pubDate>
		
			<author>Kocur &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>6</slash:comments>
		
	</item>

	<item>
		<title>Увличить лимит активаций</title>
		<link>http://rsdn.org/Forum/delphi/8942836.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/delphi/8942836</guid>
		<comments>http://rsdn.org/Forum/delphi/8942836</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8942836</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8942836</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8942836</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Добрый день.&lt;br /&gt;
&lt;br /&gt;
Получилось у кого-то последнее время увеличить лимит активаций Delphi/C++ Builder обращением в поддержку Idera/Embarcadero (или как они правильно счас)? Написал 2 дня назад &amp;mdash; пока ни ответа, ни привета. В форумах пишут, что они требуют для этого активной подписки, тогда это жесть: купленный продукт нельзя активировать при переустановке!&lt;/div&gt;
				
		</description>
		
		<category>delphi</category>
		<pubDate>Mon, 02 Jun 2025 06:28:56 GMT</pubDate>
		
			<author>Freeze &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>1</slash:comments>
		
	</item>

	<item>
		<title>New! RAD studio 12.2</title>
		<link>http://rsdn.org/Forum/delphi/8815422.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/delphi/8815422</guid>
		<comments>http://rsdn.org/Forum/delphi/8815422</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8815422</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8815422</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8815422</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;FYI.&lt;br /&gt;
RAD Studio 12.2 is out! &lt;br /&gt;
Explore what’s great about the latest update to the RAD Studio toolset, &lt;br /&gt;
available since September 2024.&lt;br /&gt;
Konstantin.&lt;/div&gt;
				
		</description>
		
		<category>delphi</category>
		<pubDate>Fri, 13 Sep 2024 17:26:20 GMT</pubDate>
		
			<author>lovetski &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>7</slash:comments>
		
	</item>

	<item>
		<title>Что нового сейчас есть в Delphi?</title>
		<link>http://rsdn.org/Forum/delphi/8783042.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/delphi/8783042</guid>
		<comments>http://rsdn.org/Forum/delphi/8783042</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8783042</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8783042</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8783042</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Давно пишу на Delphi XE8, и тут обнаружилась неприятная проблема – баг компилятора из-за которого программа иногда не компилируется (ошибка F2084 Internal error: C2359). Хорошо бы перейти на Delphi поновее, или может быть Lazarus. Хочу спросить, какие фичи есть в новых версиях, и нет ли в них частности такого:&lt;br /&gt;
1) Очень не хватает возможности назвать то, на что ссылается блок with. Т.е. нужно обозначение вроде this или it, аналогичное self для класса. Это не только моя мысль, я видел такой запрос в инете, так что можно надеяться идея дошла до разработчиков;&lt;br /&gt;
2) Хорошо что в XE появились процедуры и функции к рекордам, т.е. инкапсуляция для рекордов, а нельзя ли ещё наследование (понятно что нельзя полиморфизм, а инкапсуляция и наследование вполне);&lt;br /&gt;
3) Хотелось бы иметь быстрые классы без лишней вспомогательной информации. Я имею в виду, что классы включают в себя таблицу виртуальных методов, информацию о классе вроде его названия и пр., поэтому не очень хочется превращать в класс разную мелочь (трата ресурсов компьютера). Может быть, то что я предлагаю можно реализовать только за счёт отказа от полиморфизма, ну пусть хотя бы так. В принципе сейчас можно для этого заменять классы указателями на рекорды, но опять же не хватает наследования;&lt;br /&gt;
4) Как там в новых Delphi с Firemonkey и поддержкой Linux, Mac, Android? Они хотя бы скомпилировали Delphi на FMX?&lt;br /&gt;
5) Метапрограммирование, макросы – есть сейчас что-то такое?&lt;br /&gt;
6) Я давно предлагаю поэтапную компиляцию: сначала превратить исходник в более быстрый (размноженный), например в котором инлайновые функции заинлайнились и их удобнее отлаживать. Вряд ли это кто-то сделал, но вдруг...&lt;/div&gt;
				
		</description>
		
		<category>delphi</category>
		<pubDate>Thu, 18 Jul 2024 04:28:46 GMT</pubDate>
		
			<author>Khimik &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>25</slash:comments>
		
	</item>

	<item>
		<title>Странный баг Delphi XE8</title>
		<link>http://rsdn.org/Forum/delphi/8587671.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/delphi/8587671</guid>
		<comments>http://rsdn.org/Forum/delphi/8587671</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8587671</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8587671</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8587671</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Я что-то поменял в коде, и мой проект перестал запускаться. Стала срабатывать ошибка range check error в коде, где такой ошибки не может быть.&lt;br /&gt;
Вернул предыдущий код проекта &amp;mdash; снова всё работает. Попытался подменить часть модулей последним кодом &amp;mdash; снова перестало работать. После этого вернул эти же модули предыдущими &amp;mdash; снова не работает; но если обновить все коды проекта, снова вернуть предыдущий вариант &amp;mdash; работает.&lt;br /&gt;
Попробовал установить Delphi на другом компьютере, скомпилировал &amp;mdash; такая же ошибка.&lt;br /&gt;
Заметил ещё одну странность: на одном из модулей (возможно это как раз проблемный модуль, с которого всё пошло) после нажатия F9 возникает синий breakpoint на самой верхней строчке (где название модуля). Убираю этот breakpoint, нажимаю F9 &amp;mdash; снова он появляется.&lt;br /&gt;
Кто-нибудь с таким сталкивался?&lt;/div&gt;
				
		</description>
		
		<category>delphi</category>
		<pubDate>Fri, 25 Aug 2023 07:22:59 GMT</pubDate>
		
			<author>Khimik &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>30</slash:comments>
		
	</item>

	<item>
		<title>Медленная работа связки ADO с MS SQL Server</title>
		<link>http://rsdn.org/Forum/delphi/8576531.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/delphi/8576531</guid>
		<comments>http://rsdn.org/Forum/delphi/8576531</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8576531</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8576531</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8576531</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Доброго времени и мое почтение старожилам!&lt;br /&gt;
&lt;br /&gt;
На новой работе свела судьба некрокомпонентом TBetterAdoDataset и соответственнно кровавым легаси.&lt;br /&gt;
Есть довольно большой продукт, написанный на DelphiXE 10.3 но использующий ADO и вышеупомянутый некроморф. БД &amp;mdash; MS SQL Server.&lt;br /&gt;
С недавних пор, один из клиентов жалуется что данное приложение работает неприлично медленно.&lt;br /&gt;
Под неприлично медленно имеется ввиду: 3 примитивных запроса типа "SELECT Field1, Field2 FROM TableName WHERE ID=Value" выполняются порядка 5 секунд.&lt;br /&gt;
Запросы возвращают одну запись.&lt;br /&gt;
В редких случаях, вылетает исключение с таймаутом.&lt;br /&gt;
&lt;br /&gt;
Можно списать на плохую сетевую инфраструктуру, НО:&lt;br /&gt;
Другое приложение, также написанное на Delphi + TBetterAdoDataset, работающее с этой же самой базой, на этом же самом ПК, таких проблем не имеет и работает с нормальной скоростью.&lt;br /&gt;
К сожалению исходники второго приложения нам недоступны.&lt;br /&gt;
&lt;br /&gt;
Я понимаю что это очень тупой вопрос, но:&lt;br /&gt;
может у кого-то есть идеи, куда можно посмотреть?&lt;br /&gt;
Мы рассматриваем абсолютно любую зацепку. Даже за мысли вслух будем благодарны.&lt;br /&gt;
&lt;br /&gt;
Всем заранее спасибо!&lt;/div&gt;
				
		</description>
		
		<category>delphi</category>
		<pubDate>Wed, 09 Aug 2023 11:58:51 GMT</pubDate>
		
			<author>barbanel &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>3</slash:comments>
		
	</item>

	<item>
		<title>Devexpress</title>
		<link>http://rsdn.org/Forum/delphi/8552448.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/delphi/8552448</guid>
		<comments>http://rsdn.org/Forum/delphi/8552448</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8552448</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8552448</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8552448</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Devexpress не хотят продавать подписку в компанию, хоть как-то, по их мнению связанную с РФ. &lt;br /&gt;
&lt;br /&gt;
Никто не сталкивался как приобрести в современных условиях?&lt;/div&gt;
				
		</description>
		
		<category>delphi</category>
		<pubDate>Tue, 27 Jun 2023 11:06:46 GMT</pubDate>
		
			<author>Matrix_Failure &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>1</slash:comments>
		
	</item>

	<item>
		<title>Не открывается файл в Win11 (drive cannot be found)</title>
		<link>http://rsdn.org/Forum/delphi/8542838.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/delphi/8542838</guid>
		<comments>http://rsdn.org/Forum/delphi/8542838</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8542838</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8542838</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8542838</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Два пользователя моей программы написали, что в Windows 11 моя программа не работает, точнее не открывает файл через File/Open. Если они пытаются открыть файл, выдаётся ошибка "The drive cannot be found". При этом я не могу у себя воспроизвести эту ошибку, в том числе когда запускаю программу на ноутбуке с Windows 11 (у меня всё открывается нормально).&lt;br /&gt;
Один из них написал, что ошибка пропала после того как он обновил GPU drive, но потом она появилась снова.&lt;br /&gt;
Странная ситуация, подскажите что делать.&lt;/div&gt;
				
		</description>
		
		<category>delphi</category>
		<pubDate>Tue, 13 Jun 2023 17:27:51 GMT</pubDate>
		
			<author>Khimik &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>3</slash:comments>
		
	</item>

	<item>
		<title>Список открытых окон проводника</title>
		<link>http://rsdn.org/Forum/delphi/8488443.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/delphi/8488443</guid>
		<comments>http://rsdn.org/Forum/delphi/8488443</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8488443</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8488443</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8488443</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Доброго времени.&lt;br /&gt;
Собственно пытаюсь получить открытые окна проводника. Возникает ошибка при обращении к Item.&lt;br /&gt;
Что не так?&lt;br /&gt;
&lt;br /&gt;
Debugger Exception Notification&lt;br /&gt;
---------------------------&lt;br /&gt;
Project Project4.exe raised exception class $C0000005 with message 'access violation at 0x00c6fd3c: read of address 0x00000000'.&lt;br /&gt;
---------------------------&lt;br /&gt;
Break   Continue   Copy   Help   &lt;br /&gt;
---------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;uses SHDocVw;

Function GetCurrentExplorerDirectory: String;
var
  ShellWindows: IShellWindows;
  i: Integer;
  h: HWND;
begin
  Result := '';

  {Explorer - глобальная переменная для доступа ко всем откр.окнам Explorer}
  ShellWindows := CoShellWindows.Create;

  {Цикл прохода по всем откр.в настоящий момент окнам Explorer}
  for i := 0 to ShellWindows.Count - 1 do
    {Если очередное окно пребывает сейчас в фокусе}
    if GetForegroundWindow = (ShellWindows.Item(i) as IWebbrowser2).HWND then &amp;lt;----------------------------------- ВОТ ТУТ ОШИБКА
    begin
      {Получаем его Handle (дескриптор окна) }
      h := (ShellWindows.Item(i) as IWebbrowser2).HWND; 
    end;
end;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
				
		</description>
		
		<category>delphi</category>
		<pubDate>Wed, 15 Mar 2023 14:42:41 GMT</pubDate>
		
			<author>xteam777 &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>5</slash:comments>
		
	</item>

	<item>
		<title>Получение списка файлов из буфера обмена</title>
		<link>http://rsdn.org/Forum/delphi/8487189.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/delphi/8487189</guid>
		<comments>http://rsdn.org/Forum/delphi/8487189</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8487189</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8487189</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8487189</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Делаю выборку форматов, и если попадается CF_HDROP пытаюсь забрать из него список файлов. &lt;br /&gt;
Получаю либо какой то мусор, либо строку, обрезанную слева.&lt;br /&gt;
Утилиты для просмотра содержимого буфера обмена показывают все правильно.&lt;br /&gt;
Что я делаю не так?&lt;br /&gt;
&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;uses ShlObj, Clipbrd;

function TForm2.Get_ClipboardFiles: String;
var
  len, fmt: integer;
  tmp: array of Byte;

  Data: THandle;
  DataPtr: Pointer;
  DataLen: integer;

  pFormatName: String;
  sTmp: WideString;

begin
  Result := '';

  Clipboard.Open;
  try
    fmt := EnumClipboardFormats(0);
    while (fmt &amp;gt; 0) do
    begin
      Data := GetClipboardData(fmt);
      if Data &amp;lt;&amp;gt; 0 then
      begin
        DataPtr := GlobalLock(Data);
        if DataPtr &amp;lt;&amp;gt; nil then
          try
            DataLen := GlobalSize(Data);
            if DataLen &amp;gt; 0 then
            begin
              SetLength(pFormatName, 255);
              len := GetClipboardFormatName(fmt, @pFormatName[1], 255);
              SetLength(pFormatName, len);

              if fmt = CF_HDROP then
                SetString(Result, PFileGroupDescriptor(DataPtr)^.fgd[0].cFileName, Length(PFileGroupDescriptor(DataPtr)^.fgd[0].cFileName));
            end;
          finally
            GlobalUnlock(Data);
          end;
      end;
      fmt := EnumClipboardFormats(fmt);
    end;
  finally
    Clipboard.Close;
  end;
end;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
				
		</description>
		
		<category>delphi</category>
		<pubDate>Mon, 13 Mar 2023 06:45:56 GMT</pubDate>
		
			<author>xteam777 &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>1</slash:comments>
		
	</item>

	<item>
		<title>Generics под капотом</title>
		<link>http://rsdn.org/Forum/delphi/8453442.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/delphi/8453442</guid>
		<comments>http://rsdn.org/Forum/delphi/8453442</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8453442</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8453442</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8453442</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Встречались ли где &amp;mdash; нибудь рекомендации, как  лучше писать код с Generics, чтобы меньше нагружать компилятор?&lt;br /&gt;
Например, насколько будет разница в используетмой памяти, скорости компиляции, итоовом коде при компиляции при таком использованнии Generics: &lt;br /&gt;
&lt;br /&gt;
&lt;table style="margin-top:5px;margin-bottom:5px" cellpadding="0" cellspacing="0"&gt; 	&lt;tbody onclick="toggleExpand(this)" style="cursor:pointer"&gt; 		&lt;tr&gt; 			&lt;td style="width:10px" class="hidden_Plus"&gt;				&amp;nbsp;			&lt;/td&gt;			&lt;td style="font-weight:bold;padding-left:2px;font-family:Verdana,Arial;font-size:9pt;"&gt;								Код1			&lt;/td&gt; 		&lt;/tr&gt; 	&lt;/tbody&gt; 	&lt;tbody style="display:none"&gt; 		&lt;tr&gt;			&lt;td style="background-image:url(//rsdn.org/Forum/images/line.gif);background-repeat:repeat-y;background-position:center"&gt;							&lt;/td&gt;			&lt;td style="padding-left:3px;font-family:Verdana,Arial;font-size:8pt"&gt;&lt;pre class='c'&gt;&lt;code&gt;TStringMap = TDictionary&amp;lt;&lt;span class='kw'&gt;string&lt;/span&gt;,&lt;span class='kw'&gt;string&lt;/span&gt;&amp;gt;;

&lt;span class='kw'&gt;class&lt;/span&gt; TMyClass
 FMap : TStringMap;
 &lt;span class='kw'&gt;constructor&lt;/span&gt;  Create;
&lt;span class='kw'&gt;end&lt;/span&gt;;

 &lt;span class='kw'&gt;constructor&lt;/span&gt;  TMyClass.Create;
  &lt;span class='kw'&gt;begin
   inherited&lt;/span&gt;;
   FMap := TStringMap.Create; 
  &lt;span class='kw'&gt;end&lt;/span&gt;;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt; 		&lt;/tr&gt; 		&lt;tr&gt;			&lt;td style="height:1px;background-image:url(//rsdn.org/Forum/images/corner.gif);background-repeat:no-repeat;background-position:center"&gt;							&lt;/td&gt;			&lt;td&gt;&lt;/td&gt;		&lt;/tr&gt;	&lt;/tbody&gt; &lt;/table&gt; &lt;br /&gt;
&lt;br /&gt;
или&lt;br /&gt;
&lt;br /&gt;
&lt;table style="margin-top:5px;margin-bottom:5px" cellpadding="0" cellspacing="0"&gt; 	&lt;tbody onclick="toggleExpand(this)" style="cursor:pointer"&gt; 		&lt;tr&gt; 			&lt;td style="width:10px" class="hidden_Plus"&gt;				&amp;nbsp;			&lt;/td&gt;			&lt;td style="font-weight:bold;padding-left:2px;font-family:Verdana,Arial;font-size:9pt;"&gt;								Код2			&lt;/td&gt; 		&lt;/tr&gt; 	&lt;/tbody&gt; 	&lt;tbody style="display:none"&gt; 		&lt;tr&gt;			&lt;td style="background-image:url(//rsdn.org/Forum/images/line.gif);background-repeat:repeat-y;background-position:center"&gt;							&lt;/td&gt;			&lt;td style="padding-left:3px;font-family:Verdana,Arial;font-size:8pt"&gt;&lt;pre class='c'&gt;&lt;code&gt;&lt;span class='kw'&gt;class&lt;/span&gt; TMyClass;
 FMap : TDictionary&amp;lt;&lt;span class='kw'&gt;string&lt;/span&gt;,&lt;span class='kw'&gt;string&lt;/span&gt;&amp;gt;;
 &lt;span class='kw'&gt;constructor&lt;/span&gt;  Create;
&lt;span class='kw'&gt;end&lt;/span&gt;;

 &lt;span class='kw'&gt;constructor&lt;/span&gt;  TMyClass.Create;
  &lt;span class='kw'&gt;begin
   inherited&lt;/span&gt;;
   FMap := TDictionary&amp;lt;&lt;span class='kw'&gt;string&lt;/span&gt;,&lt;span class='kw'&gt;string&lt;/span&gt;&amp;gt;.Create; 
  &lt;span class='kw'&gt;end&lt;/span&gt;;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt; 		&lt;/tr&gt; 		&lt;tr&gt;			&lt;td style="height:1px;background-image:url(//rsdn.org/Forum/images/corner.gif);background-repeat:no-repeat;background-position:center"&gt;							&lt;/td&gt;			&lt;td&gt;&lt;/td&gt;		&lt;/tr&gt;	&lt;/tbody&gt; &lt;/table&gt; &lt;br /&gt;
&lt;br /&gt;
Проблема в том , что заканчивается память при компиляции из среды (bds.exe доходит до предела 3Гб).&lt;br /&gt;
Программа порядка 1,8 млн строк (только своих) + сторонние компоненты.&lt;br /&gt;
Около 2500 только своих модулей&lt;br /&gt;
Delphi 10.4.2&lt;br /&gt;
&lt;br /&gt;
Подозреваю что больше всего нагружает компилятор циклические зависимости между модулями (но они почти все разрулены) и сложные конструкции с Generics.&lt;br /&gt;
В программе много кода в стиле типа такого &lt;br /&gt;
&lt;br /&gt;
&lt;table style="margin-top:5px;margin-bottom:5px" cellpadding="0" cellspacing="0"&gt; 	&lt;tbody onclick="toggleExpand(this)" style="cursor:pointer"&gt; 		&lt;tr&gt; 			&lt;td style="width:10px" class="hidden_Plus"&gt;				&amp;nbsp;			&lt;/td&gt;			&lt;td style="font-weight:bold;padding-left:2px;font-family:Verdana,Arial;font-size:9pt;"&gt;								Код3			&lt;/td&gt; 		&lt;/tr&gt; 	&lt;/tbody&gt; 	&lt;tbody style="display:none"&gt; 		&lt;tr&gt;			&lt;td style="background-image:url(//rsdn.org/Forum/images/line.gif);background-repeat:repeat-y;background-position:center"&gt;							&lt;/td&gt;			&lt;td style="padding-left:3px;font-family:Verdana,Arial;font-size:8pt"&gt;&lt;pre class='c'&gt;&lt;code&gt;&lt;span class='kw'&gt;procedure&lt;/span&gt; TfrmTopGraphDM.actSaveNearestGIds4ShRPExecute(Sender: TObject);
&lt;span class='kw'&gt;type&lt;/span&gt;
  RPair = &lt;span class='kw'&gt;record&lt;/span&gt;
    nb1, nb2: TNB;
  &lt;span class='kw'&gt;end&lt;/span&gt;;
&lt;span class='kw'&gt;var&lt;/span&gt;
  sch: TSchemeSet;
  lPairs: TRStream&amp;lt;&lt;span class='kw'&gt;String&lt;/span&gt;&amp;gt;;
&lt;span class='kw'&gt;begin&lt;/span&gt;
  sch := App.SDEDocs.Active;
  &lt;span class='kw'&gt;if not&lt;/span&gt; Assigned(sch) &lt;span class='kw'&gt;then&lt;/span&gt; exit;

  lPairs :=
    TRStream&amp;lt;TNB&amp;gt;.stream&amp;lt;Integer&amp;gt;(sch.Techs)
      .map&amp;lt;TNB&amp;gt;(
        &lt;span class='kw'&gt;procedure&lt;/span&gt; (aNB: TNB; &lt;span class='kw'&gt;var&lt;/span&gt; aMap: TProc&amp;lt;TNB&amp;gt;)
        &lt;span class='kw'&gt;begin
          if&lt;/span&gt; (aNB.IsChildOrEqual(ttcPowerTransformer) &lt;span class='kw'&gt;and&lt;/span&gt; TCEAPI.isShRP(aNB)) &lt;span class='kw'&gt;then&lt;/span&gt;
            aMap(aNB);
        &lt;span class='kw'&gt;end&lt;/span&gt;)
      .map&amp;lt;RPair&amp;gt;(
        &lt;span class='kw'&gt;procedure&lt;/span&gt; (aNB: TNB; &lt;span class='kw'&gt;var&lt;/span&gt; aMap: TProc&amp;lt;RPair&amp;gt;)
        &lt;span class='kw'&gt;var&lt;/span&gt;
          lSwitch: TCE;
          lPair: RPair;
        &lt;span class='kw'&gt;begin&lt;/span&gt;
          lSwitch := TRStream&amp;lt;TNB&amp;gt;
            .just(aNB)
            .map&amp;lt;TCE&amp;gt;(TCeAPI.ce)
            .map(TCeAPI.find(TCERules.windingExtraTerminalsRules,
                  &lt;span class='kw'&gt;function&lt;/span&gt; (aCe: TCE): Boolean
                  &lt;span class='kw'&gt;begin&lt;/span&gt;
                    Result := aCe.IsChildOrEqual(ttcSwitch) &lt;span class='kw'&gt;and not&lt;/span&gt; TCEAPI.isCandle(aCE) &lt;span class='kw'&gt;and&lt;/span&gt; (TCEAPI.globalId(aCE) &amp;lt;&amp;gt; &lt;span class='str'&gt;''&lt;/span&gt;);
                  &lt;span class='kw'&gt;end&lt;/span&gt;, True))
            .first
            .toArray()
            .firstItem;
          &lt;span class='kw'&gt;if&lt;/span&gt; Assigned(lSwitch) &lt;span class='kw'&gt;then
          begin&lt;/span&gt;
            lPair.nb1 := aNB;
            lPair.nb2 := lSwitch;
            aMap(lPair);
          &lt;span class='kw'&gt;end&lt;/span&gt;;
        &lt;span class='kw'&gt;end&lt;/span&gt;)
      .map&amp;lt;&lt;span class='kw'&gt;String&lt;/span&gt;&amp;gt;(
        &lt;span class='kw'&gt;procedure&lt;/span&gt; (aPair: RPair; &lt;span class='kw'&gt;var&lt;/span&gt; aMap: TProc&amp;lt;&lt;span class='kw'&gt;String&lt;/span&gt;&amp;gt;)
        &lt;span class='kw'&gt;begin&lt;/span&gt;
          aMap(TTopGraphUtils.SaveNB(aPair.nb1) + CSV_DELIMETER + TTopGraphUtils.SaveNB(aPair.nb2));
        &lt;span class='kw'&gt;end&lt;/span&gt;);

  TRIO.saveToFile(lPairs);
&lt;span class='kw'&gt;end&lt;/span&gt;;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt; 		&lt;/tr&gt; 		&lt;tr&gt;			&lt;td style="height:1px;background-image:url(//rsdn.org/Forum/images/corner.gif);background-repeat:no-repeat;background-position:center"&gt;							&lt;/td&gt;			&lt;td&gt;&lt;/td&gt;		&lt;/tr&gt;	&lt;/tbody&gt; &lt;/table&gt; &lt;br /&gt;
&lt;br /&gt;
Где составляющие выражений часто  повторяются в разных методах.&lt;br /&gt;
Вопрос, как его лучше оптимизировать для компилятора.&lt;/div&gt;
				
		</description>
		
		<category>delphi</category>
		<pubDate>Sat, 21 Jan 2023 09:49:57 GMT</pubDate>
		
			<author>swame &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>23</slash:comments>
		
	</item>

	<item>
		<title>Как на Lazarus скомпилировать Linux-код</title>
		<link>http://rsdn.org/Forum/delphi/8439305.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/delphi/8439305</guid>
		<comments>http://rsdn.org/Forum/delphi/8439305</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8439305</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8439305</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8439305</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;У меня есть код моей программы на Lazarus в Windows, который можно компилировать. Теперь пытаюсь скомпилировать его для Linux. Сначала я пытался поставить Lazarus на моём Linux-ноутбуке, и столкнулся с разными ужосами: дистрибутив Lazarus c .deb инсталлятором выдаёт ошибку "the following packages have unmet dependencies", а другой дистрибутив с каталогами usr/bin даёт ошибку "Ссылка испорчена". После этого я проинсталлировал Lazarus (более старая версия) через терминал, но он ничего не компилирует. Тогда я попробовал просто скомпилировать Linux программу (. ) в моём Windows-Лазарусе. Выдалась ошибка "Не найден system.ppu" или "Fatal: Невозможно найти system, используемый в fcllaz пакета FCL.". Подскажите как решить эту задачу.&lt;/div&gt;
				
		</description>
		
		<category>delphi</category>
		<pubDate>Fri, 30 Dec 2022 09:46:08 GMT</pubDate>
		
			<author>Khimik &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>29</slash:comments>
		
	</item>

	<item>
		<title>Lazarus vs Code Typhon</title>
		<link>http://rsdn.org/Forum/delphi/8430027.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/delphi/8430027</guid>
		<comments>http://rsdn.org/Forum/delphi/8430027</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8430027</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8430027</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8430027</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Я уже писал что мне нужно на Lazarus скомпилировать программу с графиками, стандартного teechart там нет, но &lt;a class="m" href="https://habr.com/ru/post/534466/" target="_blank"&gt;тут&lt;/a&gt; написано что он есть на Code Typhon. Скачал Code Typhon 7.9, проинсталлировал Win64-версию, и сразу обнаружилось что я ничего в нём не понимаю. У меня проект с головным файлом .lpr, а в Typhon на  Файл/Открыть не открываются файлы с таким расширением. Как открыть мой Lazarus-проект в Typhon? И ещё непонятный момент &amp;mdash; в Typhon я начал новый проект, поместил на Form1 компоненты, а потом случайно закрыл окно и с тех пор не знаю, как редактировать код этого проекта (когда выбираю Вид/редактор исходного кода или Вид/обозреватель кода, ничего не меняется).&lt;br /&gt;
В связи с этим вопрос &amp;mdash; что лучше, Lazarus 2.2.2 или Code Typhon 7.9? Не окажется ли что второй с багами?&lt;br /&gt;
По ссылке было написано что в Typhon есть teechart, но вроде если добавить на форму график, это будет TAChart который есть и в Lazarus. А как использовать Teechart в Typhon? И если есть его исходники, может быть можно перенести teechart на Lazarus?&lt;/div&gt;
				
		</description>
		
		<category>delphi</category>
		<pubDate>Fri, 16 Dec 2022 11:12:31 GMT</pubDate>
		
			<author>Khimik &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>0</slash:comments>
		
	</item>

	<item>
		<title>Кроссплатформенный tchart в Delphi и Lazarus</title>
		<link>http://rsdn.org/Forum/delphi/8429281.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/delphi/8429281</guid>
		<comments>http://rsdn.org/Forum/delphi/8429281</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8429281</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8429281</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8429281</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Мне казалось, что лучшим решением будет использовать steema teechart, чуть поправив его для компиляции в Lazarus, как написано здесь:&lt;br /&gt;
&lt;br /&gt;
&lt;a class="m" href="https://habr.com/ru/post/534466/" target="_blank"&gt;https://habr.com/ru/post/534466/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Но поставить бесплатно исходники steema teechart не получилось, возможно авторы проапгрейдили защиту (активация онлайн). Может быть, стоит купить исходники steema teechart за 600 долларов? Если это возможно в России.&lt;/div&gt;
				
		</description>
		
		<category>delphi</category>
		<pubDate>Thu, 15 Dec 2022 07:48:33 GMT</pubDate>
		
			<author>Khimik &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>25</slash:comments>
		
	</item>

	<item>
		<title>Clipboard в Lazarus</title>
		<link>http://rsdn.org/Forum/delphi/8404324.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/delphi/8404324</guid>
		<comments>http://rsdn.org/Forum/delphi/8404324</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8404324</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8404324</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8404324</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Когда я перевёл свой проект с Delphi на Lazarus, перестали работать функции вставки из клипбоарда. Когда срабатывает функция TClipboard.GetAsText, ошибка происходит на это функции TClipboard.GetFormat:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;  Result:=false;
  &lt;span class='kw'&gt;if&lt;/span&gt; Stream=&lt;span class='kw'&gt;nil then&lt;/span&gt; exit;
  &lt;span class='kw'&gt;if&lt;/span&gt; FormatID=0 &lt;span class='kw'&gt;then&lt;/span&gt; exit;
  &lt;span class='kw'&gt;if&lt;/span&gt; CanReadFromCache &lt;span class='kw'&gt;then begin
    if&lt;/span&gt; Assigned(FOnRequest) &lt;span class='kw'&gt;then begin&lt;/span&gt;
      FOnRequest(FormatID,Stream);
      Result:=true;
    &lt;span class='kw'&gt;end else begin&lt;/span&gt;
      i:=IndexOfCachedFormatID(FormatID,false);
      &lt;span class='kw'&gt;if&lt;/span&gt; i&amp;lt;0 &lt;span class='kw'&gt;then&lt;/span&gt;
        Result:=false
      &lt;span class='kw'&gt;else begin&lt;/span&gt;
        FData[i].Stream.Position:=0;
        &lt;span class='kw'&gt;if&lt;/span&gt; Stream &lt;span class='kw'&gt;is&lt;/span&gt; TMemoryStream &lt;span class='kw'&gt;then&lt;/span&gt;
          TMemoryStream(Stream).SetSize(Stream.Position+FData[i].Stream.Size);
        Stream.CopyFrom(FData[i].Stream,FData[i].Stream.Size);
        Result:=true;
      &lt;span class='kw'&gt;end&lt;/span&gt;;
    &lt;span class='kw'&gt;end&lt;/span&gt;;
  &lt;span class='kw'&gt;end else begin&lt;/span&gt;
    &lt;span class='com'&gt;// not the clipboard owner -&amp;gt; request data&lt;/span&gt;
    Result:=ClipboardGetData(ClipboardType,FormatID,Stream);
  &lt;span class='kw'&gt;end&lt;/span&gt;;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
Здесь IndexOfCachedFormatID возвращает -1 и далее процедура обрывается. Как это можно исправить? Может быть есть другие библиотеки для поддержки клипбоарда, если стандартная не работает?&lt;/div&gt;
				
		</description>
		
		<category>delphi</category>
		<pubDate>Thu, 10 Nov 2022 09:39:57 GMT</pubDate>
		
			<author>Khimik &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>2</slash:comments>
		
	</item>

	<item>
		<title>Как вы изучаете Lazarus?</title>
		<link>http://rsdn.org/Forum/delphi/8362781.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/delphi/8362781</guid>
		<comments>http://rsdn.org/Forum/delphi/8362781</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8362781</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8362781</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8362781</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Мне надо портировать мою программу с Delphi на Lazarus, и это весьма сложная задача, я уже столкнулся с подводными камнями и проблемами, ответы на которые толком не гуглятся, также я задаю вопросы на форумах и не всегда мне дают ответ. Купил книгу "Основы программирования в среде Lazarus" Мансурова, начал читать, и по моему там нет ничего из того что мне нужно. Как вы находите для себя информацию про программированию в Lazarus?&lt;/div&gt;
				
		</description>
		
		<category>delphi</category>
		<pubDate>Sat, 17 Sep 2022 16:24:18 GMT</pubDate>
		
			<author>Khimik &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>23</slash:comments>
		
	</item>

	<item>
		<title>Документация по Indy 10</title>
		<link>http://rsdn.org/Forum/delphi/8354970.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/delphi/8354970</guid>
		<comments>http://rsdn.org/Forum/delphi/8354970</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8354970</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8354970</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8354970</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Прошу прощения за наверное наивный вопрос... &lt;br /&gt;
Можно где-то скачать (хоть в каком-то формате) или посмотреть документацию по Indy10 ?&lt;br /&gt;
&lt;br /&gt;
Та что была на старом сайте похоже похоронена хостером, на e-iter дает ошибки 404 на массе страниц.&lt;br /&gt;
&lt;br /&gt;
Спасибо !&lt;/div&gt;
				
		</description>
		
		<category>delphi</category>
		<pubDate>Wed, 07 Sep 2022 17:32:49 GMT</pubDate>
		
			<author>Тихоня &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>1</slash:comments>
		
	</item>

	<item>
		<title>Delphi + запись в COM-порт</title>
		<link>http://rsdn.org/Forum/delphi/8340983.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/delphi/8340983</guid>
		<comments>http://rsdn.org/Forum/delphi/8340983</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8340983</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8340983</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8340983</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Здравствуйте, уважаемые форумчане.&lt;br /&gt;
&lt;br /&gt;
Написал простенькую программу на Delphi:&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;{$APPTYPE CONSOLE}
program wr;

uses Windows;

var
  port: THandle;
  cfg: TDCB;

  s: AnsiString;
  n: Cardinal;

begin
  port := CreateFile(
    'COM4',
    GENERIC_READ or GENERIC_WRITE,
    0,
    nil,
    OPEN_EXISTING,
    FILE_ATTRIBUTE_NORMAL,
    0
  );
  cfg.DCBlength := SizeOf(TDCB);
  cfg.BaudRate := 9600;
  cfg.ByteSize := 8;
  cfg.Parity := NoParity;
  cfg.StopBits := OneStopBit;
  cfg.Flags := 0;
  SetCommState(port, cfg);

  s := #$01#$02#$03#$04#$05;
  WriteFile(port, s, Length(s), n, nil);
  WriteLn(n);

  CloseHandle(port);
  ReadLn;
end.&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
Она открывает COM4 и пишет туда строку размером в 5 байт: 01 02 03 04 05.&lt;br /&gt;
Однако, на принимающей стороне, приходят байты: 0C 00 41 00 00.&lt;br /&gt;
Подскажите, в чём может быть дело? Порт открывается в режиме 8N1 9600 бод.&lt;br /&gt;
&lt;br /&gt;
На принимающей стороне читаю так:&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;fcntl.h&amp;gt;
#include &amp;lt;termios.h&amp;gt;
#include &amp;lt;unistd.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;
#include &amp;lt;stdint.h&amp;gt;
#include &amp;lt;sys/ioctl.h&amp;gt;

int main(int argc, char **argv) {

  int fd, n;
  struct termios options;

        const char *fn = "/dev/ttyUSB0";
  if (argc &amp;gt; 1) fn = argv[1];
  fd = open(fn, O_RDWR | O_NOCTTY);
  if (fd &amp;lt; 0) {
    printf("Unable to open %s\n", fn);
    return -1;
  }

  fcntl(fd, F_SETFL, FNDELAY);
  tcgetattr(fd, &amp;amp;options);
  cfsetspeed(&amp;amp;options, B9600);
  options.c_iflag = 0;
  options.c_oflag = 0;
  options.c_lflag = 0;
  options.c_cflag = 0 ;
  options.c_cflag = CS8;
  options.c_cc[VMIN] = 0;
  options.c_cc[VTIME] = 0;
  tcsetattr(fd, TCSANOW, &amp;amp;options);

  printf("\n");
  unsigned char c;
  for (;;) {
    int n = read(fd, &amp;amp;c, 1);
    if (n &amp;gt; 0)
    printf(" %02X\n", c);
  }
  printf("\n");

  close(fd);
  return 0;
}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
Физически, приём-передача ведётся через обычные FT232R (USB).&lt;/div&gt;
				
		</description>
		
		<category>delphi</category>
		<pubDate>Mon, 22 Aug 2022 13:45:42 GMT</pubDate>
		
			<author>Ellipsoid &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>3</slash:comments>
		
	</item>

	<item>
		<title>ID3D11Texture2D -&gt; DIBSection</title>
		<link>http://rsdn.org/Forum/delphi/8317414.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/delphi/8317414</guid>
		<comments>http://rsdn.org/Forum/delphi/8317414</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8317414</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8317414</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8317414</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Есть рабочий код из Desktop Duplication API. Он переводит ID3D11Texture2D в TBitmap:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;function TDesktopDuplicationWrapper.DrawFrame(var Bitmap: TBitmap): Boolean;
var
  Desc: TD3D11_TEXTURE2D_DESC;
  Temp: ID3D11Texture2D;
  Resource: TD3D11_MAPPED_SUBRESOURCE;
  i: Integer;
  p: PByte;
begin
  Result := True;

  FTexture.GetDesc(Desc);

  if Bitmap = nil then
    Bitmap := TBitmap.Create;

  Bitmap.PixelFormat := pf32Bit;
  Bitmap.SetSize(Desc.Width, Desc.Height);

  Desc.BindFlags := 0;
  Desc.CPUAccessFlags := Ord(D3D11_CPU_ACCESS_READ) or Ord(D3D11_CPU_ACCESS_WRITE);
  Desc.Usage := D3D11_USAGE_STAGING;
  Desc.MiscFlags := 0;

  //  READ/WRITE texture
  FError := FDevice.CreateTexture2D(@Desc, nil, Temp);
  if Failed(FError) then
  begin
    FTexture := nil;
    FDuplicate.ReleaseFrame;

    Result := False;
    Exit;
  end;

  // copy original to the RW texture
  FContext.CopyResource(Temp, FTexture);

  // get texture bits
  FContext.Map(Temp, 0, D3D11_MAP_READ_WRITE, 0, Resource);
  p := Resource.pData;

  // copy pixels - we assume a 32bits bitmap !
  for i := 0 to Desc.Height - 1 do
  begin
    Move(p^, Bitmap.ScanLine[i]^, 4 * Desc.Width);
    Inc(p, 4 * Desc.Width);
  end;

  FTexture := nil;
  FDuplicate.ReleaseFrame;
end;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
Мне нужно переделать так, чтобы писалось не в TBitmap, а в DIBSection (а именно в pBits), созданную таким путем:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;procedure CreateBitmapData;
begin
  sWidth := GetSystemMetrics(SM_CXSCREEN);
  sHeight := GetSystemMetrics(SM_CYSCREEN);

  hDeskWin := GetDesktopWindow;
  hScrDC := GetDC(hDeskWin);
  with bitmap_info.bmiHeader do
  begin
    biSize := sizeof(BITMAPINFOHEADER);
    biWidth := sWidth;
    //Use negative height to scan top-down.
    biHeight := -sHeight;
    biPlanes := 1;
    biBitCount := GetDeviceCaps(hScrDC, BITSPIXEL);
    biCompression := BI_RGB;
  end;
  pBits := nil;
  hBmp := CreateDIBSection(hScrDC, bitmap_info, DIB_RGB_COLORS, pBits, 0, 0);
//  hBmp := CreateCompatibleBitmap(hScrDC, sWidth, sHeight);
  hMemDC := CreateCompatibleDC(hScrDC);
end;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
Как это реализовать напрямую, без TBitmap -&amp;gt; BitBlt?&lt;/div&gt;
				
		</description>
		
		<category>delphi</category>
		<pubDate>Mon, 18 Jul 2022 20:47:20 GMT</pubDate>
		
			<author>xteam777 &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>0</slash:comments>
		
	</item>

	<item>
		<title>Скриншот части экрана через DirectX</title>
		<link>http://rsdn.org/Forum/delphi/8312616.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/delphi/8312616</guid>
		<comments>http://rsdn.org/Forum/delphi/8312616</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8312616</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8312616</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8312616</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Доброго времени.&lt;br /&gt;
Имеется рабочая процедура, которая делает скриншот всего экрана целиком. Необходимо ее переделать, чтобы она брала именно нужную часть. При замене везде Width и Height к примеру на 100х100, в итоге получается черный экран.&lt;br /&gt;
Код взят отсюда &lt;a class="m" href="https://villavu.com/forum/showthread.php?t=108664" target="_blank" /&gt;&lt;br /&gt;
Что я пропустил?&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Рабочий код&lt;/b&gt;&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;procedure TImageCatcher.GetDirectXData();
var
  BitsPerPixel: Byte;
  pD3D: IDirect3D9;
  pSurface: IDirect3DSurface9;
  g_pD3DDevice: IDirect3DDevice9;
  D3DPP: TD3DPresentParameters;
  ARect: TRect;
  LockedRect: TD3DLockedRect;
  BMP: VCL.Graphics.TBitmap;
  i, p: Integer;
  x, y: integer;
  w, h: integer;
  res: BOOL;
begin
  GetTargetDimensions(w, h); //Возвращает ширину и высоту экрана

  GetTargetPosition(x, y);
  BitsPerPixel := 32;
  FillChar(d3dpp, SizeOf(d3dpp), 0);
  with D3DPP do
  begin
    Windowed := True;
    Flags := D3DPRESENTFLAG_LOCKABLE_BACKBUFFER;
    SwapEffect := D3DSWAPEFFECT_DISCARD;
    BackBufferWidth := Screen.Width;
    BackBufferHeight := Screen.Height;
    BackBufferFormat := D3DFMT_X8R8G8B8;
  end;
  pD3D := Direct3DCreate9(D3D_SDK_VERSION);
  pD3D.CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, GetDesktopWindow, D3DCREATE_SOFTWARE_VERTEXPROCESSING, @ D3DPP, g_pD3DDevice);
  g_pD3DDevice.CreateOffscreenPlainSurface(Screen.Width, Screen.Height, D3DFMT_A8R8G8B8, D3DPOOL_SCRATCH, pSurface, nil);
  g_pD3DDevice.GetFrontBufferData(0, pSurface);
  ARect := Screen.DesktopRect;
  pSurface.LockRect(LockedRect, @ ARect, D3DLOCK_NO_DIRTY_UPDATE or D3DLOCK_NOSYSLOCK or D3DLOCK_READONLY);
  BMP := VCL.Graphics.TBitmap.Create;
  BMP.Width := Screen.Width;
  BMP.Height := Screen.Height;
  case BitsPerPixel of
    8: BMP.PixelFormat := pf8bit;
    16: BMP.PixelFormat := pf16bit;
    24: BMP.PixelFormat := pf24bit;
    32: BMP.PixelFormat := pf32bit;
  end;
  p := Cardinal(LockedRect.pBits);
  for i := 0 to Screen.Height - 1 do
  begin
    CopyMemory(BMP.ScanLine[i], Ptr(p), Screen.Width * BitsPerPixel div 8);
    p := p + LockedRect.Pitch;
  end;
  Bitmap.SetSize(w, h);
  res := BitBlt(Bitmap.Canvas.Handle, 0, 0, w, h, BMP.Canvas.Handle, x, y, SRCCOPY);
  BMP.Free;
  pSurface.UnlockRect;
end;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Измененный нерабочий код&lt;/b&gt;&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;procedure TImageCatcher.GetDirectXData();
var
  BitsPerPixel: Byte;
  pD3D: IDirect3D9;
  pSurface: IDirect3DSurface9;
  g_pD3DDevice: IDirect3DDevice9;
  D3DPP: TD3DPresentParameters;
  ARect: TRect;
  LockedRect: TD3DLockedRect;
  BMP: VCL.Graphics.TBitmap;
  i, p: Integer;
  x, y: integer;
  w, h: integer;
  res: BOOL;
begin
  GetTargetDimensions(w, h);

//  w := 50;
//  h := 50;

  GetTargetPosition(x, y);
  BitsPerPixel := 32;
  FillChar(d3dpp, SizeOf(d3dpp), 0);
  with D3DPP do
  begin
    Windowed := True;
    Flags := D3DPRESENTFLAG_LOCKABLE_BACKBUFFER;
    SwapEffect := D3DSWAPEFFECT_DISCARD;
    BackBufferWidth := 100; //Screen.Width;
    BackBufferHeight := 100; //Screen.Height;
    BackBufferFormat := D3DFMT_X8R8G8B8;
  end;
  pD3D := Direct3DCreate9(D3D_SDK_VERSION);
  pD3D.CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, GetDesktopWindow, D3DCREATE_SOFTWARE_VERTEXPROCESSING, @ D3DPP, g_pD3DDevice);
  g_pD3DDevice.CreateOffscreenPlainSurface(100 {Screen.Width}, 100 {Screen.Height}, D3DFMT_A8R8G8B8, D3DPOOL_SCRATCH, pSurface, nil);
  g_pD3DDevice.GetFrontBufferData(0, pSurface);
  ARect := Rect(0, 0, 100, 100);  //Screen.DesktopRect;
  pSurface.LockRect(LockedRect, @ ARect, D3DLOCK_NO_DIRTY_UPDATE or D3DLOCK_NOSYSLOCK or D3DLOCK_READONLY);
  BMP := VCL.Graphics.TBitmap.Create;
  BMP.Width := 100; //Screen.Width;
  BMP.Height := 100; //Screen.Height;
  case BitsPerPixel of
    8: BMP.PixelFormat := pf8bit;
    16: BMP.PixelFormat := pf16bit;
    24: BMP.PixelFormat := pf24bit;
    32: BMP.PixelFormat := pf32bit;
  end;
  p := Cardinal(LockedRect.pBits);
  for i := 0 to 100 {Screen.Height} - 1 do
  begin
    CopyMemory(BMP.ScanLine[i], Ptr(p), 100 {Screen.Width} * BitsPerPixel div 8);
    p := p + LockedRect.Pitch;
  end;
  Bitmap.SetSize(w, h);
  res := BitBlt(Bitmap.Canvas.Handle, 0, 0, w, h, BMP.Canvas.Handle, x, y, SRCCOPY);
  BMP.Free;
  pSurface.UnlockRect;
end;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
				
		</description>
		
		<category>delphi</category>
		<pubDate>Sun, 10 Jul 2022 11:19:15 GMT</pubDate>
		
			<author>xteam777 &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>4</slash:comments>
		
	</item>
</channel>
</rss>
