線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1358
推到 Plurk!
推到 Facebook!

移动设备Telnet至主机,如何实现附图中的效果

尚未結案
viery
一般會員


發表:19
回覆:11
積分:6
註冊:2002-09-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-19 10:20:30 IP:218.82.xxx.xxx 未訂閱
现准备开发仓储管理系统的RF(无线射频)应用。采用telnet的方式,即系统实际运行在windows的server上,RF设备通过telnet方式登录到主机,运行主机上的程序。    我参考了oracle的仓库管理系统的文档,发现其mobile device的界面很不错,如附图1,附图2。     而我实现的效果只是象dos界面一样,每输入一行后回车,自动跳转到下一个命令行,无法实现向oracle那样的操作界面,其光标可以上下移动。 想请问,如何实现此种界面?是和telnet server有关吗?是否windows的telnet server不支持? 發表人 - viery 於 2004/12/19 10:39:00
ddy
站務副站長


發表:262
回覆:2105
積分:1169
註冊:2002-07-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-20 10:53:12 IP:202.145.xxx.xxx 未訂閱
使用VT100 指令可實現你的需求 詳參考 http://www.fh-jena.de/~gmueller/Kurs_halle/esc_vt100.html http://astronomy.swin.edu.au/~pbourke/dataformats/vt100/ http://www.dadaboom.com/pdp11/software/vt100.html    建議先將每個command 寫成function 使用起來就方便多了 至少先要知道如何在指定位置顯示有顏色的字串,以及反白與基本的鍵盤遊標控制   例:  
 
/*********************************************************************
*Function Name:color_reverse
*Description:Reverse display
*********************************************************************/
void color_reverse(const U8 channel)
{//前景背景反相顯示
    x_printf(channel,"%c[7m",ASCII_ESC);
}    /*********************************************************************
*Function Name:color_back
*Description:Set background color
*********************************************************************/
void color_back(const U8 channel,VT100_COLOR_ENUM x)
{
    x_printf(channel,"%c[4%dm",ASCII_ESC,x);
}    /*********************************************************************
*Function Name:color_fr
*Description:Set fore color
*********************************************************************/
void color_fr(const U8 channel,VT100_COLOR_ENUM x)
{
    x_printf(channel,"%c[3%dm",ASCII_ESC,x);
}    /*********************************************************************
*Function Name:cur_addr
*Description:Cursor location
*********************************************************************/
void cur_addr(const U8 channel,U8 row,U8 col)
{
    x_printf(channel,"%c[%d;%dH",ASCII_ESC,row,col);//設定游標位置。游標將會定址在 (row,col) 的位置上
}    /*********************************************************************
*Function Name:clr_screen
*Description:Clear screen
*********************************************************************/
void clr_screen(const U8 channel) //after action,cursot move to home
{
    x_printf(channel,"%c[2J",ASCII_ESC);
}    /*********************************************************************
*Function Name:clr_line
*Description:Clear a line
*********************************************************************/
void clr_line(const U8 channel,U8 row)
{
    cur_addr(channel,row,0);
    x_printf(channel,"%c[2K",ASCII_ESC);
}    
viery
一般會員


發表:19
回覆:11
積分:6
註冊:2002-09-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-20 13:03:35 IP:218.81.xxx.xxx 未訂閱
非常感谢你的回复。因为以前没有做过这方面的东西,你的回复对我们很有用。 能否提供多一些的例子, 或者delphi下的实现。
ddy
站務副站長


發表:262
回覆:2105
積分:1169
註冊:2002-07-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-21 00:25:46 IP:61.62.xxx.xxx 未訂閱
部份程式碼以delphi 型態呈現,使用IdTelnetServer 元件 大致寫個粗陋的demo,應該是能從中學習在Telnet Server 中如何使用VT100 控制碼    至於詳細的輸入控制與menu 與其它的輸入介面的設計,待小弟有時間會在站上發表    建議您先把 VT100 控制碼看過,並試著將控制碼如範例寫成function 待基礎工作完成,屆時要做出您所希望的畫面就不是難事了    
unit Unit1;    interface    uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdBaseComponent, IdComponent, IdTCPServer, IdTelnetServer,
  StdCtrls;    type
  TForm1 = class(TForm)
    Button1: TButton;
    IdTelnetServer1: TIdTelnetServer;
    procedure Button1Click(Sender: TObject);
    procedure IdTelnetServer1Execute(AThread: TIdPeerThread);
  private
    { Private declarations }
  public
    { Public declarations }
  end;    var
  Form1: TForm1;    implementation    {$R *.dfm}    const ASCII_ESC=char(27);
//*********************************************************************
//*Function Name:cur_addr
//*Description:Cursor location
//*********************************************************************
procedure cur_addr(AThread:TIdPeerThread;row:Integer;col:Integer);
begin
    //設定游標位置。游標將會定址在 (row,col) 的位置上
    AThread.Connection.Write(format('%s[%d;%dH',[ASCII_ESC,row,col]));
end;    //*********************************************************************
//Function Name:clr_screen
//*Description:Clear screen
//*********************************************************************
procedure clr_screen(AThread:TIdPeerThread);
begin
    AThread.Connection.Write(format('%s[2J',[ASCII_ESC]));
end;    function getString(AThread:TIdPeerThread):string;
begin
    //輸入不自動echo
    result:=AThread.Connection.InputLn('',FALSE);
end;    procedure TForm1.Button1Click(Sender: TObject);
begin
    IdTelnetServer1.Active:=not IdTelnetServer1.Active;
end;    procedure TForm1.IdTelnetServer1Execute(AThread: TIdPeerThread);
var
    cmd:string;
begin
    clr_screen(AThread);
    cur_addr(AThread,10,10);
    AThread.Connection.Write('Login');
    cmd:=getString(AThread);
    clr_screen(AThread);
    AThread.Connection.Write(cmd);    end;    end.    
viery
一般會員


發表:19
回覆:11
積分:6
註冊:2002-09-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-12-21 23:02:48 IP:218.82.xxx.xxx 未訂閱
多谢! 我试过在普通的console application中不支持VT100的指令,而在idTelnetServer的程序中则是支持的。这是否意味者需要做一个telnet server? 期待你的文章的发表。
ddy
站務副站長


發表:262
回覆:2105
積分:1169
註冊:2002-07-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-12-22 00:13:21 IP:61.62.xxx.xxx 未訂閱
引言:我试过在普通的console application中不支持VT100的指令,而在idTelnetServer的程序中则是支持的。这是否意味者需要做一个telnet server?
VT100 指令集當然是使用在所謂的"虛擬終端機"一般而言使用RS232/Telnet 連接的系統可以使用,是因為在終端機軟體能解釋這些指令 而純ap 的console 而言無法解釋這樣的指令所以會被視為看似奇怪的文字 純ap 下的console 有沒有辦法能使用這樣的指令呢? 當然是有的 在dos 時代有一個檔案叫「ANSI.SYS」就能解釋VT100 的指令 只要在config.sys 組態檔裡加入「device=ansi.sys」這一行就可以 但是這個意義並不大 一、win 系統與ansi.sys相容上也許有問題 二、誰還在local 端的操作使用console 這類文字圖型化界面? 這類的vt100的應用最常見的就是bbs,其次是一些網路設備 都算是蠻早期的技術了,當然現在還存在…大多是為了提供最基本最通用的環境 即使在最陽春只有dos 的環境下也能操作系統 所以如果您的需求是要能做到遠端控制,那就使用telnetserver 吧 < src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=8147403&CC=182217">
Ktop_Robot
站務副站長


發表:0
回覆:3511
積分:0
註冊:2007-04-17

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-04-26 13:51:17 IP:000.000.xxx.xxx 未訂閱
提問者您好:


以上回應是否已得到滿意的答覆?


若已得到滿意的答覆,請在一週內結案,否則請在一週內回覆還有什麼未盡事宜,不然,
將由版主(尚無版主之區域將由副站長或站長)自由心證,選擇較合適之解答予以結案處理,
被選上之答題者同樣會有加分獎勵同時發問者將受到扣 1 分的處分。不便之處,請見諒。


有問有答有結案,才能有良性的互動,良好的討論環境需要大家共同維護,感謝您的配合。

------
我是機器人,我不接受簡訊.
系統時間:2024-05-19 4:44:23
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!