Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Flex > Передача данных из C++ Builder (Delphi) в Flex 2.0


Автор: dimas_art 14.4.2008, 09:29
Есть проект на Flex 2.0 - это программный комплекс, так сказать оболочка для отображения выполняемых результатов, но это не важно. В этот проект нужно передавать постоянно данные из C++ Builder'а. Но как это сделать смотрю мало кто может... Может кто тут мне поможет?

Автор: eternalko 14.4.2008, 18:00
А как именно Ты хочешь передавать?? Проект во Флексе он какой? Десктоп или в нете висит? 
Как часто нужно обновлять данные? Кто кому должен посылать??
Может простого апдейта данных раз в 2 минуты будет достаточно?

Оставайся тут друг, подписывайся на RSS!!! Вместе мы сила!  smile 

Автор: dimas_art 16.4.2008, 14:41
У меня прога для снятия данных с COM-порта от девайса. Эта часть написана на билдере. НА флексе пишу интерфейс для визуализации этих данных в виде графиков и числовых значений. Т.е. Flex - тупо интерфейс, Builder - прога для сбора данных. Т.е. Мне нужно передавать от билдера к флексу. Быстродействие критично!!

З.Ы. Возможно юзать нужно что-то типа XMLSocket()??

Автор: eternalko 18.4.2008, 00:16
Мой друг...
К сожалению я Тебе тут не помогу....

Автор: dimas_art 18.4.2008, 11:04
Я сделал уже! Чуть позже выложу коды...

Автор: eternalko 18.4.2008, 15:13
Дафай! smile 

Автор: dimas_art 19.4.2008, 23:26
Вот исходный код на Adobe Flex 2.0:
Код

<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="300" height="170"
    creationComplete="init()">
    <mx:Script>
        <![CDATA[
            private var client:XMLSocket = new XMLSocket();
            private var port:int = 5151;
            
            private function onData(event:DataEvent):void {                
                textArea.text += event.data.toString() + "\n";
            };
        
            private function init():void {
                // Подключение к C++ Builder
                client.connect("127.000.000.001", port);
                client.addEventListener(DataEvent.DATA, onData);
            };
        ]]>
    </mx:Script>

    <mx:TextArea id="textArea" x="10" y="10" width="280" height="150"/>
</mx:Application>


А вот серверная часть, написанная на C++ Builder:
Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "flash.h"
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "ShockwaveFlashObjects_OCX"
#pragma resource "*.dfm"
TfrmMeters *frmMeters;
//---------------------------------------------------------------------------
__fastcall TfrmMeters::TfrmMeters(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TfrmMeters::BitBtn2Click(TObject *Sender)
{
  AnsiString str11;
  str11 = Edit1->Text + "\0";
  void *str1 = str11.c_str();
  ServerSocket1->Socket->Connections[0]->SendBuf( str1, str11.Length() + 1 );
}
//---------------------------------------------------------------------------
void __fastcall TfrmMeters::FormShow(TObject *Sender)
{
  ShockwaveFlash1->Movie = GetCurrentDir() + "\\flash\\test.swf";
}
//---------------------------------------------------------------------------


Для работы серверной части необходимо подключение ActiveX компонента для загрузки Flash-ролика. Ролик должен лежать в папке Flash и  иметь имя test.swf. Вся передача производится с помощью компонента TServerSocket и XMLSocket. Если есть вопросы пишем в ПМ.

Автор: eternalko 20.4.2008, 02:39
 smile 
Красота smile  
Все гениальное просто!

Автор: thefightclub 21.4.2008, 22:48
а возможно то же самое проделать с Delphi???
 и если можно, то как (ПО ПОДРОБНЕЕ)

Автор: dimas_art 22.4.2008, 08:17
Все тоже самое... Как говорил один мой препод "Делфя от Билдера отличается, что в одной - точка, а в другом - стрелочка  smile "
Или тебя что-то конкретное интересует?

Автор: thefightclub 22.4.2008, 15:10
Если конкретнее вопрос состоит в том, чтобы  на форме в дельфи расположить приложение написанное на flex, которое представляет собой построение различных диаграмм. Как в реальном времени передавать переменные в flex ???

Автор: dimas_art 22.4.2008, 18:25
Вот то что делал я сам - нужно было для диплома. Это концептуальный пример осциллографа

Flex
Код

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()">
    <mx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            
            [Bindable] private var diagramData:ArrayCollection = new ArrayCollection();
            private var client:XMLSocket = new XMLSocket();
            private var port:Number = 5151;
            private var cnt:Number = 0;
            
            private function onData(event:DataEvent):void {                
                var addingObject:Object = new Object();
                addingObject.xCol = cnt++;
                addingObject.yCol = Number(event.data);
                diagramData.addItem(addingObject);
            };
            
            private function init(): void {
                // Подключение к C++ Builder
                client.connect("127.000.000.001", port);
                client.addEventListener(DataEvent.DATA, onData);
            };
        ]]>
    </mx:Script>
    <mx:Panel title="Example LineChart" 
        paddingTop="10" paddingLeft="10" right="10" left="10" bottom="10" top="10" layout="absolute">
        <mx:LineChart id="diagramChart" dataProvider="{diagramData}" left="10" right="10" top="10" bottom="10">
            <mx:series>
                <mx:LineSeries displayName="diagram" xField="xCol" yField="yCol"/>
            </mx:series>
        </mx:LineChart>
    </mx:Panel>
