![]() |
Problem mit Canvas eines TJvPanel
Ich habe folgendes Formular:
Delphi-Quellcode:
Es ist also eine Form mit einem TPageControl und 2 Tabsheets.
object Tanken_MainF: TTanken_MainF
Left = 0 Top = 0 BorderIcons = [biSystemMenu, biMinimize] BorderStyle = bsSingle Caption = 'Tanken' ClientHeight = 246 ClientWidth = 752 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'Tahoma' Font.Style = [] OldCreateOrder = False Position = poDesktopCenter Scaled = False OnClose = FormClose OnCreate = FormCreate PixelsPerInch = 96 TextHeight = 13 object JvPageControl1: TJvPageControl Left = 0 Top = 0 Width = 752 Height = 246 ActivePage = TS_WasAnderes Align = alClient TabOrder = 0 OnChange = JvPageControl1Change object TS_WasAnderes Caption = 'Was Anderes' end object TS_Irgendwas: TTabSheet Caption = 'TS_Irgendwas' object JvPanel1: TJvPanel Left = 45 Top = 0 Width = 699 Height = 218 MultiLine = False Align = alRight Caption = 'JvPanel1' TabOrder = 0 OnMouseDown = JvPanel1MouseDown OnMouseMove = JvPanel1MouseMove OnMouseUp = JvPanel1MouseUp object JvLabel5: TJvLabel Left = 5 Top = 4 Width = 35 Height = 13 Alignment = taRightJustify Caption = '99,99' HotTrackFont.Charset = DEFAULT_CHARSET HotTrackFont.Color = clWindowText HotTrackFont.Height = -11 HotTrackFont.Name = 'Tahoma' HotTrackFont.Style = [] end object JvLabel6: TJvLabel Left = 11 Top = 199 Width = 29 Height = 13 Alignment = taRightJustify Caption = '0,00' HotTrackFont.Charset = DEFAULT_CHARSET HotTrackFont.Color = clWindowText HotTrackFont.Height = -11 HotTrackFont.Name = 'Tahoma' HotTrackFont.Style = [] end end end end end im 2. TabSheet existiert eine TJvPanel Komponente, die im Gegensatz zum Standard TPanel auch ein TCanvas besitzt. Ich habe folgenden QuellCode dazu:
Delphi-Quellcode:
Wenn ich also auf das TabSheet TS_Irgendwas wechsle, dann soll er eine Senkrechte Linie zeichnen, "Servus" schreiben und dann eine Linie zu den Koordinaten 100,100 zeichnen.
unit main;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, JvExComCtrls, JvComCtrls, MySQL_Connection, JvExControls, JvComponent, JvLabel, JvDateTimePicker, StdCtrls, Mask, JvExMask, JvToolEdit, JvMaskEdit, JvButton, JvTransparentButton, Buttons, JvExButtons, JvBitBtn, DbListViewScrollParentUnit, DbListView, ExtCtrls, JvExExtCtrls, JvPanel; type TForm1 = class(TForm) JvPageControl1: TJvPageControl; MySQL1: TMySQL; JvLabel1: TJvLabel; JvDateTimePicker1: TJvDateTimePicker; JvLabel2: TJvLabel; JvLabel3: TJvLabel; JvLabel4: TJvLabel; JvMaskEdit1: TJvMaskEdit; JvMaskEdit2: TJvMaskEdit; JvMaskEdit3: TJvMaskEdit; JvBitBtn1: TJvBitBtn; DbListView1: TDbListView; JvLabel5: TJvLabel; JvLabel6: TJvLabel; TS_Irgendwas: TTabSheet; TS_WasAnderes: TTabSheet; JvPanel1: TJvPanel; procedure JvPanel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure JvPanel1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure JvPanel1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure JvPageControl1Change(Sender: TObject); private lTanken : array of RTanken; mbdown : Boolean; { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.JvPageControl1Change(Sender: TObject); var s : String; i : Integer; j : Integer; rv : array of Double; max : Double; min : Double; mit : Double; x: Integer; y: Integer; begin if JvPageControl1.ActivePage.Name='TS_WasAnderes' then begin // QuellCode uninteressant end; // ------------------------------------- // - Irgendwas // ------------------------------------- if JvPageControl1.ActivePage.Name='TS_Irgendwas' then begin ClientHeight := 244; ClientWidth := 750; Left := Screen.Width div 2 - Width div 2; Top := Screen.Height div 2 - Height div 2; JvPanel1.Brush.Color := clBlack; JvPanel1.Canvas.Brush.Color := clBlack; x := 5; y := JvLabel5.Top+(JvLabel5.Height div 2); JvPanel1.Canvas.MoveTo(x, y); y := JvLabel6.Top+(JvLabel6.Height div 2); JvPanel1.Canvas.LineTo(x, y); JvPanel1.Canvas.TextOut(100, 100, 'Servus'); JvPanel1.Canvas.LineTo(100, 100); end; end; procedure TForm1.JvPanel1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin mbdown := true; JvPanel1.Canvas.TextOut(100, 100, 'Servus'); JvPanel1.Canvas.MoveTo(x, y); end; procedure TForm1.JvPanel1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin mbdown := false; end; procedure TForm1.JvPanel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if mbdown then JvPanel1.Canvas.LineTo(x, y); Caption := Format('X: %3d, Y: %3d', [X, Y]); end; end. Doch das tut er nicht. Um zu überprüfen ob es überhaupt möglich ist, eine Linie zu zeichnen habe ich die MouseDown, MouseMove und MouseUp Ereignisse bearbeitet. Die funktionieren wie erwartet: Solange die linke Maustaste gedrückt ist zeichnet der fröhlich seine Linien.... Was aber ist falsch, dass er das nicht auch in der PageControl1Change Methode macht? |
Re: Problem mit Canvas eines TJvPanel
Das Event JvPageControl1Change wird aufgerufen, bevor das JvPanel überhaupt sichtbar ist.
Alles, was du in JvPanel.Canvas zeichnet ist nur temporär; wenn du also ein anderes Fenster über das JvPanel drüberziehst (verdecken und aufdecken), dann sind deine Zeichenausgaben weg. Ich weiss nicht, ob das JvPanel das Event OnPaint besitzt, aber das wäre der richtige Ort für alle Zeichenausgaben. |
Re: Problem mit Canvas eines TJvPanel
Zitat:
Muss ich mal testen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz