ウェブブラウザコントロールで表示するページないにフォームを作って、
そのフォームのないようを、中のSubmitボタンなどから受け取るには
どういうふうにすればいいんでしょう?
Submitを押すと、データはHTTPサーバに送られます。
VBのような実行ファイルの場合、CGIにして
HTTPサーバからデータを渡してもらう必要があります。
VBの場合、標準で標準入力が使えませんので、
うけとるだけなら環境変数を使うほうが楽です。
返す必要があるなら、APIで標準出力使ってください。
う゛…。
スタイルシートのテンプレート用の設定をさせたいだけなのに、そこまですることになるとは…。
うーん、JScriptとかでファイルを保存してもらって、そこから読み取るようにします。
結果、方法を変えてしまってごめんなさい。
スタイルシートを作るのが目的なら、
Environ 関数でHTTPサーバから
環境変数受け取って、CSSファイルを
Webフォルダに吐き出すだけでいいかも・・・
でも、「更新」押さないと反映されないような・・・。
スタイルシートの作成ウィザードの1ページみたいな感じで…。
>Webフォルダに吐き出すだけでいいかも・・・
たしかに、でもそれも、
>でも、「更新」押さないと反映されないような・・・。
この理由で…^^;
まあ練習がてらにDHTMLを使った方法のほうをやってみようかと思います。
(bodyのスタイルを変えてスクロールバーの色を変えたり文字色を変えたり…)
参考までに・・・
VBを使ったCGIの例です。
根性がないので、今回は環境変数経由で取得してます。
ついでにBCC(Borland C++)の例もあげてます。
適当に作ってますから、エラー処理してません。(^_^;
テストにあたっては、HTTPサーバ(Apache,IISなど)を立てて、
CGIの設定をしてください。そして、CGI用フォルダに
コンパイル済みのEXEファイルを置き、
WebフォルダにHTMLファイルを置いて、
CGIMenu.htmlをダブルクリックして実行してください。
コンパイル時の注意
エラー処理してませんので、コンパイル前のソースを
エディトモードで実行したり、
EXEファイルを直接実行したりしないでください。
メモリアクセス違反で落ちます。
VBコンパイル時の注意
起動時にデフォルトで用意されるFormモジュールを開放し、
かわりに標準モジュールを用意して、その中に
コードを書いて、コンパイルしてください。
BCCコンパイル時の注意。
とくになし。
ふだんWinアプリばかり作っている人は
-Wオプションはずすの忘れずに・・・。
=========================================================
呼出元HTMLの呼出元ソースの例(CGIMenu.html)
---------------------------------------------------------
<html>
<head>
<title>CGIてすと</title>
</head>
<body>
<center><h1>CGIてすとめにゅー<br></h1></center>
<a href="http://localhost/~say_home/VBCGITest.html">VBCGITest</a><br>
<a href="http://localhost/~say_home/BCCCGITest.html">BCCCGITest</a><br>
</body>
</html>
=========================================================
VB呼出元HTMLソース(VBCGITest.html)
---------------------------------------------------------
<HTML>
<HEAD>
<TYTLE>VB CGI TEST<BR><BR></TYTLE>
</HEAD>
<BODY>
<center><h1>VB CGI TEST</h1></center><br><br>
入力:
<FORM method="get" enctype="text/plain" action="cgi-bin/VBCGI01.exe">
Text1:<INPUT type="text" name="Text1" value="aaa" size="14" maxlength="14"><BR><BR>
Text2:<INPUT type="text" name="Text2" value="bbb" size="14" maxlength="14"><BR><BR>
<INPUT type="submit" value="VBCGIGET"><BR>
<INPUT type="reset" value="キャンセル">
</FORM>
<BR>
</BODY>
</HTML>
=========================================================
BCC呼出元HTMLソース(BCCCGITest.html)
---------------------------------------------------------
<HTML>
<HEAD>
<TYTLE>BCC CGI TEST<BR><BR></TYTLE>
</HEAD>
<BODY>
<center><h1>BCC CGI TEST</h1></center><br><br>
入力:
<FORM method="get" enctype="text/plain" action="cgi-bin/BCCCGI01.exe">
Text3:<INPUT type="text" name="Text3" value="ccc" size="14" maxlength="14"><BR><BR>
Text4:<INPUT type="text" name="Text4" value="ddd" size="14" maxlength="14"><BR><BR>
<INPUT type="submit" value="BCCCGIGET"><BR>
<INPUT type="reset" value="キャンセル">
</FORM>
<BR>
</BODY>
</HTML>
=========================================================
VB CGI ソース(コンパイル後は VBCGI01.exe)
---------------------------------------------------------
Option Explicit
'標準入出力用の宣言部
Private Declare Function GetStdHandle Lib "kernel32" _
(ByVal nStdHandle As Long) As Long
Private Declare Function ReadFile Lib "kernel32" _
(ByVal hFile As Long, lpBuffer As Any, _
ByVal nNumberOfBytesToRead As Long, _
lpNumberOfBytesRead As Long, _
lpOverlapped As Any) As Long
Private Declare Function WriteFile Lib "kernel32" _
(ByVal hFile As Long, ByVal lpBuffer As String, _
ByVal nNumberOfBytesToWrite As Long, _
pNumberOfBytesWritten As Long, _
lpOverlapped As Any) As Long
Public Const STD_INPUT_HANDLE = -10&
Public Const STD_OUTPUT_HANDLE = -11&
Public Const INVALID_HANDLE_VALUE = -1&
Dim mlngStdInHandle As Long
Dim mlngStdOutHandle As Long
Private Function stdinit() As Long
'標準入出力ハンドル取得
Dim lngStdInHandle As Long
Dim lngStdOutHandle As Long
mlngStdInHandle = GetStdHandle(STD_INPUT_HANDLE)
If mlngStdInHandle = INVALID_HANDLE_VALUE Then
MsgBox "Error STD_INPUT_HANDLE"
End If
mlngStdOutHandle = GetStdHandle(STD_OUTPUT_HANDLE)
If mlngStdOutHandle = INVALID_HANDLE_VALUE Then
MsgBox "Error STD_OUTPUT_HANDLE"
End If
End Function
Private Function puts(strOutString As String) As Long
'標準出力
Dim lngStringLength As Long
Dim lngResultBytes As Long
Dim Buffer As String
strOutString = strOutString & vbCrLf
lngStringLength = LenB(StrConv(strOutString, vbFromUnicode)) + 2
puts = WriteFile(mlngStdOutHandle, strOutString, lngStringLength, lngResultBytes, ByVal 0&)
End Function
Private Function gets(strInString As String) As Long
'標準入力
Dim lngStringLength As Long
Dim lngResultBytes As Long
Dim dummy0
Dim faleMsg As String
faleMsg = "Sorry&"
dummy0 = Environ("CONTENT_LENGTH")
If IsNumeric(dummy0) = False Then
strInString = faleMsg & "NotNumeric"
gets = 0
Else
lngStringLength = CLng(dummy0)
If lngStringLength > 0 Then
strInString = Space(lngStringLength)
gets = ReadFile(mlngStdInHandle, strInString, lngStringLength, lngResultBytes, ByVal 0&)
Else
strInString = faleMsg & "NullString"
gets = 0
End If
End If
End Function
Private Function ReadHTML(array0)
Dim strInString As String
If Environ("REQUEST_METHOD") = "GET" Then '環境変数で取得
array0 = Split(Environ("QUERY_STRING"), "&")
ElseIf Environ("REQUEST_METHOD") = "POST" Then '標準入力で取得 '標準入力で取得
Call gets(strInString)
array0 = Split(strInString, "&")
Else 'GET POST 以外
array0 = Split("Sorry&Cant Get", "&")
End If
End Function
Private Function WriteHTML(array0)
' MsgBox "put now"
' puts "HTTP/1.1 200 OK" & vbCrLf
puts "content-type: text/html"
puts ""
puts "<html>"
puts " <head>"
puts " <title>"
puts " たいとる"
puts " </title>"
puts " </head>"
puts " <body>"
puts " <center><h1>VBCGIなかみ</h1></center><br>"
puts " <hr>"
puts array0(0) & "<br>"
puts array0(1) & "<br>"
puts " </body>"
puts "</html>"
End Function
Sub Main()
Dim array0
Call stdinit
Call ReadHTML(array0)
Call WriteHTML(array0)
End Sub
=========================================================
BCC CGI ソース(コンパイル後は BCCCGI01.exe)
---------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void ReadHTML(char *array0,int *array1)
{
//HTML Formからのデータリード
//今回はGETのみ対応
int i ;
strcpy(array0, getenv("QUERY_STRING"));
for(i = 0;i<256;i++)
{
if(*(array0 + i) == '&')
{
*(array0 + i) = '\0';
*array1 = (int)array0 + i + 1;
break ;
};
};
};
void WriteHTML(char *array0,char *array1)
{
puts("content-type: text/html\n");
puts("<html>");
puts(" <head>");
puts(" <title>");
puts(" たいとる");
puts(" </title>");
puts(" </head>");
puts(" <body>");
puts(" <center><h1>BCCCGIなかみ</h1></center><br>");
puts(" <hr>");
puts(array0);puts("<br>");
puts(array1);puts("<br>");
puts(" </body>");
puts("</html>");
}
void main(void)
{
char array0[256];
int array1;
ReadHTML(array0,&array1);
WriteHTML(array0,(char *)array1);
}
=========================================================
感想:こーゆー処理はCのほうがらくだ。(^_^)
ツイート | ![]() |