teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記

2020/11/19 04:24

投稿

YAmaGNZ
YAmaGNZ

スコア10607

answer CHANGED
@@ -11,4 +11,43 @@
11
11
  ![サンプル](1390502718a1755723c24c7fceb9eb0c.png)
12
12
  このような形で表示できます。
13
13
 
14
- もし、上図のようにLabelの背景をFormの背景と同じではなく別の色とするのであれば、透過するフォームのほうにその背景の領域だけその色でなんらかの形で描画する形になります。
14
+ もし、上図のようにLabelの背景をFormの背景と同じではなく別の色とするのであれば、透過するフォームのほうにその背景の領域だけその色でなんらかの形で描画する形になります。
15
+
16
+ ### 追記
17
+
18
+ タイマーの処理ですが
19
+ ```VBNET
20
+ Private t As Timers.Timer
21
+
22
+ Private Sub TimerStart()
23
+ t = New Timers.Timer(15)
24
+ AddHandler t.Elapsed, AddressOf Timer_Elapsed
25
+
26
+ t.Start()
27
+ End Sub
28
+
29
+ Private Sub Timer_Elapsed(sender As Object, e As EventArgs)
30
+ Static prevtime As DateTime = Now
31
+ Console.WriteLine($"{(Now - prevtime).TotalMilliseconds}ms")
32
+ prevtime = Now
33
+ End Sub
34
+
35
+ ```
36
+ このような処理を実行してみれば分かるのですが、まれに間隔が30ms等長い時があります。
37
+ こういった時にかくつくように感じるのではないでしょうか。
38
+
39
+ ```VBNET
40
+ Private Sub TaskStart()
41
+ Static prevtime As DateTime = Now
42
+ Task.Run(Sub()
43
+ While True
44
+ Console.WriteLine($"{(Now - prevtime).TotalMilliseconds}ms")
45
+ prevtime = Now
46
+
47
+ Threading.Thread.Sleep(15)
48
+ End While
49
+ End Sub)
50
+ End Sub
51
+ ```
52
+ このように別スレッドで動作させた場合は、実行間隔にそれほどのばらつきは出ないと思います。
53
+ 実際にどのような処理で文字を移動させているのかは分かりませんが、もしタイマーの実行間隔のばらつきによるかくつきなのであれば効果はあるのではないでしょうか。

1

追記

2020/11/19 04:23

投稿

YAmaGNZ
YAmaGNZ

スコア10607

answer CHANGED
@@ -1,1 +1,14 @@
1
- 全体を半透明化したいだけなのであれば、UpdateLayerdWindowではなく[Form.Opacityプロパティ](https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.form.opacity?view=netframework-4.8)を設定してはどうですか?
1
+ 全体を半透明化したいだけなのであれば、UpdateLayerdWindowではなく[Form.Opacityプロパティ](https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.form.opacity?view=netframework-4.8)を設定してはどうですか?
2
+
3
+ とりあえずUpdateLayerdWindowを使用しない方法ですが
4
+ フォームを2つ用意します。
5
+ Form1は半透明にするフォーム、こちらには半透明として表示するものを配置します。
6
+ そしてOpacityプロパティを設定して半透明にします。
7
+
8
+ Form2は背景を単色(例えばColor.Black)とし、TransparencyKeyプロパティを利用してその単色を透明にするようにし。Form1をownerとしてForm1と同じ位置に表示します。
9
+
10
+ そうすれば
11
+ ![サンプル](1390502718a1755723c24c7fceb9eb0c.png)
12
+ このような形で表示できます。
13
+
14
+ もし、上図のようにLabelの背景をFormの背景と同じではなく別の色とするのであれば、透過するフォームのほうにその背景の領域だけその色でなんらかの形で描画する形になります。