Windowsタブレットのコントロールパネルの部屋のためのソフトウェア開発 – フォーム

ホームオートメーション eHouse .
メインフォーム(タブレット画面のレイアウトを作成します。 . RMのデジタル出力は、すべての種類のメインのForm 24フィールドTPanelパネル上に配置され .
これらは(または電気)RoomManagerを輩出するためのボタンを形成することになる .
加えて , 色は、読み出しの状態に依存します .
このような理由から、我々は標準ボタンまたは同様のタイプのTButtonを使用 , 彼らは色を変更する可能性を持っていないので、 .
我々はそれらを呼び出す ” outputX ” ここで、Xは出力の数である .
私は、デプロイする必要はありません , それは自動的にそれを行いますので、 , このアプリケーション . 各ボタンの , 出力が同じイベント(onClickの)に割り当てられている必要があり – output1Click .
RMを実行するすべてのプログラムのメインフォーム24フィールドTPanel·タイプ·パネル上に配置され .
これらは、現在のRoomManagerを切り替えるためのボタンを形成することになる(すなわち、 , そのような調節するために使用されるしきい値の測定入力の変化に伴って、グループの電気機器のオン/オフ . 温度) .
我々はそれらを呼び出す ” programX ” ここで、Xはボタンの数です .
同様に , 展開する必要はありません , それは自動的にそれを行いますので、 , このアプリケーション .
各ボタンの , プログラムが同じイベント(onClickの)に割り当てる必要があります – program1Click .
テキストラベルのメインフォームにTLabelは(Label16にLabel1という番号が付けられます)RoomManagerのすべての測定結果を表示するための16種類があります。 .
同様に上記の例のようにして展開する必要はありません .
のための最終的なフォームを表示  ルームコントロールパネルを作成するためのフォーム
フォームの初期化:

/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
手順TForm1に . FormCreate(送信者:TObjectを) ;
VAR alignx , buttonindex , 行 , コラム , K , I:整数 ;
始まる
GetComputerName ; / /は、コンピュータまたはパネルの名前を取得する – 読み込み
パス:= getcurrentdir() ; / /現在のローカルパスがアプリケーションディレクトリを取得する – のプログラムディレクトリは、読み取り
パス:= stringreplace(パス , ‘ \ BIN ‘ , ‘ \ ‘ , [Rfignorecase]) ; / /アプリケーションのeHouseのパスを取得
remotePathは:=パス ; inicializationためのリモートアクセスのための/ /同じパス – パスの先頭に同じリモートアクセス用にマップ
loadnames_rm ; / /ロードコントローラ名ehouse1
init_heat_temperature_names ; / /初期化heatmanager名
readethernetdevs ; / /ロードコントローライーサネットのeHouse名
I:= 1 ;
一方、I < ; = /にParamcount /コマンドライン引数を実行 – コマンドラインを処理
始まる
posの場合( ‘ / X: ‘ , 小文字(ParamStr(i)))と= 1の場合、/ /パネルの幅 – パネルの幅
form1の . 幅:= chk_int(stringreplace(ParamStr(i)は , ‘ / X: ‘ , ‘ ‘ , [Rfignorecase])) ;
posの場合( ‘ / S: ‘ , (ParamStr(i))は小文字)= 1の場合、/ /パネルの高さ – パネルの高さ
form1の . 高さ:= chk_int(stringreplace(ParamStr(i)は , ‘ / S: ‘ , ‘ ‘ , [Rfignorecase])) ;
posの場合( ‘ / R: ‘ , (ParamStr(i))は小文字)= 1の場合、/ /デバイス名(RoomManager) – RoomManger名
deviceindex:= RMDeviceIndexByName((stringreplace(ParamStr(i)は , ‘ / R: ‘ , ‘ ‘ , [Rfignorecase]))) ;
posの場合( ‘ /: ‘ , 小文字(ParamStr(i)))と= 1ならば/ /デバイスアドレス(RoomManager) – RoomManagerアドレス
deviceindex:=(get_index_rm(stringreplace(ParamStr(i)は , ‘ /: ‘ , ‘ ‘ , [Rfignorecase]))) ;
posの場合( ‘ / P: ‘ , 小文字(ParamStr(i)))と= 1の場合、/ /リモートアクセスパス – リモートアクセスパス
remotePathは:=((stringreplace(ParamStr(i)は , ‘ / P: ‘ , ‘ ‘ , [Rfignorecase]))) ;
株式会社は、(i) ;
終わり ;
form1の場合 . 幅< ; 次いで100 form1の . 幅:= 800 ; / /サイズの間違ったパラメータは、デフォルト値を設定した場合 – デフォルト
form1の場合 . 高さ< ; 次いで100 form1の . 高さ:= 600 ;
devicestoupdatestatus:= IntToStr(RM [deviceindex] . Adrha)+ ‘ – ‘ + IntToStr(RM [deviceindex] . ADRL) ;
現在のステータスRoomManager探し/ /リミット/他のデバイスを除外
/ /制限UTILISATION用の単一装置パンネルをチェック
/ /選択RoomManager時間が少ないCPUとサーバのeHouseの唯一のステータスを確認
outputbuttonnames(deviceindex) ; / /初期化ボタンとラベル名 – ブーツ , ボタンやテキストラベル
form1の . キャプション:= ‘ eHouseコントロールパネル: ‘ + RM [deviceindex] . devnameを ; RoomManager名のメインフォームの/ /セットキャプション – ヘッダーには、フォームRoomManagerの名前が表示されます
Timer1の . 間隔:= 3000 ; / /設定をミリ秒単位で周期的タスクの間隔
Timer1の . 有効:=真 ; / /(ステータスアップデートの自動タスクを起動
K:= 1 ;
buttonindex:= 0 ; / /現在のボタン(可視)インデックス – の現在の数(見かけ)
行:= 0 ; 行に/ /現在のボタン – 現在の行の現在のキーの数
/ /列:= 0 ;
alignx:=(Form1の . clientWidth – (行)*(buttonwidth + Xspace))ディビジョン2 ; / /センターパネル上のボタン – センタリングブロックボタン
のi:= 0をForm1 . ComponentCountその – 1 / /出力ボタン自動セットアップ – 自動的に[終了]ボタンを設定する
Form1上の各オブジェクトの/ /を開始 – Form1のすべての要素の
(form1の場合 . コンポーネント[i])とTPanelですし、/ /オブジェクトがTPanel(我々のボタン)である場合 – もしオブジェクト型TPanel(ボタン)
始まる
もしcomparetext((form1の . コンポーネントの[i]はTPanelなど) . 名前 , ‘ 出力 ‘ + IntToStr(K))= 0 THEN / /(出力)名が構成されている場合
始まる
行:= buttonindex MOD(行) ; / /行と列のインデックスを計算 – 列と行の座標を算出する
コラム:= buttonindex DIV(行) ;
場合は、長さ(OutputNames〔k – 1])> ; 0の場合、/ /名前だけでouputをボタンを示してい – 名前だけが表示されるボタンを示しています
始まる
(Form1の . コンポーネントの[i]はTPanelなど) . 左:= alignx +行*(buttonwidth + Xspace) ; / /計算X軸possition – X軸での位置を計算する
(Form1の . コンポーネントの[i]はTPanelなど) . トップ:= yoffsetouts +列*(buttonheight + yspace) ; / / Y軸possitionを計算 – Y軸での位置を計算します
(Form1の . コンポーネントの[i]はTPanelなど) . 幅:= buttonwidth ; / /設定されている幅のボタン – ボタンの幅
(Form1の . コンポーネントの[i]はTPanelなど) . 高さ:= buttonheight ; / /設定ボタンの高さ – ボタンの量
(Form1の . コンポーネントの[i]はTPanelなど) . キャプション:= Outputnames [K – 1] ; / /セットボタンのキャプション – ボタンのテキストを設定します。
(Form1の . コンポーネントの[i]はTPanelなど) . Bevelinner:= bvRaised ;
(Form1の . コンポーネントの[i]はTPanelなど) . BevelOuter:= bvRaised ;
(Form1の . コンポーネントの[i]はTPanelなど) . フォント . サイズ:=フォントサイズ ; / /設定されたフォントサイズ]ボタン – ボタンのフォントサイズを設定します
株式会社(buttonindex) ; 目に見える/ /次へボタン – 次を参照してください。
終わり
ほかに
始まる
(Form1の . コンポーネントの[i]はTPanelなど) . 目に見える:=偽 ; / /いいえ名=ボタンを表示しません – 名を指定せずにキーを削除
終わり ;
株式会社(k)は ; / /次へボタン – 横にあるボタン
終わり ;
終わり ;
終わり ;
/ / / / / / / / / / / /プログラムの同じボタン – 同様にボタンのためのプログラムを起動する
buttonindex:= 0 ;
K:= 1 ;
のi:= 0をForm1 . ComponentCountその – 1〜
始まる
(form1の場合 . [コンポーネント] [i]はTPanel)
始まる
もしcomparetext((form1の . コンポーネントの[i]はTPanelなど) . 名前 , ‘ プログラム ‘ + IntToStr(K))= 0
始まる

