問題タブ [paintbox]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
delphi - DragImage を使用したドラッグ アンド ドロップ中に TPaintBox をペイントする
私のアプリケーション (Delphi 2007) では、項目を ListView から PaintBox にドラッグし、PaintBox の OnPaint ハンドラで対応する領域を強調表示したいと考えています。しかし、私はいつも醜いアーティファクトを手に入れます。それらを取り除く方法について何かアドバイスはありますか?
テスト プロジェクト:新しい VCL アプリケーションを作成し、Unit1.pas のコードを次のコードに置き換えます。次に、アプリを起動し、リスト項目を PaintBox の四角形にドラッグします。
編集:これはグリッチの写真です: DragImage アーティファクト http://img269.imageshack.us/img269/6535/15778780.png
太い境界線を持つ完全な青い長方形が表示されることを期待しています。ただし、ドラッグ イメージの下には、強調表示されていない四角形が表示されます。
編集 2: このサイトでは、「塗装の問題」について説明しています。
ImageList SDK は、ドラッグ画像を描画するときに、描画中に ImageList_DragLeave API 関数を使用してドラッグ画像を非表示にしない限り、更新または画面描画で問題が発生する可能性があることに注意してください (これは、クラスの HideDragImage メソッドが行うことです)。残念ながら、ペイントされているコントロールを所有していない場合、これを行うことは実際にはオプションではありません。
最後の文で述べた問題はありません。それにもかかわらず、ImageList_DragLeave を呼び出すための適切な場所と適切なイメージリスト (私のテスト プロジェクトでは ImageList1 ではない- おそらく ListView1.GetDragImages) を見つけることができませんでした。
delphi - Delphi-TPaintBox-サイズ変更
TPaintBoxのサイズ変更と描画に問題があります。
フォーム(FMainという名前)にTPaintBox(DisplayImageという名前)をドロップしました。フォームのサイズが変更されたときにサイズを変更しようとしています。
そのために、FMain用のOnResize()メソッドを作成しました(正しく呼び出されていることを確認しました)。このメソッドで、DisplayImageのサイズを変更します。
私見最後のコードは、完全な画像の上に完全な画像の緑色の長方形を描画し、事実上常に緑色にする必要があります。代わりに、灰色の画像(Delphiの標準のbg-colorと同じように)が表示され、サイズ変更中に1秒間、緑色の画像が点滅します。
何が欠けていますか、サイズ変更後に更新する必要がある隠れたコンポーネントはありますか?
前もって感謝します、
猛吹雪
delphi - tpanel で tpaintbox を作成する際の問題
少し問題があります。次のように TPanel に TPaintBox を作成しようとしています。
ここで、PaintBox の Parent を Form1 に変更すると、ブラシが表示されます。しかし、親を Panel1 に変更すると、何も起こりません。どうすればこれを修正できますか?
前もって感謝します!
delphi - TPaintBoxの右端のちらつきをなくす方法(サイズ変更時など)
要約:
TFormと2つのパネルがあるとします。パネルはalTopとalClientに配置されます。alClientパネルにはTPaintBoxが含まれており、そのOnPaintには描画コードが含まれます。
コンポーネントのDoubleBufferedのデフォルト値はfalseです。
描画プロセス中、フォーム、パネルはすべて背景をペイントするため、ちらつきは明らかです。
フォームはパネルで覆われているため、WM_ERASEBKGNDメッセージを傍受することはおそらく問題ありません。そうでない場合は、フォームが背景をペイントするため、フォームのサイズが変更されると、パネルでちらつきが見られ、パネルの右端でちらつきが見られます。
次に、alTopパネルは一部のボタンのコンテナとして使用することを目的としているため、DoubleBufferedをtrueに設定して、Delphiにちらつきがないことを確認するのはおそらく問題ありません。おそらくパフォーマンスの負担はそれほど大きくないでしょう。
第3に、alClientパネルは別の図面コンポーネントのコンテナとしてのみ意図されているため、このパネルは最終的な図面の作成に関与していない可能性があります。この点で、標準のTPanelの代わりにTPanelの子孫を使用するのはおそらく良いことです。このTPanelの子孫では、保護されたプロシージャPaintをオーバーライドし、プロシージャ内では何もしません。特に、基本クラスTCustomPanel.PaintのFillRect呼び出しを回避するために、継承された呼び出しは行いません。さらに、WM_ERASEBKGNDメッセージを傍受し、内部では何もしません。これは、TPanel.ParentBackgroundがFalseの場合、Delphiが背景の再描画を担当し、Trueの場合、ThemeServiceが担当するためです。
最後に、TPaintBoxでちらつきなしでペイントするには、次のようにします。
(1)VCL組み込みの描画ルーチンを使用する場合は、おそらく次の方が適切です...
(2)OpenGLを使用し、OpenGLのダブルバッファを有効にします。
(3)..。
=== Q:TPaintBoxの右端のちらつきをなくす方法は?===
1つのTFormに対して、2つのパネルがあるとします。一番上のものはフォームに対してalTopに配置され、ボタンのコンテナと見なされます。もう1つは、フォームに対してalClientに配置され、描画コンポーネント(VCLのTPaintBoxやGraphics32のTPaintBox32など)のコンテナーと見なされます。後者のパネルでは、そのWM_ERASEBKGNDメッセージが傍受されます。
ここで、次のサンプルコードでTPaintBoxインスタンスを使用します。OnPaintハンドラーでは、ちらつきがないと予想される描画を描画するための2つの選択肢があります。選択肢1は、長方形を埋めた後に描画します。親パネルは背景を消去してはならないため、描画はちらつきがないようにする必要があります。選択肢2はTBitmapに描画し、そのCanvasはペイントボックスにコピーされます。
ただし、両方の選択肢がちらつき、2番目の選択肢が特にちらつきます。私の主な関心事は選択1に関するものです。フォームのサイズを変更すると、ちらつきの主要部分が右端で発生していることがわかります。なぜこれが起こるのですか?誰かが理由と可能な解決策についてコメントするのを手伝ってもらえますか?(ここでTPaintBoxの代わりにTPaintBox32を使用すると、右端がまったくちらつきません。)
私の2番目の懸念は、選択肢1を使用すると、ちらつきのごく一部がペイントボックスでランダムに発生することです。あまり明白ではありませんが、フォームのサイズをすばやく変更すると、それでも観察できます。さらに、選択肢2を使用すると、この種のちらつきはさらに深刻になります。その理由はわかりませんでした。考えられる理由と解決策について誰かがコメントするのを手伝ってもらえますか?
どんな提案でも大歓迎です!!
=== Q:パネルの背景の再描画を正しくインターセプトするにはどうすればよいですか?===
(別の質問でこれを尋ねる必要がある場合は、そのように言ってください。これを削除します。)
新しいVCLアプリケーションを作成し、サンプルコードを貼り付け、FormCreateをアタッチし、デバッグを実行します。フォームの上にマウスを置くと、パネルが背景をはっきりと塗り直していることがわかります。ただし、サンプルコードに示されているように、WM_ERASEBKGNDメッセージをインターセプトすることで、この動作をインターセプトする必要があります。
この3行をコメントアウトすると、
次に、WM_ERASEBKGNDメッセージをキャプチャできます。この違いについてはわかりません。
この動作の理由と、WM_ERASEBKGNDメッセージを正しくインターセプトする方法(ParentBackground:= Falseの場合)についてコメントするのに役立つ人がいますか?
delphi - キーイベントのないDelphiPaintBox
私のバージョンのdelphiには、TPaintBoxのキーイベント(OnKeyDown、OnKeyUp、OnKeyPress)イベントがありません。そのようなものを処理したいと思います。誰かがこれらのイベントのペイントボックスを持っていましたか?
delphi - Delphi: TPaintbox をカスタム イメージ サイズのファイルに直接エクスポート/描画する
いくつかのヘルプ関数でサブクラス化ExtCtrls.TPaintBox
し、メソッドをオーバーライドしましたPaint
。TPaintBox
カスタム ペイントボックス オブジェクトとして機能し、目的の出力を描画するフォームに を追加できます。
ここで、ペイントボックスの内容をファイルに描画 (書き込み) したいのですが、サイズが異なります。たとえば、私のアプリケーションの UI 内では、ペイントボックスのサイズは 150x600 (幅 x 高さ) ですが、ファイルに描画するときはそれを大きくする必要があります。
TPaintBox.Paint
描画コード (= ) を再利用して仮想的に描画しan object
、そのオブジェクトをファイルに保存できるようにしたいと考えています。
すでにエクスポートできていますが、エクスポート時にサイズを変更すると、ペイントで拡大したように見えます。
android - Delphi XE5 - Android 搭載マシンの TListBox で TPaintBox のスクロールが遅すぎる
Delphi XE5 で Firemonkey モバイル アプリケーションを作成しています。TPaintBox コンポーネントを使用してテキスト (2000 語以上の特殊文字、表) を表示したいと考えています。TListBox と、内部にTPaintBox を含む特別な TListBoxItem を使用してフォームを作成しましtype TListBoxItemPaintBox = Class(TListBoxItem)
た。アイデアは非常に単純です。TPaintBox でデータを描画し、TListBox でスクロールを処理します。
このアプリを Win32 でコンパイルすると、すべてが完璧に動作し、スクロールも速くなります。しかし、このアプリを Android 搭載の携帯電話でコンパイルすると、アプリが役に立たなくなります。
これが私のアプリの完全なコードです(簡略化されていますが、機能するバージョンです)
Androidでこれを機能させる方法を知っている人はいますか? TPaintBox を使用する適切な方法はありますか、それともまったく別のコンポーネントを使用する必要がありますか?
canvas - ペイントボックスはタイマーメソッドからペイントしませんc ++ビルダーボーランド
Borland C++Builder 6 を使用しています。
次の形式のメソッドが 2 つあります。
最初の方法では、座標系を描画します。
そして2番目の方法で私がした:
線は座標系に表示されません。
2 つ目の質問ですが、線を消してベース ペイントに戻すにはどうすればよいですか? これを行う必要がありますか?
delphi - Delphi で FMX キャンバスに線を引く方法
これは、Delphi Berlin 10.1 Update 2 にあります。
次の作品(線が引かれます):
以下は機能しません。
2枚目はなんで使えないの?どうすれば動作させることができますか、または最初の例のようにストローク ブラシの作成に固執する必要がありますか?
最小限のアプリケーションを含めました:
main.pas
main.fmx:
test.dpr: