<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[QUIK -> DDE &mdash; Передать структуру в функцию.]]></title>
		<link>https://quik2dde.ru/viewtopic.php?id=380</link>
		<atom:link href="https://quik2dde.ru/extern.php?action=feed&amp;tid=380&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Передать структуру в функцию.».]]></description>
		<lastBuildDate>Fri, 26 Aug 2022 09:42:31 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Передать структуру в функцию.]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3551#p3551</link>
			<description><![CDATA[<p>Да, все работает именно так, как и должно, спасибо. Сейчас займусь ещё изменением цвета отдельных ячеек.</p>]]></description>
			<author><![CDATA[null@example.com (dark184)]]></author>
			<pubDate>Fri, 26 Aug 2022 09:42:31 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3551#p3551</guid>
		</item>
		<item>
			<title><![CDATA[Re: Передать структуру в функцию.]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3550#p3550</link>
			<description><![CDATA[<p>Хм, а чё так можно было??? Доберусь до робота, проверю. Хотя уже даже не сомневаюсь что заработает. Сам бы фиг дошурупил вызвать функцию прямо из массива... Хотя ведь это было более чем очевидное решение. Спасибо.</p>]]></description>
			<author><![CDATA[null@example.com (dark184)]]></author>
			<pubDate>Fri, 26 Aug 2022 07:52:34 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3550#p3550</guid>
		</item>
		<item>
			<title><![CDATA[Re: Передать структуру в функцию.]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3549#p3549</link>
			<description><![CDATA[<p>Осознал.<br />Тогда предлагаю сделать так:</p><div class="codebox"><pre><code>    Column_Table = {                                        -- Создаем список колонок таблицы.
                    {&quot;Инструмент&quot;,QTABLE_STRING_TYPE,15,function() return NAME end},
                    {&quot;Шаг цены&quot;,QTABLE_DOUBLE_TYPE, 12,function() return tostring(PRICE_STEP) end},
                    {&quot;Точность&quot;,QTABLE_INT_TYPE, 12,function() return tostring (PRICE_SCALE) end},
                    {&quot;Open&quot;, QTABLE_DOUBLE_TYPE, 10,function() return tostring(Open) end},
                    {&quot;High&quot;, QTABLE_DOUBLE_TYPE, 10,function() return MakeStringPrice(High) end},
                    {&quot;Low&quot;, QTABLE_DOUBLE_TYPE, 10,function() return MakeStringPrice(Low) end},
                    {&quot;Close&quot;, QTABLE_DOUBLE_TYPE, 10,function() return MakeStringPrice(Close) end},
                    {&quot;Volume&quot;, QTABLE_DOUBLE_TYPE, 15,function() return tostring(Volume) end},
    }

function Table_row(row)
    local i = 0
    for i=1,#Column_Table,1 do
        SetCell(t_id,row,i,Column_Table[i][4]())
    end
end</code></pre></div><p>Т.е. четвертым элементом таблицы мы вписываем не сами значения, а функции, которые возвращают нам нужное значение из переменных, а в&nbsp; Table_row эти функции вызываем для получения значения (обратите внимание на добавленные 2 скобки в последнем аргументе SetCell).</p><p>Проверил, работает.</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Fri, 26 Aug 2022 06:49:58 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3549#p3549</guid>
		</item>
		<item>
			<title><![CDATA[Re: Передать структуру в функцию.]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3548#p3548</link>
			<description><![CDATA[<p>В принципе в сообщении от 21 числа и есть именно этот нерабочий пример. Работает все, кроме обновления данных, которые должны браться из 4 элемента каждой строки.</p>]]></description>
			<author><![CDATA[null@example.com (dark184)]]></author>
			<pubDate>Fri, 26 Aug 2022 05:46:08 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3548#p3548</guid>
		</item>
		<item>
			<title><![CDATA[Re: Передать структуру в функцию.]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3546#p3546</link>
			<description><![CDATA[<div class="quotebox"><cite>dark184 пишет:</cite><blockquote><p>Далеко не так, автоматически обновлять без функции это почти фантастика... Да и не нужно это.<br />Теперь если я удаляю любую колонку, автоматом вся таблица переписывается вообще без изменения в программе... Пиши себе код дальше...</p></blockquote></div><p>Могли бы вы привести пример &quot;кода мечты&quot;? как это должно выглядеть?<br />Тогда под ответ можно было бы подогнать какое-то приемлемое решение, возможно.<br />Это просто было бы более однозначно понятно, </p><p>Просто пример полного кода (не рабочего, не страшно), который бы вы хотели видеть в итоге.</p><p>Возможно на метатаблицах что-то придумать удастся, такое у меня ощущение. А может и проще что-то.</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Fri, 26 Aug 2022 05:01:51 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3546#p3546</guid>
		</item>
		<item>
			<title><![CDATA[Re: Передать структуру в функцию.]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3544#p3544</link>
			<description><![CDATA[<p>Далеко не так, автоматически обновлять без функции это почти фантастика... Да и не нужно это.<br />Вот смотрите, на том же си есть указатели, по сути указатель забирает значение не по имени, по адресу переменной в памяти. В луа как я понял это называется ссылкой, правда такого термина я не нашел... Для переменных в указателях большого смысла нет, но, например, я могу в массив данных загнать указатель вместо имени переменной и программе сказать что в этой ячейке не данные, а указатель, по которому брать значение. Сумбурно, но как то так.<br />Любой переменной компилятор присваивает адрес, даже локальной. По сути имя и является ее адресом. Но мы не знаем его. Пример, i=10. I здесь имя переменной, пускай компилятор дал ей адрес 12345. Если допустим а = i, то в переменную а я получу значение 10. А вот если так а = *i то в а окажется 12345. Вот этот адрес мне и надо подставить в Column_Table но только в четвертый элемент каждой строки.<br />Тогда я бы мог забрать значение так Z = #a, теперь в Z лежит 10.<br />Для чего мне это нужно? Создаю заготовку таблицы, где нужны статичные данные прямо их и пишу. Там где нет, вставляю указатель, он статичен. Но при обновлении строки говорю функции обнови ка мне строку, но имей ввиду, но у тебя в руках не сами данные, а всего лишь указатель(по сути адрес) по которому их забрать...<br />Таким образом я создаю таблицу с описанием и сразу с нужными мне данными. Каждая строка таблицы содержит все необходимое для каждого столбца. Теперь если я удаляю любую колонку, автоматом вся таблица переписывается вообще без изменения в программе... Пиши себе код дальше...</p>]]></description>
			<author><![CDATA[null@example.com (dark184)]]></author>
			<pubDate>Wed, 24 Aug 2022 16:27:57 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3544#p3544</guid>
		</item>
		<item>
			<title><![CDATA[Re: Передать структуру в функцию.]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3543#p3543</link>
			<description><![CDATA[<p><strong>dark184</strong>,<br />я, признаться, так до конца точно и не смог понять что именно вы хотите.<br />Вроде так примерно представляю (видимо хочется, чтобы при изменении значения переменной в программе автоматически обновлялась информация в визуальной таблице). Так? или что-то другое?</p><p>Возможно что-то такое или подобное можно будет придумать на метатаблицах, например.<br />Но в любом случае надо будет вызывать какую-то функцию &quot;данные поменялись, обновитесь значения!&quot;.</p><p>Если б вы написали что же именно хочется, как это по-вашему должно выглядеть в коде - то может и подсказал бы кто приемлемое для вас решение.</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Wed, 24 Aug 2022 07:25:32 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3543#p3543</guid>
		</item>
		<item>
			<title><![CDATA[Re: Передать структуру в функцию.]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3542#p3542</link>
			<description><![CDATA[<p>Проблема не в том, как вывести. Именно так я сейчас и делаю. В принципе когда скрипт отлажен, проблем нет. Но! Во время отладки, когда возникает необходимость добавить столбец или приходит понимание что какой то не нужен и его можно удалить, вот тут то и возникают некоторые неудобства. Именно поэтому хотелось изначально, как я выкладывал, создать таблицу, проинитить ее, в теле программы заполнить переменные и одним махом обновлять значения в таблице и только нужную строку. Т.е. при отладке хоть сколько меняешь изначальный массив, а переменные подтягиваются автоматом и только, что нужны на отображение. А так не только за строками, ещё и за столбцами следить приходится.<br />Т.е. суть вопроса, возможно ли из выше приведенного массива Column_Table каждый четвертый элемент в каждой строке передать не виде значения, а в виде адреса обозначенной переменной по которому я и буду забирать значение функцией SetCell?</p>]]></description>
			<author><![CDATA[null@example.com (dark184)]]></author>
			<pubDate>Mon, 22 Aug 2022 11:39:30 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3542#p3542</guid>
		</item>
		<item>
			<title><![CDATA[Re: Передать структуру в функцию.]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3541#p3541</link>
			<description><![CDATA[<div class="quotebox"><cite>dark184 пишет:</cite><blockquote><p>Именно по такому принципу работают абсолютно все массивы в любых языках программирования. Т.е. передается не сам массив, а адрес первого элемента массива.</p></blockquote></div><p>Конечно же нет.<br />Pyton, C#, Java - очевидно, что там это всё сильно не так.</p><div class="quotebox"><cite>dark184 пишет:</cite><blockquote><p>почему инитится жёсткая таблица</p></blockquote></div><p>Есть функция SetCell. Она в аргументе принимает текст, который пропишется для отображения в таблицу.<br />Какие адреса? какие переменные? какие массивы??</p><div class="codebox"><pre><code>SetCell(t_id ,row, i, a)  -- текст из значения переменной a
SetCell(t_id ,row, i, &quot;текст для ячейки&quot;)  -- явно заданный в аргументе текст</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Mon, 22 Aug 2022 08:41:56 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3541#p3541</guid>
		</item>
		<item>
			<title><![CDATA[Re: Передать структуру в функцию.]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3540#p3540</link>
			<description><![CDATA[<p>Поясню немного. Сам я больше привык к си, нет, я не мега спец, просто любитель. Мыслю сишными мозгами... Так вот, например, на си у меня есть переменная temp. Мне имя переменной не нужно по каким либо причинам, а нужен ее адрес по которому я хочу забирать из нее значение. Как это сделать? Очень просто i = #temp, в i окажется не значение, а адрес переменной temp в памяти. Теперь с этим адресом я могу делать что угодно, например прибавить 1, а потом взять значение по этому адресу r = *i. Т.о. даже не зная имени переменной, находящейся в следующей ячейки памяти после temp я могу взять из нее значение. Понятно, что с переменной нет смысла большого с этим заморачиваться, это просто пример. Именно по такому принципу работают абсолютно все массивы в любых языках программирования. Т.е. передается не сам массив, а адрес первого элемента массива.<br />В моем случае я не могу дошурупить почему инитится жёсткая таблица, с чем проинитил, с тем она и остаётся дальше. У меня только одна мысль, при ините таблицы просто берутся значения переменных один раз и все. Больше не обновляются, хотя переменные меняются, проверено, выводил мессаджами...</p>]]></description>
			<author><![CDATA[null@example.com (dark184)]]></author>
			<pubDate>Mon, 22 Aug 2022 08:17:54 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3540#p3540</guid>
		</item>
		<item>
			<title><![CDATA[Re: Передать структуру в функцию.]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3539#p3539</link>
			<description><![CDATA[<div class="quotebox"><cite>dark184 пишет:</cite><blockquote><p> Второй день ломаю голову как в этот столбец перед инитом вставить не значения переменных, а адрес переменной в памяти по которому и будут забираться значения и обновляться такой или подобной функцией?</p></blockquote></div><p>Или я не понимаю о чем вы, или вы куда-то не туда думаете.<br />Какой адрес переменной??</p><p>Есть функция SetCell, она задает отображаемое значение в ячейке визуальной таблицы.&nbsp; Всё.</p><p>Как вы это значение получаете или как храните - это ваша задача. Вполне возможно, что все ячейки визуальной таблицы и нет смысла отображать.<br />Обычно храню таблицу (таблицу Lua), куда при добавлении строки визуальной таблицы сохраняю этот самый номер строки. И тогда уже по этому номеру знаю куда сделать SetCell</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Mon, 22 Aug 2022 06:23:11 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3539#p3539</guid>
		</item>
		<item>
			<title><![CDATA[Re: Передать структуру в функцию.]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3538#p3538</link>
			<description><![CDATA[<div class="quotebox"><cite>swerg пишет:</cite><blockquote><p>Помню же была нормальная книжка. Попалась:</p></blockquote></div><p> Спасибо. Есть у меня даже русская версия где то, но перевод кривой. <br />Есть еще один вопрос. Я сейчас создаю массив(структуру или как здесь это называется) в onInit и ее передаю для создания пользовательской таблицы.<br /></p><div class="codebox"><pre><code>    Column_Table =    {                                        -- Создаем список колонок таблицы.
                    {&quot;Инструмент&quot;,QTABLE_STRING_TYPE,15,NAME},
                    {&quot;Шаг цены&quot;,QTABLE_DOUBLE_TYPE, 12,tostring(PRICE_STEP)},
                    {&quot;Точность&quot;,QTABLE_INT_TYPE, 12,tostring (PRICE_SCALE)},
                    {&quot;Open&quot;, QTABLE_DOUBLE_TYPE, 10,tostring(Open)},
                    {&quot;High&quot;, QTABLE_DOUBLE_TYPE, 10,MakeStringPrice(High)},
                    {&quot;Low&quot;, QTABLE_DOUBLE_TYPE, 10,MakeStringPrice(Low)},
                    {&quot;Close&quot;, QTABLE_DOUBLE_TYPE, 10,MakeStringPrice(Close)},
                    {&quot;Volume&quot;, QTABLE_DOUBLE_TYPE, 15,tostring(Volume)},
                    }</code></pre></div><p>Вот эту структуру передаю в функцию<br /></p><div class="codebox"><pre><code>function Table_init(t)

-- Создаем таблицу и присваиваем имена столбцов из переданного массива t.
    local i = 0
    local Table = AllocTable()
        for i=1,#t,1 do            -- Перебираем массив по строкам от первой до последней. Количество строк массива получаем #t
            AddColumn(Table, i, t[i][1], true, t[i][2], t[i][3])
        end

    CreateWindow(Table)
    SetWindowCaption(Table, &quot;Отладочная таблица&quot;)
--    SetWindowPos(Table, 0, 10, 2500, 200)
    InsertRow(Table, -1)

return Table
end</code></pre></div><p>В данном случае все отлично работает. Но если обратить внимание, то четвертым столбцом идут переменные. НО! Здесь получается, что таблица создается, из переменных пишутся в нее значения и само собой больше не обновляются... Второй день ломаю голову как в этот столбец перед инитом вставить не значения переменных, а адрес переменной в памяти по которому и будут забираться значения и обновляться такой или подобной функцией? <br /></p><div class="codebox"><pre><code>-- Заполнение строки таблицы
function Table_row(row)
    local i = 0
    for i=1,#Column_Table,1 do
        SetCell(t_id,row,i,Column_Table[i][4])
    end
end</code></pre></div><p>Отдельную структуру создавать неудобно.</p>]]></description>
			<author><![CDATA[null@example.com (dark184)]]></author>
			<pubDate>Sun, 21 Aug 2022 18:43:58 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3538#p3538</guid>
		</item>
		<item>
			<title><![CDATA[Re: Передать структуру в функцию.]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3537#p3537</link>
			<description><![CDATA[<div class="quotebox"><cite>dark184 пишет:</cite><blockquote><p>Да, это есть у меня. Но напрягает синтаксис, <br />и все без примеров <img src="https://quik2dde.ru/img/smilies/smile.png" width="15" height="15" alt="smile" /></p></blockquote></div><p>Помню же была нормальная книжка. Попалась:<br />[url]https://www.lua.org/pil/contents.html[/url]</p><p>Здесь всё по-человечески. Про Lua 5.0, но это не важно в данном случае, [url=https://quik2dde.ru/viewtopic.php?id=374]изменения в языке весьма и весьма незначительны[/url].</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Tue, 16 Aug 2022 09:43:30 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3537#p3537</guid>
		</item>
		<item>
			<title><![CDATA[Re: Передать структуру в функцию.]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3534#p3534</link>
			<description><![CDATA[<p>Если signal равно nil - то это эквивалентно false.</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Sun, 14 Aug 2022 17:25:17 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3534#p3534</guid>
		</item>
		<item>
			<title><![CDATA[Re: Передать структуру в функцию.]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3533#p3533</link>
			<description><![CDATA[<p>Спасибо, дошло. Теперь я понял в чем была моя вторая ошибка <img src="https://quik2dde.ru/img/smilies/smile.png" width="15" height="15" alt="smile" /> Сначала просто угадал, потом решил посчитать количество столбцов <img src="https://quik2dde.ru/img/smilies/smile.png" width="15" height="15" alt="smile" /> Не вышло. Теперь понял почему <img src="https://quik2dde.ru/img/smilies/smile.png" width="15" height="15" alt="smile" /> Как же все не привычно <img src="https://quik2dde.ru/img/smilies/sad.png" width="15" height="15" alt="sad" /><br />Если для того же Си здесь(переменная целая, неважно знаковая или нет)<br /></p><div class="codebox"><pre><code>if signal then
    message(&quot;Условие верное&quot;)
else
    message(&quot;Условие неверное&quot;)
end</code></pre></div><p>если в переменной signal любое число отличное от нуля, он считает условие true. Если 0 то false. Здесь такая запись не катит, всегда true, нужно явно сравнивать <img src="https://quik2dde.ru/img/smilies/sad.png" width="15" height="15" alt="sad" /></p>]]></description>
			<author><![CDATA[null@example.com (dark184)]]></author>
			<pubDate>Sun, 14 Aug 2022 14:02:02 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3533#p3533</guid>
		</item>
	</channel>
</rss>
