AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Delphi Komponenten in TurboDelphi (Win32) verwenden
Tutorial durchsuchen
Ansicht
Themen-Optionen

Komponenten in TurboDelphi (Win32) verwenden

Ein Tutorial von Balu der Bär · begonnen am 9. Sep 2006 · letzter Beitrag vom 10. Mär 2011
Antwort Antwort
Seite 2 von 3     12 3      
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)
 
Balu der Bär
 
#11
  Alt 4. Okt 2006, 12:09
Sicherlich ist es noch möglich. Kümmert euch einfach das ihr eine originale dclusr.dpk ranbekommt, d.h. eine die bei der ersten TD-Version dabei war. Mehr hat Borland nicht geändert, lediglich die BORLAND_SIG wurde aus der dclusr entfernt. Habt ihr eine solche Version geht wieder alles. Doch das wurde bereits breit in der DP diskutiert, bitte benutzt einfach die Forensuche. In diesem Thread geht es um das Einbinden von Komponenten zur Laufzeit, und nicht das Installieren von Komponenten in die IDE. Danke.
  Mit Zitat antworten Zitat
scout01

 
Turbo Delphi für Win32
 
#12
  Alt 4. Okt 2006, 19:26
vielen dank schonmal

Ich bin gerade von der Arbeit nach Hause gekommen und werde mich direkt ransetzen

scout
  Mit Zitat antworten Zitat
Benutzerbild von thkerkmann
thkerkmann

 
Delphi 2010 Professional
 
#13
  Alt 4. Okt 2006, 19:52
@Balu:

Das geht aber doch schöner:

1) Die Instanzenvariable gehört in die private section der Form Deklaration.
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    MeineCredits : TScrollingCredits;
  public
    { Public-Deklarationen }
  end;
2) Bei der Zuweisung von Parent würde ich nicht Form1 schreiben, sondern Self. Vielleicht heist mein Form ja frmKlausDieter.
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  MeineCredits : TScrollingCredits;
begin
  MeineCredits := TScrollingCredits.Create(self);
  with MeineCredits do
  begin
    Parent := Self;
    Height := 100;
    Width := 200;
    Top := 20;
    Left := 20;
  end;
end;
3) Das Ding wird nicht deshalb nicht sichtbar, weil wir die Position nicht festgelegt haben, sondern weil das Parent noch nicht gesetzt war.

Ansonsten:
Ich find es gut, dass Du dir die Mühe mit diesem Tut gemacht hast. Es wird vielen die mit den Turbos probieren wollen weiterhelfen.

Gruss

Thomas.
Thomas Kerkmann
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

 
Delphi 2009 Professional
 
#14
  Alt 4. Okt 2006, 21:17
Schönes Tutorial, und ich hätte es kaum besser gemacht

Zitat von thkerkmann:
@Balu:

Das geht aber doch schöner:

1) Die Instanzenvariable gehört in die private section der Form Deklaration.
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    MeineCredits : TScrollingCredits;
  public
    { Public-Deklarationen }
  end;
Eine Frage: Warum nicht in den obersten (Name?) Abschnitt? In diesen tut doch die IDE eh alle Komponenten rein, und (ggf. ist es dir schon aufgefallen), kannst du, wenn du von außen "guckst", auf alle Komponenten zugreifen, die mit der IDE erstellt wurden, weil sie sich im obersten Abschnitt befinden.

Zitat von thkerkmann:
3) Das Ding wird nicht deshalb nicht sichtbar, weil wir die Position nicht festgelegt haben, sondern weil das Parent noch nicht gesetzt war.
Einfach mal geraten: Ist es nicht beides? Weil (meiner Meinung nach), lassen sich 0 Px, selbst im größten Zoom (Zoomfaktor * 0 = 0) nicht anzeigen. Kann sein, dass ich mich täusche (Ich hoffs nicht ^^)

