lis
Пользователи-
Постов
23 -
Зарегистрирован
-
Посещение
Весь контент lis
-
Спасибо! На первый взгляд, по ссылке куда меньше текста=) Проще разобраться! напрямую через WinAPI? Да, очень интересно!
-
Потому, что проект уже написан на fmx. И переписывать все под vcl - последнее дело
-
тогда может есть другой какой компонент для работы с com-портом в fmx?
-
Я не умудрялся, располагая компонент на форме, он был сразу доступен Зашел в заголовочные файлы, подключаемые к моему проекту при расположении компонента AsyncPro на форму. Увидел, что ему для работы нужны, как минимум #include <Vcl.Controls.hpp> // Pascal unit #include <Vcl.OleCtrls.hpp> // Pascal unit #include <Vcl.Forms.hpp> // Pascal unit #include <Vcl.Graphics.hpp> // Pascal unit Если не сложно, опишите подробнее, в чем мои недочеты и как их можно исправить? Что, где, на что заменить? ps AsyncPro установлен согласно мануалу (c++ builder xe3), в vcl все работает прекрасно. В fmx создаю новый проект, кидаю на него один компонент com-порта (добавляются два заголовочных файла #include "OoMisc.hpp" #include "AdPort.hpp") и, при запуске, начинаются Ambiguity between
-
Получается, менять надо в исходниках компонента vcl на fmx? По-моему, это как-то "по-вандальному" что ли.. Есть недюжие сомнения, что после моих манипуляций компонента заработает нормально. Да и если я так сделаю - то старые проекты, которые на vcl написаны, получается уже не смогу пересобрать на этом ПК.. Я так понимаю, AsyncPro в принципе заточен под vcl и перетащить его значит нехило переписать.. Скомпилировать я пытаюсь пустую форму, на которую кинул один единственный компонент ком-порта.
-
Здравствуйте Собственно вопрос в названии: подскажите, кто знает, подходящие компоненты. Раньше пользовался AsyncPro, но в FireMonkey от него получаю ошибки вида Заранее спасибо!
-
kami, a это мысль=) гаворд, я тебе всё уже сказал, не маяч пожалуйста. лучше пей пустырник
-
да, я пробовал отослать 10 байт - и тогда вместо 0C было 0A, так что длина, как минимум последний байт=) А замена idCMD на idTCP, к сожалению, ничего не изменила...
-
Что получилось в итоге unsigned char MessageToController[12]; /*заполняем MessageToController*/ TMemoryStream *t = new TMemoryStream; // t->SetSize(12); // t->Clear(); t->Write(MessageToController, 12); t->Position = 0; IdCmdTCPClient1->Socket->WriteBufferClear(); IdCmdTCPClient1->Socket->WriteBufferOpen(); IdCmdTCPClient1->Socket->Write(t,12,true); IdCmdTCPClient1->Socket->WriteBufferClose(); все отсылается, wireshark тому свидетель, но почему-то добавляется 4 байта перед моим массивом (00 00 00 0С), видимо длина посылки. И я так полагаю именно из за этой приставки сервер меня отключает, и я получаю 10054 ошибку. Можно ли префикс этот убрать как-то?
-
kami, спасибо, сейчас как раз этот write пытаюсь заставить работать на меня
-
вот так всегда.. задашь вопрос на форуме, и обязательно найдется нечто, которое по делу сказать ничего не сможет, но с умным видом примется писать никому ненужную ересь про мозги, хелп, гугл, и как оно само когда-то что-то накодило... по теме: мне не нужен чат, отправку строки я вполне себе сделал. мне нужно отправить массив. этого я в примерах, увы, не нашел. а собачится тут, по крайней мере до твоего вброса, никто не собачился. ребята помогали мне решить мою проблему, за что им огромное спасибо. кстати, форум для того и нужен, для помощи в решении вопросов. при чем тут манна? резюмирую: если есть чего сказать по делу - буду очень признателен. если нет - иди ты в... хелп ну и конечно же, бессмертное: американский форум задаешь вопрос получаешь ответ. Израильский форум задаешь вопрос тебе отвечают но вопросом на вопрос. Русский форум задаешь вопрос и тебе долго и нудно объясняют какой ты ч(м)удак.
-
контроллер scadapack, протокол modbus_tcp
-
kami, будь у меня в наличии компонент ServerSocket - этой темы на форме бы не было.. Не найдя его для FMX, я и стал искать что-то похожее, и набрел на TTcpServer, у которого, по крайней мере мне, не удалось найти тот самый массив Connections.. За совет про кодировку - спасибо. Если потом полезут глюки - проверю! xenon54, спасибо, буду пробовать!
-
спорно.. но да это не тема разговора А можно узнать название подходящего метода? У меня вылетают только то, что на картинке и нигде в параметрах нет ничего похожего на массив чар..
-
ксенон, вы не поверите, за МКАДом есть другие часовые пояса ps ок, посмотрим, какая активность будет в теме спустя сутки после создания
-
Гуглил уже, и много.. И про writeln писал выше.. только это отправка строки. а мне надо отправить, например unsigned char mes[3] mes[0] = 0x0A; mes[1] = 0x23; mes[2] = 0xBC; IdCMDTCPClient1->Socket->WriteLn(mes, 3); а не WideString mytext = "hello word"; IdCMDTCPClient1->Socket->WriteLn(mytext, IndyTextEncoding_UTF8);
-
Блин, неужели никто с сетью в фаерманки не работает?
-
Попробовал через TcpClient1... От клиента серверу строка уходит, от сервера клиенту - нет.. (для начала строку хотя бы стараюсь ловить) TcpClient1->Sendln("1223"); //работает TcpServer1->Sendln("asd"); //не работает
-
Здравствуйте Мне нужно организовать обмен массивами типа unsigned char между приложением и контроллером через Ethernet. То есть "в сети" будет всегда 1 клиент и 1 сервер. Столкнулся со следующей проблемой: При создании приложения на VCL для передачи массивов типа char пользовался указанными в названии темы компонентами ServerSocket1->Socket->Connections[0]->SendBuf(Message,MessLenght) void __fastcall TfrmMain::ServerSocket1ClientRead(TObject *Sender, TCustomWinSocket *Socket) { RecLenght = Socket->ReceiveLength(); Socket->ReceiveBuf(RecBuffer,RecLenght); } Сейчас пишу аналогичное приложение на FireMonkey, и тут указанных компонентов нет.. Попробовал заморочиться с Indy (IdCmdTCPServer1, IdCmdTCPClient1) - пока получается только отправить/получить String, и то как-то неудобно и муторно.. MyContext->Connection->IOHandler->WriteLn("lala"); AContext->Connection->IOHandler->ReadLn(); Подскажите пожалуйста, есть ли "заменитель" TServerSocket TClientSocket в FireMonkey? Или может чем ещё можно решить мою задачу.. Или хоть как это сделать через Indy?.. Заранее спасибо!
-
спасибо, пока ждал одобрения темы модератором уже нашел ответ на других ресурсах. таймер объявлять в классе надо в разделе private. теперь о задаче: мне нужна проверка связи с сервером постоянная. делаю я её пингами, которые с заданным интервалом засылает таймер. связь хреновая и пинги порой идут по несколько секунд. на это время главная форма умирает. вот решил попробовать в отдельный поток эти пинги вывести.
-
Здравствуйте Столкнулся со следующей проблемой: решил вывести одну из операций приложения в отдельный поток. Описал класс. В классе нужно сделать таймер, который регулярно будет запускать функцию из этого потока. Вот собсно и вопрос: как обратиться к таймеру, который создается в моём классе. Будь таймер элементом формы - FindComponent() меня бы спас наверное.. А так.. о себе: RAD Studio, C++ Builder XE3, FireMonkey. немного кода //----main.h-------------------------------- class TPingThread : public TThread { __published: private: protected: public: void __fastcall CreateControls(); void __fastcall Execute(); void __fastcall tmrTimer(TObject *Sender); }; TPingThread *PingThread; //----main.cpp---------------------------- void __fastcall TPingThread::CreateControls() { TTimer *NewTimer = new TTimer(NULL); NewTimer->OnTimer = TPingThread::tmrTimer; NewTimer->Interval = 1000; NewTimer->Enabled = true; NewTimer->Name = "tmr"; } //--------------------------------------------------------------------------- void __fastcall TPingThread::tmrTimer(TObject *Sender) { ShowMessage("Ok"); } Тут все работает. А вот как мне, например, выключить таймер вне функции tmrTimer CreateControls? Заранее спасибо!