![]() |
Komponenten in TurboDelphi (Win32) verwenden
Liste der Anhänge anzeigen (Anzahl: 1)
Komponenten in TurboDelphi (Win32) installieren / verwenden Seit ein paar Tagen stellt Borland bzw. DeveloperToolsGroup(DTG) bereits TurboDelphi ![]() 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:
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:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Credits (* unsere Unit *);
Delphi-Quellcode:
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.
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
Delphi-Quellcode:
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:
procedure TForm2.FormCreate(Sender: TObject);
begin MeineCredits := TScrollingCredits.Create(self); //Komponente wird erstellt end;
Delphi-Quellcode:
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. :P
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;
Delphi-Quellcode:
Ich hoffe dieses Tutorials ist halbwegs nützlich für euch; da es mein erstes Delphi-Tutorial ist, bitte ich um etwas Nachsicht. ;)
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. 04.10.2006: Änderungen vorgenommen |
Re: Komponenten in TurboDelphi (Win32) verwenden
Da das gestern ein bisschen "Quick & Dirty" war habe ich jetzt nochmal die überarbeitere Version (des zensierten) Tutorials hier hereingestellt.
|
Re: Komponenten in TurboDelphi (Win32) verwenden
moin,
jetzt einmal für dumme bitte. ;) Kann ich das auch auf die Indy´s anwenden? Ich wollte ein Programm das ich irgendwann mal angefangen habe zuende schreiben und das natürlich auch gleich in Turbo-Delphi. Dafür brauche ich die IdHTTP. Wenn ich einfach nur die IdHTTP.pas in mein Projekt mit rein lade fehlen dem noch tausend andere Units. Ich denke mal das mein Ansatz ehh volkommen Falsch ist. Gibts da evt. nen einfachen Tip? Bleibt nur noch zu sagen das ich blutiger anfänger bin und mich für die Frage schonmal im vorhinein entschuldige. :) schonmal danke scout01 |
Re: Komponenten in TurboDelphi (Win32) verwenden
@scout01
Das Problem löst Du, indem Du unter Optionen des Compilers den Suchpfad zu den fehlenden Dateien legst. Anders wird es nicht gehen, außer Du legst die fehlenden Dateien in Dein Projektpfad.(Das ist da, wo Du gerade Dein Programm bearbeitest. Ist aber bei der Menge der Dateien, die Du kopieren müsstest, nicht zu empfehlen.) CU! Go2EITS |
Re: Komponenten in TurboDelphi (Win32) verwenden
Zitat:
Delphi-Quellcode:
uses
idHTTP; ... var HTTP : idHTTP; begin HTTP := TidHTTP.Create(nil); HTTP.Get(URL, data); //Beispiel end; |
Re: Komponenten in TurboDelphi (Win32) verwenden
Zitat:
|
Re: Komponenten in TurboDelphi (Win32) verwenden
Ich merk gerade, ist auch nicht erforderlich. Bei der TD-Installation wurdest du doch gefragt welche Indy-Version installiert werden soll, oder? Dementsprechend sollten die Units auch bereits im lib/Indy9 (oder Indy10) Ordner liegen.
|
Re: Komponenten in TurboDelphi (Win32) verwenden
Hallo,
ich habe Turbo Explorer Delphi für Win32 gesaugt und (auf Win XP SP2) installiert. Danach Hotfix-Rollup installiert. Dann den 2. Teil vom Tutorial exakt so probiert. Beim installieren des Package warf die IDE die Meldung "Das Laden von Drittkomponenten und IDE-Addins ist bei dieser Version nicht lizensiert." Habe dann Turbo deinstalliert und neu installiert, dieses Mal ohne Hotfix-Rollup. Tutorial erneut probiert. Gleiches Ergebnis. Entweder ihr habt andere Versionen oder das Hotfix-Rollup hat es unmöglich/schwerer gemacht. |
Re: Komponenten in TurboDelphi (Win32) verwenden
Zitat:
Borland hat ursprünglich eine Version zum DL freigegeben, bei der das installieren von Dritt-Komponenten noch möglich war, diese dann aber gegen eine Version ausgetauscht, bei der es nicht mehr möglich war. Bei den anderen Versionen wurde diese Möglichkeit mit dem Hotfix-Rollup ebenfalls deaktiviert. |
Re: Komponenten in TurboDelphi (Win32) verwenden
Zitat:
|
Re: Komponenten in TurboDelphi (Win32) verwenden
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.
|
Re: Komponenten in TurboDelphi (Win32) verwenden
vielen dank schonmal :)
Ich bin gerade von der Arbeit nach Hause gekommen und werde mich direkt ransetzen :) scout |
Re: Komponenten in TurboDelphi (Win32) verwenden
@Balu:
Das geht aber doch schöner: 1) Die Instanzenvariable gehört in die private section der Form Deklaration.
Delphi-Quellcode:
2) Bei der Zuweisung von Parent würde ich nicht Form1 schreiben, sondern Self. Vielleicht heist mein Form ja frmKlausDieter.
type
TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private-Deklarationen } MeineCredits : TScrollingCredits; public { Public-Deklarationen } end;
Delphi-Quellcode:
3) Das Ding wird nicht deshalb nicht sichtbar, weil wir die Position nicht festgelegt haben, sondern weil das Parent noch nicht gesetzt war.
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; 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. |
Re: Komponenten in TurboDelphi (Win32) verwenden
Schönes Tutorial, und ich hätte es kaum besser gemacht :D
Zitat:
Zitat:
Zitat:
Ups... Übersehen :D Einfach ignorieren... |
Re: Komponenten in TurboDelphi (Win32) verwenden
@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. ;) |
Re: Komponenten in TurboDelphi (Win32) verwenden
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:
==> . |
Re: Komponenten in TurboDelphi (Win32) verwenden
Zitat:
|
Re: Komponenten in TurboDelphi (Win32) verwenden
Da ich den Beitrag nicht mehr editieren konnte, war
![]() |
Re: Komponenten in TurboDelphi (Win32) verwenden
Zitat:
|
Re: Komponenten in TurboDelphi (Win32) verwenden
Zitat:
|
Re: Komponenten in TurboDelphi (Win32) verwenden
Hallo,
ich habe das Tutorial mit der Komponente CoolTrayIcon ausprobiert und soweit auch hinbekommen. sieht etwa so aus:
Delphi-Quellcode:
jetzt hab ich das problem das mein icon auf das ereignis "on click" reagieren muß (da muß dann MeinIcon.ShowMainForm; rein)
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; 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 |
Re: Komponenten in TurboDelphi (Win32) verwenden
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:
Beim OnCreate:
private // des Formulars
procedure OwnClick(Sender : TObject);
Delphi-Quellcode:
Und dann halt noch
MeinIcon.OnClick := OwnClick; // Zuweisung des Ereignisses
Delphi-Quellcode:
(ungetestet, sollte gehen ;-) )
procedure TForm1.OwnClick(Sender : TObject);
begin // der Code für das OnClick-Ereignis end; MFG Patti Edit: kleine Anpassungen... |
Re: Komponenten in TurboDelphi (Win32) verwenden
vielen Dank!!!!
hat geklappt! :dp: |
Re: Komponenten in TurboDelphi (Win32) verwenden
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 |
Re: Komponenten in TurboDelphi (Win32) verwenden
Zitat:
Delphi-Quellcode:
Das Self ist hier seine Form und somit gibt er diese als Owner an
TCoolTrayIcon.Create(self)
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. |
AW: Komponenten in TurboDelphi (Win32) verwenden
komisch ich kann in turbodelphi komponenten installieren aber es klappt nicht immer
|
AW: Komponenten in TurboDelphi (Win32) verwenden
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! |
AW: Komponenten in TurboDelphi (Win32) verwenden
Über die dclusr kann man heute wie auch damals weiterhin problemlos Komponenten in die IDE integrieren.
|
AW: Komponenten in TurboDelphi (Win32) verwenden
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. |
AW: Komponenten in TurboDelphi (Win32) verwenden
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:09 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