Zitat von Balu der Bär:
Sicherlich ist es noch möglich. Kümmert euch einfach das ihr eine originale dclusr.dpk ranbekommt, d.h. eine die bei der ersten TD-Version dabei war. Mehr hat Borland nicht geändert, lediglich die BORLAND_SIG wurde aus der dclusr entfernt. Habt ihr eine solche Version geht wieder alles.
Ähm... Ich bin mir da nicht sicher, aber ist das überhaupt noch legal? Ich habe mir die Lizenz nicht angeguckt, aber immerhin würdet ihr ja X € für jedes Duplikat der dclusr.dpk Borland "wegnehmen"
Ups... Übersehen Einfach ignorieren...
Fabian
  Mit Zitat antworten Zitat
Balu der Bär
 
#15
  Alt 4. Okt 2006, 21:22
@thkerkmann: Danke dir, ich werde das Tutorial bei Gelegenheit überarbeiten, dann fließen deine Anregungen mit ein.

@xZise: Nochmal bitte ich dich, keine Diskussion mehr über die dclusr in diesem Thread. Wenn es dich wirklich so brennend interessiert dann schreib es in einen der anderen X Threads, oder lass es gleich sein und denk nochmal drüber nach. Danke.
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

 
Delphi 2009 Professional
 
#16
  Alt 4. Okt 2006, 21:35
Wäre net, wenn du jetzt noch sagen könntest:
1. Meine Fragen beantworten
2. Was ist nun "besser"? Also welches hält sich eher an den StyleGuide?

Zitat von Balu der Bär:
@xZise: Nochmal bitte ich dich, keine Diskussion mehr über die dclusr in diesem Thread. Wenn es dich wirklich so brennend interessiert dann schreib es in einen der anderen X Threads, oder lass es gleich sein und denk nochmal drüber nach. Danke.
Sry... Vergessen, aber wir belassens dabei und nach dem . (Punkt) is dann schluss damit
==> .
Fabian
  Mit Zitat antworten Zitat
Balu der Bär
 
#17
  Alt 4. Okt 2006, 21:39
Zitat von xZise:
1. Meine Fragen beantworten
2. Was ist nun "besser"? Also welches hält sich eher an den StyleGuide?
Ich denke es gehört schon unter private bzw public, "ganz oben" kommt imho nur die von Delphi verwalteten Komponenten hin.
  Mit Zitat antworten Zitat
Balu der Bär
 
#18
  Alt 4. Okt 2006, 21:56
Da ich den Beitrag nicht mehr editieren konnte, war alcaeus so freundlich eine etwas überarbeitete Version einzufügen.
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

 
Turbo Delphi für Win32
 
#19
  Alt 4. Okt 2006, 22:19
Zitat von Balu der Bär:
Sicherlich ist es noch möglich. Kümmert euch einfach das ihr eine originale dclusr.dpk ranbekommt, d.h. eine die bei der ersten TD-Version dabei war. Mehr hat Borland nicht geändert, lediglich die BORLAND_SIG wurde aus der dclusr entfernt. Habt ihr eine solche Version geht wieder alles. Doch das wurde bereits breit in der DP diskutiert, bitte benutzt einfach die Forensuche. In diesem Thread geht es um das Einbinden von Komponenten zur Laufzeit, und nicht das Installieren von Komponenten in die IDE. Danke.
Bedeutet dieses, dass wenn man ein Package als source hat, und die BORLAND_SIG reinkopiert, dass man dann auch diese Packages verwenden kann?
Günter
  Mit Zitat antworten Zitat
mkinzler

 
Delphi 11 Alexandria
 
#20
  Alt 4. Okt 2006, 22:21
Zitat:
Bedeutet dieses, dass wenn man ein Package als source hat, und die BORLAND_SIG reinkopiert, dass man dann auch diese Packages verwenden kann?
das funktioniert m.W. nur bei dem einen Package.
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 18:05 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