</mx:Application>


C++ Builder
Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include <stdlib.h> 
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "ShockwaveFlashObjects_OCX"
#pragma resource "*.dfm"
TForm1 *Form1;
int i = 0;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormShow(TObject *Sender)
{
  ShockwaveFlash1->Movie = GetCurrentDir() + "\\test.swf";
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
  AnsiString str11 = IntToStr(random(100)) + "\0";
  void *str1 = str11.c_str();
  ServerSocket1->Socket->Connections[0]->SendBuf( str1, str11.Length() + 1 );
}
//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
  Timer1->Enabled = true;        
}
//---------------------------------------------------------------------------


Результат:

http://ipicture.ru/

Автор: dimas_art 22.4.2008, 19:26
вот пример, заточенный под тебя - если будут вопросы - всегда рад ответить!
Код

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()">
    <mx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            
            [Bindable] private var diagramData:ArrayCollection = new ArrayCollection();
            private var client:XMLSocket = new XMLSocket();
            private var port:Number = 5151;
            private var cnt:Number = 0;
            
            private function onData(event:DataEvent): void {                
                var next:Boolean = false;
                var variable:String = new String;
                var receiveData:String = event.data.toString();
                var addingObject:Object = new Object();
                
                for(var i:Number = 0; i < receiveData.length; i++) {
                    if (receiveData.charAt(i) == " ") {
                        addingObject.xCol = Number(variable);
                        variable = new String();
                    } else variable += receiveData.charAt(i);
                }
                
                addingObject.yCol = Number(variable);
                diagramData.addItem(addingObject);
                
                ta.text += "xCol:" + String(addingObject.xCol) + " yCol:" + String(addingObject.yCol) + "\n";
            };
            
            private function init(): void {
                // Подключение к C++ Builder
                client.connect("127.000.000.001", port);
                client.addEventListener(DataEvent.DATA, onData);
            };
        ]]>
    </mx:Script>
    <mx:Panel title="Example LineChart" 
        paddingTop="10" paddingLeft="10" right="10" left="10" bottom="10" top="10" layout="absolute">
        <mx:ColumnChart id="diagramChart" right="10" left="10" top="10" bottom="10">
            <mx:series>
                <mx:ColumnSeries displayName="diagram" dataProvider="{diagramData}" xField="xCol" yField="yCol"/>
            </mx:series>
        </mx:ColumnChart>
        <mx:TextArea id="ta" x="484" y="22"/>
    </mx:Panel>
</mx:Application>


Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include <stdlib.h> 
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "ShockwaveFlashObjects_OCX"
#pragma resource "*.dfm"
TForm1 *Form1;
int i = 0;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormShow(TObject *Sender)
{
  ShockwaveFlash1->Movie = GetCurrentDir() + "\\test.swf";
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
  AnsiString str11 = IntToStr(i++) + " " + IntToStr(random(100)) + "\0";
  void *str1 = str11.c_str();
  ServerSocket1->Socket->Connections[0]->SendBuf( str1, str11.Length() + 1 );
}
//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
  Timer1->Enabled = true;        
}
//---------------------------------------------------------------------------


http://ipicture.ru/Gallery/Viewfull/1489371.html

Автор: thefightclub 22.4.2008, 21:09
билдер ругается вот на эту строчку
ServerSocket1->Socket->Connections[0]->SendBuf( str1, str11.Length() + 1 );
-undefined sybol  ServerSocket1 
как быть?

Кстати большое спасибо за поддержку))


Автор: dimas_art 24.4.2008, 22:09
Вот исходник проги на билдере - возможно поможет ;)

Добавлено через 46 секунд
Кстати, ты компонент TServerSocket  выкидывал на форму?

Автор: eternalko 11.7.2008, 18:40
Ух Ты! Крутая темка smile

Автор: MaksimC 29.9.2008, 20:33
Люди, помогите, как такое можно делать в java??

Автор: MadCow00 2.6.2009, 12:27
а как, скажем, передать во Flex параметры авторизации? ну, например, запустили приложение на Delhi, оно запросило имя/пароль - ввели - вошли, а дальше, при начале работы с флекс приложением (скажем при обращении к url) опять требуется ввести те же параметры. Чтобы пользователь не вводил их каждый раз, можно ли их как-то передавать сразу во Flex из любого другого приложения?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)