Einzelnen Beitrag anzeigen

DevilsCamp
(Gast)

n/a Beiträge
 
#1

Problem mit Canvas eines TJvPanel

  Alt 12. Jul 2005, 08:19
Ich habe folgendes Formular:
Delphi-Quellcode:
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
Es ist also eine Form mit einem TPageControl und 2 Tabsheets.
im 2. TabSheet existiert eine TJvPanel Komponente, die im Gegensatz zum Standard TPanel auch ein TCanvas besitzt.

Ich habe folgenden QuellCode dazu:
Delphi-Quellcode:
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_WasAnderesthen begin

// QuellCode uninteressant

  end;

// -------------------------------------
// - Irgendwas
// -------------------------------------
  if JvPageControl1.ActivePage.Name='TS_Irgendwasthen 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.
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.
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?
  Mit Zitat antworten Zitat