![]() |
Komponentenentwicklung mit Delphi7
Hallo,
ich habe mal kurz eine Frage zu Komponentenentwicklung mit Delphi7. Ich bin gerade dabei eine kleine Komponente zu schreiben, womit ich Diagramme zeichnen kann. Das Diagramm ist zwar noch nicht ganz fertig, aber ich wollte schon mal schauen, wie das ganze als Komponente aussieht. Jetzt habe ich festgestellt, das ich die Komponente nur eingeschränkt nutzen kann. Wenn ich Sie auswähle, dann funktioniert zwar alles, aber wenn ich die Komponente dann auf meine Form ziehe, dann kommt ein kleiner viereckiger Kasten. Wie kann ich es machen, das wie bei der Image Komponente alles erzeugt wird (auch nicht zur laufzeit.) wenn ich bei einer image komonente die eigenschaft picture ändere, dann passiert das sofort. wie kann ich das mit meiner Komponente machen. achso hier mein code den ich bis jetzt habe. das diagramm wird in einem Image gezeichnet. mit canvas CODE:
Delphi-Quellcode:
Mit freundlichen Grüßen
var i : TImage;
r : Boolean; begin // Parameter setzen i:=Image1; r:=True; // Rahmen zeichnen if r=True then begin i.Canvas.Rectangle(0, 0, i.Width, i.Height); end; // Achsen zeichnen i.Canvas.MoveTo(30, 30); i.Canvas.LineTo(30, i.Height - 30); i.Canvas.LineTo(i.Width - 30, i.Height - 30); Christian18 |
Re: Komponentenentwicklung mit Delphi7
Delphi-Quellcode:
Das Ganze in einem Codeabschnitt, der immer dann ausgeführt wird, wenn die Parameter von i geändert werden. Also entweder in den Setter-Methoden der entsprechenden Propertys oder evtl. im OnPaint. (Wobei OnPaint wahrscheinlich viel zu oft, und zur falschen Zeit ausgeführt wird...)
Height := i.Height;
Width := i.Width; |
Re: Komponentenentwicklung mit Delphi7
Hallo,
von welcher Basisklasse hast Du Dein Komponente abgeleitet? Grüße |
Re: Komponentenentwicklung mit Delphi7
Zitat:
ich habe es von der Basis Klasse TComponent abgeleitet. Ist das falsch??? |
Re: Komponentenentwicklung mit Delphi7
so hier ist mein kompletter code den ich bis jetzt habe.
Delphi-Quellcode:
PS: Mit den Code ist es immernoch so, das wenn ich die Komponente auf meine Form lege, das dann ein kleines Viereck erscheint und nicht wie bei einem Label der Text. wenn ich bei den eigenschaften den Rand auf True setze, dann würde ich gerne das auch sehen. also wie kann ich das machen???
unit Diagramm;
interface uses SysUtils, Classes, ExtCtrls; type TComponent1 = class(TComponent) private FRand : Boolean; procedure Diagramm(); { Private-Deklarationen } protected { Protected-Deklarationen } public { Public-Deklarationen } published property Rand : Boolean Read FRand Write FRand; { Published-Deklarationen } end; procedure Register; implementation procedure Register; begin RegisterComponents('Standard', [TComponent1]); end; procedure TComponent1.Diagramm(); var i : TImage; begin i:=TImage.Create(self); // Rahmen zeichnen if FRand=True then begin i.Canvas.Rectangle(0, 0, i.Width, i.Height); end; // Achsen zeichnen i.Canvas.MoveTo(30, 30); i.Canvas.LineTo(30, i.Height - 30); i.Canvas.LineTo(i.Width - 30, i.Height - 30); end; end. MFG Christian18 |
Re: Komponentenentwicklung mit Delphi7
Hallo,
von TComponent abgeleitete Komponenten sind nicht visual, d. h. sie werden nicht gezeichnet. Beispiele dafür sind Sockets, Datenbankverbindungen, OpenDialog... Was Du machen willst benötigt als Basisklasse mindestens TControl, hier besser TGraphicControl. Bei dieser Komponente hast Du eine Eigenschaft Canvas, mit der Du zeichnen kannst. Außerdem können TControls auf Tastendruck/Mausbewegung reagieren (Interaktion). Gruß xaromz |
Re: Komponentenentwicklung mit Delphi7
und wie würde der quellcode dann aussehen wenn er danach umgebaut wird???
|
Re: Komponentenentwicklung mit Delphi7
Erstmal leitest du ihn von TGraphicControl ab.
Deinen Graphen kannst du dann entweder direkt auf das Canvas des GraphicControls zeichnen, oder du kopiert das Canvas aus deinem geposteten Code auf das Canvas des GraphicControls. die Höhe und Breite der Komponente musst du trotzdem anpassen. |
Re: Komponentenentwicklung mit Delphi7
Zitat:
|
Re: Komponentenentwicklung mit Delphi7
HI,
ich bins nochaml. ich habe es jetzt mal versucht. jetzt habe ich zwar schon mal ein anderes objekt auf meiner form, aber wenn ich die eigenschaft rand auf true setze, dann passier immernoch nicht. was habe ich falsch gemacht??? hier mein code:
Delphi-Quellcode:
unit Diagramm;
interface uses SysUtils, Classes, Forms, ExtCtrls, Controls; type TDiagramm = class(TGraphicControl) private FForm : TForm; FRand : Boolean; FHeight : Integer; FWidth : Integer; procedure Diagramm(); { Private-Deklarationen } protected { Protected-Deklarationen } public { Public-Deklarationen } published property Form : TForm Read FForm Write FForm; property Rand : Boolean Read FRand Write FRand; property Height : Integer Read FHeight Write FHeight; property Width : Integer Read FWidth Write FWidth; { Published-Deklarationen } end; procedure Register; implementation procedure Register; begin RegisterComponents('Standard', [TDiagramm]); end; procedure TDiagramm.Diagramm(); begin // Rahmen zeichnen if FRand=True then begin Canvas.Rectangle(0, 0, Width, Height); end; // Achsen zeichnen Canvas.MoveTo(30, 30); Canvas.LineTo(30, Height - 30); Canvas.LineTo(Width - 30, Height - 30); end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:20 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