AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Canvas eines TJvPanel

Ein Thema von DevilsCamp · begonnen am 12. Jul 2005 · letzter Beitrag vom 13. Jul 2005
Antwort Antwort
DevilsCamp
(Gast)

n/a Beiträge
 
#1

Problem mit Canvas eines TJvPanel

  Alt 12. Jul 2005, 07: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
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Problem mit Canvas eines TJvPanel

  Alt 12. Jul 2005, 12:33
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.
Andreas
  Mit Zitat antworten Zitat
DevilsCamp
(Gast)

n/a Beiträge
 
#3

Re: Problem mit Canvas eines TJvPanel

  Alt 13. Jul 2005, 07:09
Zitat von shmia:
Ich weiss nicht, ob das JvPanel das Event OnPaint besitzt, aber das wäre der richtige Ort für alle
Zeichenausgaben.
Besitzt es.

Muss ich mal testen.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz