Einzelnen Beitrag anzeigen

BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Konzeptionsfrage zu Komponente mit dynamischen Propertys

  Alt 4. Aug 2009, 10:25
Naja meinte grob, dass ich sie auf Arbeit in die Toolpalette integrieren kann und per Ziehen auf die Form bringe = Komponente. Denke da sicherlich noch etwas zu kompliziert wegen Unterscheidung Klasse und Komponente. Aber wie sieht es mit meinem Konzept aus? ist dies prinzipell machbar oder empfiehlt sich eventuell ein einfacherer Weg?
eine weitere Frage wäre, von welcher Komponente wäre das ableiten der Unterklasse sinnvoll? Ich meine bisher habe ich meistens von TComponent abgleitet, welches (wie ich mir vorstellen kann) dem Spruch "Mit Kanonen auf Spatzen schießen" nahe kommen könnte. Hier mal kurz eine Grobstruktur, wie ich mir das Vorstelle:

Delphi-Quellcode:
unit Unit1;

interface

uses Controls, Classes;

Type TOsziloscopKanal = class(TWinControl)
  private
    xWert, yWert: Array of Integer;
    iXMax, iYmax: integer;
    procedure SetXWert(iWert: integer);
    procedure SetYWert(iWert: integer);
    function GetXWert: integer;
    function GetYWert: integer;
    procedure moveArray(temparray: array of integer);
  protected
  published
  public
    property EingangX: integer read GetXWert write SetXWert;
    property EingangY: integer read GetYWert write SetYWert;
    constructor create(AOwner: TComponent; DisplayWide, DisplayHeight: integer); reintroduce;
    destructor destroy; override;
end;

implementation

constructor TOsziloscopKanal.Create;
begin
  inherited create;
  SetLength(xWert, DisplayWide);
  iXmax := DisplayWide - 1;
  SetLength(yWert, DisplayHeight);
  iYmax := DisplayHeight -1;
end;

destructor TOsziloscopKanal.Destroy;
begin
  SetLength(xwert, 0);
  SetLength(yWert,0);
  inherited destroy;
end;

//Procedure verschiebt ein Array so, dass die letzte Stelle überschrieben werden kann
procedure TOsziloscopKanal.moveArray(temarray: array of integer);
var i: integer;
begin
  for i := 0 to Length(temparray)-2 do temparray[i] := temparray[i+1]
end;

// Es werden immer nur die letzen Werte gesetzt
procedure TOsziloscopKanal.SetXWert(iWert: Integer);
begin
  moveArray(xwert);
  xWert[iXmax] := iWert;
end;

// Es werden immer nur die letzen Werte gesetzt
procedure TOsziloscopKanal.SetYWert(iWert: Integer);
begin
  moveArray(yWert);
  YWert[iYmax] := iWert;
end;

function TOsziloscopKanal.GetXWert;
begin
  // muss noch überdacht werden, da man je nach angabe eines y einen x-Wert bekommen soll
end;

function TOsziloscopKanal.GetYWert;
begin
  // muss noch überdacht werden, da man je nach angabe eines x einen y-Wert bekommen soll
end;

end.
[Code ist komipilierfähig, aber hab es noch nicht eingebunden, könnten sicherlich noch Fehler drin sein]

Wie gesagt, die Frage ist, ob von der Klasse TComponent abgleitet werden muss (hat ja viele Dinge z.B. Wnd, was ich nicht wirklich brauche) oder gibt es dort Klassen, die geeigneter sind?

[Edit]Die Frage ist jetzt eigentlich genau, wie creiere ich das jetzt genau in meiner nächsten Klasse/ wie halte ich das ganze EINDEUTIG, so das die Unterscheidbarkeit gewahrt bleibt? Wie erzeuge ich namen, denn ich brauche ja wieder MyComponentX := TOsziloscopKanal.Create(...)? Da hänge ich jetzt. Also mir ist schon klar, dass ich die Eindeutigkeit über die Namen behalte, aber ich muss das ja auch der höheren Funktion vorher sagen, dass ich dies will. Oder kann ich dort einfach ein Array of TOsziloscop machen?[/Edit]
2. Account Sero
  Mit Zitat antworten Zitat