ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年4月28日(日) 04:56

全ての表示時間は UTC+09:00 です




新しいトピックを投稿する  トピックへ返信する  [ 9 件の記事 ] 
作成者 メッセージ
 記事の件名: 透明なウィンドウ
投稿記事Posted: 2005年10月18日(火) 20:20 
オフライン

登録日時: 2005年7月17日(日) 09:36
記事: 36
お住まい: 千葉県松戸市
Win98でも動くような透明なウィンドウを作りたいのですがどうすればよいのでしょうか。どなたかアドバイスお願いします。


通報する
ページトップ
 記事の件名: Re: 透明なウィンドウ
投稿記事Posted: 2005年10月18日(火) 20:46 
オフライン

登録日時: 2005年5月31日(火) 13:31
記事: 205
お住まい: 大阪市
> Win98でも動くような透明なウィンドウを作りたいのですがどうすればよいのでしょうか。どなたかアドバイスお願いします。

透過ウィンドウは確か2000/XPしか対応してなかったと思いますが・・・
実現できたとしても大変な作業になるかと思うのですが・・・

こんな答え方ですいません。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2005年10月19日(水) 07:49 
オフライン

登録日時: 2005年5月31日(火) 17:59
記事: 899
お住まい: 東京都
実はそういうことをするためのライブラリがあるんですね。C++用ですが。
http://www.ksky.ne.jp/~seahorse/libgw/
しかしこれはウィンドウを半透明にするためのライブラリです。
BingoManさんは透明にしたいと言っていますが、完全な透過で良ければリージョンを使う方法もあります。
http://www.kumei.ne.jp/c_lang/sdk2/sdk_126.htm


通報する
ページトップ
 記事の件名: Re: 透明なウィンドウ
投稿記事Posted: 2005年10月19日(水) 13:27 
オフライン

登録日時: 2005年5月31日(火) 10:52
記事: 264
お住まい: 高知
引用:
> Win98でも動くような透明なウィンドウを作りたいのですがどうすればよいのでしょうか。どなたかアドバイスお願いします。

Crimson Forest

こちらにActiveBasicでアルファブレンドを行う関数がありますので
半透明ウィンドウを自作することができると思います。

手順は

1.ウィンドウ全体の画像を取得。

2.デスクトップの画像を取得。

3.ウィンドウにデスクトップの画像を貼り付け。

4.ウィンドウに元のウィンドウ画像をアルファブレンドで貼り付け。


通報する
ページトップ
投稿記事Posted: 2005年10月19日(水) 18:44 
オフライン

登録日時: 2005年7月25日(月) 13:27
記事: 893
お住まい: 埼玉県東松山市
透明なウインドウっていうのは全く見えないのですか?
それでしたら、ウインドウ作成系のディレクティブを書かなければいいと思うのですが。
#promptとか#consoleとか。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2005年10月19日(水) 23:00 
オフライン

登録日時: 2005年7月17日(日) 09:36
記事: 36
お住まい: 千葉県松戸市
ご返事どうもありがとうございます。

実は、「ウィンドウ自体は透明でも、その透明なウィンドウをクリックしたりすることができるようなもの」を作ろうと思っていました。

半透明ウィンドウもやってみたのですが、この前やったときは「透過ウィンドウ」にチェックを入れていたためうまく動きませんでした(そのウィンドウ自体をクリックできないなど)。
そこで今日改めてやってみたところ正常に動きました(winXPですが)。

言葉不足ですみませんでした。


通報する
ページトップ
投稿記事Posted: 2005年10月20日(木) 02:23 
オフライン

登録日時: 2005年7月25日(月) 13:27
記事: 893
お住まい: 埼玉県東松山市
コード:
Dim VirWindowPos As RECT'仮想ウインドウのグローバル位置
VirWindowPos.top=0
VirWindowPos.bottom=400
VirWindowPos.left=0
VirWindowPos.right=600
Dim VirButton1Pos As RECT'仮想ボタンのローカル位置
VirButton1Pos.top=50
VirButton1Pos.bottom=350
VirButton1Pos.left=50
VirButton1Pos.right=550
Dim CursorPos As POINTAPI'マウス位置

Function isin(ByRef Glo As RECT,ByRef But As RECT,ByRef Cur As POINTAPI) As Long
    Dim GloBut As RECT
    Dim FlagA As Long
    FlagA=0
    GloBut.top=Glo.top+But.top
    GloBut.left=Glo.left+But.left
    GloBut.bottom=Glo.top+But.bottom
    GloBut.right=Glo.left+Glo.right

    If GloBut.top<Cur.y then FlagA=FlagA+1
    If GloBut.bottom>Cur.y then FlagA=FlagA+1
    If GloBut.left<Cur.x then FlagA=FlagA+1
    If GloBut.right>Cur.x then FlagA=FlagA+1

    If FlagA=4 then isin=-1 else isin=0
End Function
*A
GetCursorPos(CursorPos)
If GetAsyncKeyState(1) And &h8000 Then'左クリックをしたら
    If isin(VirWindowPos,VirButton1Pos,CursorPos)=-1 then
        '仮想ボタン1をクリックした時にする反応
        MsgBox GetDesktopWindow(), "Button1_Clicked"
    End If
    '仮想ボタンを追加したらここに追記する
End IF
If GetAsyncKeyState(2) And &h8000 Then End'ミギクリで終了
goto *A
とりあえずコンパイルは通りました。やってみてください。


通報する
ページトップ
 記事の件名: 透明ウィンドウ
投稿記事Posted: 2005年10月29日(土) 19:59 
オフライン

登録日時: 2005年7月17日(日) 09:36
記事: 36
お住まい: 千葉県松戸市
返事が遅くなりましてすみません。

konisi様のプログラムを早速コンパイル&実行させていただきました。

確かにクリックには反応するのですが、その時に透明なウィンドウの下のウィンドウまでクリックに反応してしまいました。

ウィンドウの特定の領域だけを無効にしたりできないかと調べてみましたが、なかなか見つかりませんでした。

なにかよい方法はありますでしょうか。よろしくお願いいたします。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2005年10月29日(土) 20:52 
WinXPで次のようにしたらできました。Win98でも多分できると思います。
なお、***の部分はプロジェクト名に応じて変更してください。

MainWnd.sbp
コード:
'-----------------------------------------------------------------------------
'  イベント プロシージャ
'-----------------------------------------------------------------------------
' このファイルには、ウィンドウ [MainWnd] に関するイベントをコーディングします。
' ウィンドウ ハンドル: hMainWnd

' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。

Function MainWndProc(hWnd As DWord, dwMsg As DWord, wParam As DWord, lParam As DWord) As DWord
	' TODO: この位置にウィンドウメッセージを処理するためのコードを記述します。

	' イベントプロシージャの呼び出しを行います。
	
	Select Case dwMsg
	Case WM_PAINT, WM_NCPAINT, WM_ERASEBKGND
		
		If dwMsg=WM_PAINT Then
			ValidateRect(hWnd,Byval NULL)
		End If
		
		MainWndProc=0
		Exit Function
	

	End Select

	MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam)

End Function

'-----------------------------------------------------------------------------
' ここから下は、イベントプロシージャを記述するための領域になります。

Sub MainWnd_Destroy()
	***_DestroyObjects()
	PostQuitMessage(0)
End Sub
***.wndファイル
コード:
WINDOW:MainWnd
    HANDLE    = hMainWnd
    POINT     = -2147483648,-2147483648
    SIZE      = 480,360
    CAPTION   = ""
    STYLE     = &H80000000
    EXSTYLE   = &H00000028
    ID        = 0
    BGCOLOR   = 15
    FONT      = -12,0,0,0,400,0,0,0,128,3,2,1,32,"MS Pゴシック"
    CLASS     = "NORMAL"
    CALLBACK  = MainWndProc
    TYPE      = 0
    FILEPATH  = MainWnd.sbp
END


通報する
ページトップ
   
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 9 件の記事 ] 

全ての表示時間は UTC+09:00 です


オンラインデータ

このフォーラムを閲覧中のユーザー: Bing [Bot], Semrush [Bot] & ゲスト[16人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean