Перейти к содержанию
Fire Monkey от А до Я

lis

Пользователи
  • Постов

    23
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные lis

  1. вполне можно без компонентов пользоваться просто WinApi

    portNum='\\.\COM28';
    CommHandle:= CreateFile(portNum,GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL or FILE_FLAG_OVERLAPPED,0);
    

    ссылка

    Спасибо! На первый взгляд, по ссылке куда меньше текста=) Проще разобраться!

     

    Я тоже в своем проекте пользуюсь COM портом для общения с контроллером. могу выложить, если интересно.

    напрямую через WinAPI?

     

    Да, очень интересно!

  2. Я не умудрялся, располагая компонент на форме, он был сразу доступен :)

     

    Зашел в заголовочные файлы, подключаемые к моему проекту при расположении компонента 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 
  3. Получается, менять надо в исходниках компонента vcl на fmx? По-моему, это как-то "по-вандальному" что ли.. Есть недюжие сомнения, что после моих манипуляций компонента заработает нормально. Да и если я так сделаю - то старые проекты, которые на vcl написаны, получается уже не смогу пересобрать на этом ПК.. Я так понимаю, AsyncPro в принципе заточен под vcl и перетащить его значит нехило переписать..

     

    Скомпилировать я пытаюсь пустую форму, на которую кинул один единственный компонент ком-порта.

  4. Здравствуйте

    Собственно вопрос в названии: подскажите, кто знает, подходящие компоненты. Раньше пользовался AsyncPro, но в FireMonkey от него получаю ошибки вида

     

    [bcc32 Error] Unit1.h(17): E2015 Ambiguity between 'Vcl::Forms::TForm' and 'Fmx::Forms::TForm'
      Full parser context
        Unit1.cpp(6): #include Unit1.h
        Unit1.h(16): class TForm1

     

     

    Заранее спасибо!

  5. Что получилось в итоге

    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 ошибку. Можно ли префикс этот убрать как-то?

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

     

    по теме:

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

     

    резюмирую: если есть чего сказать по делу - буду очень признателен. если нет - иди ты в... хелп ^_^

     

     

    ну и конечно же, бессмертное:

    американский форум задаешь вопрос получаешь ответ.
    Израильский форум задаешь вопрос тебе отвечают но вопросом на вопрос.
    Русский форум  задаешь вопрос и тебе долго и нудно объясняют какой ты ч(м)удак.

    :lol:

  7. kami, будь у меня в наличии компонент ServerSocket - этой темы на форме бы не было.. Не найдя его для FMX, я и стал искать что-то похожее, и набрел на TTcpServer, у которого, по крайней мере мне, не удалось найти тот самый массив Connections..

    За совет про кодировку - спасибо. Если потом полезут глюки - проверю!

     

    xenon54, спасибо, буду пробовать!

  8. спорно.. но да это не тема разговора B)

     

    А можно узнать название подходящего метода? У меня вылетают только  то, что на картинке и нигде в параметрах нет ничего похожего на массив чар..

    3bd51e123087.jpg

  9. Гуглил уже, и много.. И про 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);
  10. Попробовал через TcpClient1... От клиента серверу строка уходит, от сервера клиенту - нет.. (для начала строку хотя бы стараюсь ловить)

    TcpClient1->Sendln("1223"); //работает
    TcpServer1->Sendln("asd"); //не работает
  11. Здравствуйте

    Мне нужно организовать обмен массивами типа 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?..

     

    Заранее спасибо!

  12. спасибо, пока ждал одобрения темы модератором уже нашел ответ на других ресурсах. таймер объявлять в классе надо в разделе private.

     

    теперь о задаче:

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

  13. Здравствуйте
    Столкнулся со следующей проблемой:
    решил вывести одну из операций приложения в отдельный поток. Описал класс. В классе нужно сделать таймер, который регулярно будет запускать функцию из этого потока. Вот собсно и вопрос: как обратиться к таймеру, который создается в моём классе. Будь таймер элементом формы - 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? 
    Заранее спасибо!
×
×
  • Создать...