行:= buttonindex MOD(行) ;
コラム:= buttonindex DIV(行) ;
場合は、長さ(ProgramNames〔k – 1])> ; その後0
始まる
(Form1の . コンポーネントの[i]はTPanelなど) . 左:= alignx +行*(buttonwidth + Xspace) ;
(Form1の . コンポーネントの[i]はTPanelなど) . トップ:= yoffsetprograms +列*(buttonheight + yspace) ;
(Form1の . コンポーネントの[i]はTPanelなど) . 幅:= buttonwidth ;
(Form1の . コンポーネントの[i]はTPanelなど) . 高さ:= buttonheight ;
(Form1の . コンポーネントの[i]はTPanelなど) . キャプション:= Programnames [K – 1] ; プログラムのために/ /セットボタンのキャプションボタン – プログラムボタンの名前を設定します
(Form1の . コンポーネントの[i]はTPanelなど) . Bevelinner:= bvRaised ;
(Form1の . コンポーネントの[i]はTPanelなど) . BevelOuter:= bvRaised ;
(Form1の . コンポーネントの[i]はTPanelなど) . フォント . サイズ:=フォントサイズ ;
株式会社(buttonindex) ;
終わり
ほかに
始まる
(Form1の . コンポーネントの[i]はTPanelなど) . 目に見える:=偽 ;
終わり ;

株式会社(k)は ;
終わり ;
終わり ;
終わり ;

K:= 1 ;
buttonindex:= 0 ;
/ / Alignx:=(Form1の . clientWidth – (Labelrows *(labelwidth + labelresultsize + Xspace)))ディビジョン2 ;
/ / / / / / / Analogicalyラベル用 – 同様に , ラベル
のi:= 0をForm1 . ComponentCountその – 1〜
始まる
(form1の場合 . [i]はその後)TLabelコンポーネントである
始まる
もしcomparetext((form1の . TLabelなどのコンポーネント[i])と . 名前 , ‘ ラベル ‘ + IntToStr(K))= 0
始まる

行:= buttonindex MOD(labelrows) ;
コラム:= buttonindex DIV(labelrows) ;
場合は、長さ(LabelNames〔k – 1])> ; 0 THEN / /ラベ​​ルのテキストの長さがあれば> ; ; 0 – 説明がある場合
始まる
(Form1の . TLabelなどのコンポーネント[i])と . 左:= alignx +行*(labelwidth + labelresultsize + Xspace) ; / /計算するX場所
(Form1の . TLabelなどのコンポーネント[i])と . トップ:= yoffsetlabel +列*(labelheight + yspace) ; / / Y位置を計算
(Form1の . TLabelなどのコンポーネント[i])と . 幅:= labelwidth ;
(Form1の . TLabelなどのコンポーネント[i])と . 高さ:= labelheight ;
(Form1の . TLabelなどのコンポーネント[i])と . キャプション:= LabelNames [K – 1] ; / / /ラベ​​ルのキャプションを割り当て – ヘッダーの適切な標識
(Form1の . TLabelなどのコンポーネント[i])と . フォント . 色:= clwhite ; ラベルのための/ /セットのデフォルトの色 – ラベルの既定の色を設定します
posの場合( ‘ [ – % ] ‘ , LabelNames〔k – 1])> ; 次に0(form1の . TLabelなどのコンポーネント[i])と . フォント . 色:= clyellow ; 光測定のための/ /設定された色 – カラー照明の測定のための
posの場合( ‘ [ % ] ‘ , LabelNames〔k – 1])> ; 次に0(form1の . TLabelなどのコンポーネント[i])と . フォント . 色:=さくら ; %を/ /セット色測定 – 興味のある値の色
posの場合( ‘ [C] ‘ , LabelNames〔k – 1])> ; 次に0(form1の . TLabelなどのコンポーネント[i])と . フォント . 色:= clwhite ; 温度管理のために/ /設定された色 – 色温度の値について
(Form1の . TLabelなどのコンポーネント[i])と . フォント . サイズ:= labelfontsize ; / /設定されたラベルのフォントサイズ – テキストラベルのフォントサイズを設定します
株式会社(buttonindex) ; / /次に、表示されるラベル – ラベルは横に表示されます
終わり
ほかに
始まる
(Form1の . TLabelなどのコンポーネント[i])と . 目に見える:=偽 ; / /なしでテキストラベルを隠す – textuせずにラベルを非表示
終わり ;
株式会社(k)は ; / /次のラベル – 次のラベル
終わり ;
終わり ;
終わり ;
update_status ; / /更新ログから現在のデバイスの状態のためのパネル – アップデートサーバーのeHouseからログファイルのドライバのステータス
終わり ;
オート後の最終結果 – 設定され、ボタンの配置やプログラムによって莫大な要素を削除する(それらが原因で出力のアクセスまたは使用の権利の制限のパネルにしたくない場合) .
 フォーム上の要素の自動配布の最終的な効果
続きを読む: ホームオートメーション – コントローラ eHouse
ホームオートメーション eHouse ホームオートメーションメーカー