AGB  ·  Datenschutz  ·  Impressum  







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

Grafische Komponente in Delphi entwickeln

Offene Frage von "Wheelie"
Ein Thema von Wheelie · begonnen am 26. Mai 2004 · letzter Beitrag vom 26. Jun 2004
Antwort Antwort
Wheelie

Registriert seit: 21. Okt 2003
Ort: Dresden
177 Beiträge
 
#1

Grafische Komponente in Delphi entwickeln

  Alt 26. Mai 2004, 11:53
Hi!

Für eine Facharbeit soll ich eine Pendel-Komponente entwickeln. Wie ich ein Pendel simuliere weiß ich, nur bin ich mir nicht genau sicher, von welcher Klasse ich meine neue Komponente ableiten soll (TCustomControl, TWinControl, TGraphicControl) und wie ich die Basis für eine Canvas schaffe.

Meine Denkansätze gingen in die Richtung, dass ich im Konstruktor der Komponente eine PaintBox erstelle, deren Größe der Größe der Komponente anpasse und der PaintBox anschließend ein OnPaint-Ereignis zuweise. Wenn ich allerdings versuche auf die Canvas der PaintBox zu zeichnen, bekomme ich folgende Fehlermeldung: "Element '' hat kein übergeordnetes Fenster"

Danke für alle Tipps
  Mit Zitat antworten Zitat
AlphaBug

Registriert seit: 2. Mär 2004
Ort: hinterm Transistor 246 gleich links
46 Beiträge
 
Delphi 6 Enterprise
 
#2

Re: Grafische Komponente in Delphi entwickeln

  Alt 26. Mai 2004, 12:35
Hi Wheelie,

Also wenn die Komponente nur etwas darstellen soll reicht TGraphicControl.
Ansonsten leite die Komponente von TCustomControl ab.
Beide besitzen eine Paint-Methode, die du einfach überschreibst.

Die Paintbox wird NICHT benötigt. Im Übrigen rührt die Fehlermeldung daher,
dass du, wahrscheinlich , folgenden Code vergessen hast:

Paintbox.Parent := PendelKomponente; Noch einige Tipps:
* Ich nehme an, dass das Pendel animiert sein soll --> Benutz dafür Threads, nicht Timer.
* Benutz ein TBitmap im Speicher für die Zeichenvorgänge und
kopiere das Bitmap auf den Canvas (Paint-Methode).
Delphi 4ever !
  Mit Zitat antworten Zitat
shmia

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

Re: Grafische Komponente in Delphi entwickeln

  Alt 26. Mai 2004, 12:37
Du solltest deine Pendelkomponente von TGraphicControl ableiten
und die Procedure Paint überschreiben.
Sonst hast du immer das Problem, dass du nicht steuern kannst, auf welchem Parent
dein Control zu liegen kommt.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Grafische Komponente in Delphi entwickeln

  Alt 26. Mai 2004, 12:58
für die graphichen Komponenten die ich bisher gebastelt hab, hab ich entweder TCustomControl, oder TWinControl genommen. Wobei du dir auch gedanken machen solltest ob die Componente ein Handle haben soll oder nicht

Wenn deine Komponente teilweise transparent sein soll würde ich empfehlen einen Vorfahren zu nehmen der kein Handle hat. Also TGraphicControl (wobei ich da meist TControl nehme). Wenn die Componente ein handle haben soll dann wäre TCustomControl wieder eine gescheite ausgangsbasis...
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Wheelie

Registriert seit: 21. Okt 2003
Ort: Dresden
177 Beiträge
 
#5

Re: Grafische Komponente in Delphi entwickeln

  Alt 25. Jun 2004, 22:09
Danke erstmal für alle Antworten. Also ich werde die Kompo von TGraphicControl ableiten. Ich weiß nur noch nicht, wie ich die Prozedur OnPaint überschreiben kann. Eine PaintBox will ich nun auch nicht mehr verwenden, sondern gleich auf die Canvas zeichnen. Aber bei jedem Versuch auf die Canvas zuzugreifen, bekomme ich die Fehlermeldung "Element '' hat kein übergeordnetes Fenster".

Mal ein ganz einfaches Beispiel, bei dem bei mir prompt eine Fehlermeldung kommt:
Delphi-Quellcode:
unit TPhPendel;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls;

type
  TPendel = class(TGraphicControl)
  private
    { Private-Deklarationen }
  protected
    { Protected-Deklarationen }
  public
    { Public-Deklarationen }
    constructor Create(AOwner: TComponent); override;
  published
    { Published-Deklarationen }
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Beispiele', [TPendel]);
end;

constructor TPendel.Create;
begin
  inherited Create(AOwner);
  Canvas.Rectangle(5, 5, 10, 10);
end;

end.
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#6

Re: Grafische Komponente in Delphi entwickeln

  Alt 26. Jun 2004, 05:55
Man sollte hier ein TGraphicControl eindeutig einem TWinControl vorziehen.
Ein TWinControl hat ein eigenenes Fenster und damit ist die Komponente nicht mehr transparent zu bekommen.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Grafische Komponente in Delphi entwickeln

  Alt 26. Jun 2004, 07:53
der Fehler liegt bei
Canvas.Rectangle(5, 5, 10, 10); Zum Zeitpunkt des Create hat die Komponente noch kein Parent und somit auch keine Canvas und somit kommt ein fehler. Man sollte in jedem fall soetwas in der Paint-Methode machen um sicherzustellen das eine Canvas vorhanden ist denn Paint wird nur aufgerufen wenn auch eine Canvas vorhanden ist
Delphi-Quellcode:
TPendel = class(TGraphicControl)
  private
    { Private-Deklarationen }
  protected
    { Protected-Deklarationen }
  public
    { Public-Deklarationen }
    constructor Create(AOwner: TComponent); override;

    procedure Paint; override;
  published
    { Published-Deklarationen }
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Beispiele', [TPendel]);
end;

constructor TPendel.Create;
begin
  inherited Create(AOwner);
end;

procedure TPendel.Paint;
begin
  //eventuell noch "inherited Paint" wenn du die ursprüngliche Paintmehtode ausführen willst
  Canvas.Rectangle(5, 5, 10, 10);
end;

Warum bist du eigentlich von TWinControl auf TGraphiccontrol umgestiegen? TWinControl hat ein Handle, TGraphiccontrol nicht und somit zeichnet sich deine Komponente immer auf das Parentcanvas...
Wenn deine Componente auch einen Button überdecken können soll würde ich von TCustomControl ableiten, dann hast du auch ein Handle...
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#8

Re: Grafische Komponente in Delphi entwickeln

  Alt 26. Jun 2004, 18:02
Ich glaube so ein Pendel soll spaeter mit anderen Komponenten interagieren koennen.
Als TWinControl sitzt es aber in einem eigenen Fenster fest und kann nicht transparent sein.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Grafische Komponente in Delphi entwickeln

  Alt 26. Jun 2004, 18:09
Hmm, das kommt jetzt eben drauf an was mit dem Pendel alles geplant ist. Wenn man dem Pendel ein Hintergrundbild noch zuweist dann bräuchte man es auch nicht transparent.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  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 17:48 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