Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Komponentenentwicklung mit Delphi7 (https://www.delphipraxis.net/58545-komponentenentwicklung-mit-delphi7.html)

Christian18 8. Dez 2005 17:43


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:
  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);
Mit freundlichen Grüßen

Christian18

hanselmansel 8. Dez 2005 17:54

Re: Komponentenentwicklung mit Delphi7
 
Delphi-Quellcode:
Height := i.Height;
Width := i.Width;
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...)

Sepp 8. Dez 2005 17:56

Re: Komponentenentwicklung mit Delphi7
 
Hallo,

von welcher Basisklasse hast Du Dein Komponente abgeleitet?


Grüße

Christian18 8. Dez 2005 18:36

Re: Komponentenentwicklung mit Delphi7
 
Zitat:

Zitat von Sepp
Hallo,

von welcher Basisklasse hast Du Dein Komponente abgeleitet?


Grüße

Hallo Sepp,

ich habe es von der Basis Klasse TComponent abgeleitet. Ist das falsch???

Christian18 8. Dez 2005 18:46

Re: Komponentenentwicklung mit Delphi7
 
so hier ist mein kompletter code den ich bis jetzt habe.

Delphi-Quellcode:
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.
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???

MFG Christian18

xaromz 8. Dez 2005 18:57

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

Christian18 8. Dez 2005 19:08

Re: Komponentenentwicklung mit Delphi7
 
und wie würde der quellcode dann aussehen wenn er danach umgebaut wird???

hanselmansel 8. Dez 2005 19:11

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.

Christian18 8. Dez 2005 19:14

Re: Komponentenentwicklung mit Delphi7
 
Zitat:

Zitat von hanselmansel
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.

kannst du das mal kurz für mich machen weil ich jetzt gar nicht mehr durchsehe. bei mir läuft gerade nichts mehr.

Christian18 8. Dez 2005 19:29

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 16:29 Uhr.
Seite 1 von 2  1 2      

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