AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Delphi Komponenten in TurboDelphi (Win32) verwenden

Komponenten in TurboDelphi (Win32) verwenden

Ein Tutorial von Balu der Bär · begonnen am 8. Sep 2006 · letzter Beitrag vom 10. Mär 2011
Antwort Antwort
Seite 3 von 3     123
Balu der Bär
Komponenten in TurboDelphi (Win32) installieren / verwenden


Seit ein paar Tagen stellt Borland bzw. DeveloperToolsGroup(DTG) bereits TurboDelphi zum Download bereit, und so wie die Server die ersten Tage ausgelastet waren, denke ich mal haben bereits einige Leute TurboDelphi in Benutzung. Das wohl größte Manko der kostenlosen TurboDelphi-Version ist aber, dass man keine Third-Party-Komponenten oder andere Packages installieren (bzw. in die IDE integrieren) kann. Für Neueinsteiger in die Welt der Komponenten und deren Verwendung soll dieses kleine Tutorial dienen.

In diesem Tutorial verwende ich zur Veranschaulichung die Komponente TScrollingCredits, welche man im Anhang findet und herunterladen kann.

Möglichkeit 1: Komponenten non-visuell benutzen

Generell können wir also keine Komponenten in die IDE integrieren (üblicherweise) und damit arbeiten. Aber wen stört das schon? Immerhin können wir die Komponenten immernoch zur Laufzeit des Programmes erzeugen, d.h. wir binden sie einfach direkt per Quelltext ein.

1. Die meisten Komponenten (oder jedenfalls recht viele) liegen in direkter Quelltextform vor, dass heißt als *.pas-Datei. So auch in unserem Beispiel TScrollingCredits. Entpackt das Archiv und kopiert die Unit credits.pas in das TurboDelphi-Bibliotheksverzeichnis (standardmäßig X:\Programe\Borland\BDS\4.0\lib) oder erstellt in den Delphi-Optionen einen neuen Bibliothekspfad zu dem Ordner, in dem die Unit (*.pas) liegt. Diesen Pfad erstellt man folgendermaßen: Hauptmenüpunkt "Tools" => "Optionen" => Unterpunkt "Bibliothek - Win32". An dieser Stelle ist das Hinzufügen einen neuen Bibliothekspfades möglich. Soviel zur externen Arbeit.

2. Als nächstes starten wir TurboDelphi und legen als erstes ein neues VCL-Formularprojekt an. Jetzt weiß Delphi natürlich noch nicht in welcher Unit unsere Komponente liegt, d.h. wir müssen die Unit zuerst einmal in die uses-Liste unseres Formulares aufnehmen. Wenn ihr meine Schritte parallel verfolgt, sollte der Projektquelltext jetzt ungefähr so aussehen:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Credits (* unsere Unit *);
3. Jede Komponente ist lediglich eine Instanz einer Klasse, in unserem Fall heißt unsere Klasse TScrollingCredits, welche in der bereits erwähnten Unit credits.pas zu finden ist. Also müssen wir - wenn wir eine neue Komponente erzeugen wollen - eine Instanz von der Klasse TScrollingCredits ableiten. Dazu wechseln wir am besten in das Codefenster von unserem Hauptformular. Um eine neue Komponente abzuleiten behandeln wir sie einfach wie jedes andere Objekt oder Variable auch, in dem wir sie erstmal deklarieren. Die Komponente deklarieren wir am besten im private- oder public-Abschnitt des Formulares. Ungefähr so sollte euer Code jetzt aussehen:
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
   MeineCredits : TScrollingCredits; //Komponentenname und von welchem Typ sie abgeleitet wird (Klasse)
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation
4. Erst jetzt beginnt die eigentliche Arbeit für Delphi, indem wir die Komponente nun erstellen lassen. Dazu besitzt jede Komponente die Methode .Create, welche wir lediglich aufrufen müssen. Dabei muss beachtet werden, dass wir nicht die Methode .Create unserer Komponente MeineCredits aufrufen können, sondern die .Create Methode der Klasse TScrollingCredits, da MeineCredits zu diesem Zeitpunkt noch keine Methoden hat bzw. MeineCredits ja noch gar nicht vorhanden ist, da wir es ja erst jetzt erzeugen wollen. Eventuell erwartet manche Komponente als Parameter einen Typen AOwner als Übergabewert. Dies ist in diesem eher kurz ausgelegten Tutorial nicht großartig von Bedeutung, ich selbst nehme meistens self, jede andere von TComponent abgeleitete Geschichte ist hier aber möglich.
Delphi-Quellcode:
procedure TForm2.FormCreate(Sender: TObject);
begin
 MeineCredits := TScrollingCredits.Create(self); //Komponente wird erstellt
end;
5. Kompilieren und erzeugen wir nun unser Projekt sehen wir jedoch noch nichts, d.h. dass Form ist immernoch leer - von der eben erzeugten Komponente keine Spur. Dies liegt daran das Delphi mit der Komponente noch gar nichts anfangen kann, da wir noch gar keine Werte / Einstellungen getätigt haben. Woher soll Delphi wissen auf welches Objekt und an welche Position es die Komponente legen soll? Das klären wir ganz Quick & Dirty hier:
Delphi-Quellcode:
with MeineCredits do
  begin
    Parent := Self; //Die Komponente braucht ein Elternelement, auf welchem die Komponente abgelegt wird
    Height := 100; //Setze Höhe, Breite, Position von oben & Position von links der Komponente
    Width := 200;
    Top := 20;
    Left := 20;
  end;
6. Wenn wir jetzt das Projekt kompilieren und erzeugen sind wir am Ziel, die Komponente liegt brav auf den Form und verrichtet ihren Dienst. Natürlich sind weitere Einstellungen jederzeit per Quelltext möglich, Optionen können getätigt werden und alles sollte so sein wie normal im Designer. Everything is possible, fällt mir da spontan ein. Alles in allem könnte man also sagen wir haben lediglich den Objektinspektor gegen den Codeeditor eingetauscht. Hier nochmal der gesamte Quelltext des Projektes, für die, die zu faul zum Schreiben oder Lesen sind.
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Credits;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
   MeineCredits : TScrollingCredits; //Komponentenname und von welchem Typ sie abgeleitet wird (Klasse)
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  MeineCredits := TScrollingCredits.Create(self);
  with MeineCredits do
  begin
    Parent := Self;
    Height := 100;
    Width := 200;
    Top := 20;
    Left := 20;
  end;
end;

end.
Ich hoffe dieses Tutorials ist halbwegs nützlich für euch; da es mein erstes Delphi-Tutorial ist, bitte ich um etwas Nachsicht.

04.10.2006: Änderungen vorgenommen
Angehängte Dateien
Dateityp: rar tscrollingcredits_253.rar (4,3 KB, 79x aufgerufen)
 
Nelphin

 
Turbo Delphi für Win32
 
#21
  Alt 1. Nov 2009, 18:29
Hallo,

ich habe das Tutorial mit der Komponente CoolTrayIcon ausprobiert und soweit auch hinbekommen.
sieht etwa so aus:

Delphi-Quellcode:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, CoolTrayIcon, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);


  private
    { Private-Deklarationen }
    MeinIcon : TCoolTrayIcon;

  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
MeinIcon := TCoolTrayIcon.Create(self); //also hier wird dann die Instanz geboren
MeinIcon.MinimizeToTray:=true; // und hier werden Eigenschaften vergeben
MeinIcon.Hint:='Mein Icon';
MeinIcon.Icon.LoadFromFile('G:\Icons\temp.ico');
MeinIcon.Enabled:=true;
end;
jetzt hab ich das problem das mein icon auf das ereignis "on click" reagieren muß (da muß dann MeinIcon.ShowMainForm; rein)
aber ich komme ja an das Ereignis "On Click" nicht dran, weil ich keinen Objektinspektor habe...

Meine Frage ist also, wie ich an die Ereignisse von Drittkomponenten herankomme, ohne Objektinspector.

Ach ja, ich bin Anfänger und würde mich über leicht verständliche Antworten sehr freuen!

Danke!

Nelphin
  Mit Zitat antworten Zitat
Benutzerbild von patti
patti

 
Turbo Delphi für Win32
 
#22
  Alt 1. Nov 2009, 18:34
Dazu kannst du ein eigenes Ereignis definieren und dies mit dem "OnClick"-Ereignis der Komponente verknüpfen. Dir Procedure, die du erstellst, muss die gleichen Paramter haben. Bei einem OnClick müsste das nur "Sender : TObject" sein:

Delphi-Quellcode:
private // des Formulars
  procedure OwnClick(Sender : TObject);
Beim OnCreate:

MeinIcon.OnClick := OwnClick; // Zuweisung des Ereignisses Und dann halt noch

Delphi-Quellcode:
procedure TForm1.OwnClick(Sender : TObject);
begin
    // der Code für das OnClick-Ereignis
end;
(ungetestet, sollte gehen )

MFG
Patti

Edit: kleine Anpassungen...
Patrick Kreutzer
  Mit Zitat antworten Zitat
Nelphin

 
Turbo Delphi für Win32
 
#23
  Alt 1. Nov 2009, 18:52
vielen Dank!!!!

hat geklappt!
  Mit Zitat antworten Zitat
Benutzerbild von patti
patti

 
Turbo Delphi für Win32
 
#24
  Alt 1. Nov 2009, 18:55
Kein Problem
Der Vollständigkeit halber sollte vielleicht noch erwähnt werden, dass du deine per Hand erstellte Instanz der Komponente beim OnDestroy der Form wieder freigeben solltest (z.B. mit .Free). Dank der Speicherverwaltung etc. von Windows wäre das wohl nicht unbedingt notwendig, aber besser (weil "sauberer") ist es trotzdem, wenn du sie wieder freigibst.

Patti
Patrick Kreutzer
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#25
  Alt 1. Nov 2009, 19:33
Zitat von patti:
Der Vollständigkeit halber sollte vielleicht noch erwähnt werden, ...
Muß er nicht unbedingt.

TCoolTrayIcon.Create(self) Das Self ist hier seine Form und somit gibt er diese als Owner an
und der Owner kümmert sich auch um die Freigabe aller seiner Kinder.

Wenn sie von TComponent abgeleitet sind, denn diese Komponenten tragen sich in die Components-Liste ihres Owners ein und beim .Destroy arbeitet dieser seine Liste ab und gibt alle dort registrierten Objekte mit frei.
  Mit Zitat antworten Zitat
fox67

 
Turbo Delphi für Win32
 
#26
  Alt 10. Mär 2011, 11:38
komisch ich kann in turbodelphi komponenten installieren aber es klappt nicht immer
  Mit Zitat antworten Zitat
WM_CLOSE

 
RAD-Studio 2009 Pro
 
#27
  Alt 10. Mär 2011, 12:38
Das kann nicht sein, TurboDelphi hat keine Importfunktion für Komponenten.
Außerdem solltest du auf die Aktualität des Threads achten! Der ist schließlich fast 1,5 Jahre alt!
  Mit Zitat antworten Zitat
Benutzerbild von Jacques Murell
Jacques Murell

 
Turbo Delphi für Win32
 
#28
  Alt 10. Mär 2011, 12:58
Über die dclusr kann man heute wie auch damals weiterhin problemlos Komponenten in die IDE integrieren.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#29
  Alt 10. Mär 2011, 13:06
Die allererste TDE-Version hatte einen "Fehler", wodurch sowas angeblich doch gehn sollte.
Offiziell ist es eben "nicht erlaubt" ... es war halt eine der Beschränkungen, aber dafür war's eben kostenlos.
  Mit Zitat antworten Zitat
Benutzerbild von Jacques Murell
Jacques Murell

 
Turbo Delphi für Win32
 
#30
  Alt 10. Mär 2011, 13:10
Zitat:
Offiziell ist es eben "nicht erlaubt"
Offiziell nicht erlaubt ist das Hinzufügen neuer Packages; jedoch nicht das Hinzufügen neuer Packages in ein bereits existierendes installiertes Package.
  Mit Zitat antworten Zitat
Themen-Optionen Tutorial durchsuchen
Tutorial durchsuchen:

Erweiterte Suche
Ansicht

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 06:21 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