Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Eigene Uses Unit?! (https://www.delphipraxis.net/116366-eigene-uses-unit.html)

J Kadison 27. Jun 2008 13:31


Eigene Uses Unit?!
 
Moin Moin!

Ich hätte da gerne mal eine Frage!
Hab schon ein paar mal gegoogelt finde aber nichts gescheites, was mir weiterhilft. und zwar:

Bei delphi ist doch oben immer so eine "Uses" Deklaration!
Wie kann ich denn meine eigenen Prozeduren schreiben und mir dann eine eigene Unit einbinden, so dass ich das nur oben
Delphi-Quellcode:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, [b]BenutzerEigene[/b];
eintragen muss und mir die Funktionene, Prozeduren. . . zur Verfügung stehen?!

Bitte leicht verständliche Anleitung für absolute Vollnoobs :stupid:


Danke

STS301 27. Jun 2008 13:34

Re: Eigene Uses Unit?!
 
du erstellst einfach in Delphi eine Unit (kein Projekt), schreibst du gewünschten Funktionen oder Prozeduren hinein, und wenn die Unit in der Uses Liste ist, das kannst du im Hauptprojekt die gewünschten Befehle ausführen

DeddyH 27. Jun 2008 13:34

Re: Eigene Uses Unit?!
 
Ganz einfach: die sog. Prototypen Deiner Funktionen und Prozeduren legst Du im interface-Teil Deiner Unit ab. Damit stehen sie anderen Units zur Verfügung.
Delphi-Quellcode:
unit MeineUnit;

interface

uses Windows;

procedure SagHallo; //Prototyp

implementation

procedure SagHallo;
begin
  MessageBox(0,'Hallo Welt',nil,0);
end;

end.

J Kadison 27. Jun 2008 22:20

Re: Eigene Uses Unit?!
 
hm okay aber wie bekomm ich meine pas in eine dcu?

himitsu 27. Jun 2008 22:23

Re: Eigene Uses Unit?!
 
das mußt du nicht machen ... das macht der Compiler schon automatisch.

J Kadison 27. Jun 2008 22:31

Re: Eigene Uses Unit?!
 
Hä? sorry wenn ich mich jetzt so richtig blöd stell, aber wie macht das denn der Compiler automatisch? hä?

also nochmal für ganz dumme :oops:
  • Ich öffne Delphi
  • neue Unit
  • schreib meine Prozeduren und funktionen rein
  • und wie krieg ich jetzt aus der PAS ne DCU?

"Erzeugen/Compilieren" geht im moment nicht . . .

die DCU will ich nämlich in den Ordner C:\Delphi\lib rein kopieren, damit die IMMER verfügbar ist



:wiejetzt:

Cyf 27. Jun 2008 22:41

Re: Eigene Uses Unit?!
 
Kopier die .pas Rein. Oder mach sie einmal in ein Projekt und kompilier, dann hast du eine .dcu, aber die .pas ist für sowas günstiger, wenn sie nicht grade geheim gehalten werden muss.

himitsu 27. Jun 2008 22:43

Re: Eigene Uses Unit?!
 
Zitat:

Zitat von J Kadison
Hä? sorry wenn ich mich jetzt so richtig blöd stell, aber wie macht das denn der Compiler automatisch? hä?
"Erzeugen/Compilieren" geht im moment nicht . . .

na wenn du as Programm/die Unit kompilierst :zwinker:

Die DCR wird nur von "funktioniernden" Units erstellt ... also dann, wenn diese Unit(PAS) kompiliert wurde.


Zitat:

Zitat von J Kadison
die DCU will ich nämlich in den Ordner C:\Delphi\lib rein kopieren,

dann bring entweder die Unit zum Laufen, oder kopier die PAS dahin.

J Kadison 27. Jun 2008 22:49

Re: Eigene Uses Unit?!
 
Hm ich glaub so langsam kommt was bei mir an :wall:

Naja werd das ganze mal ausprobieren!

ein großes DANKÖÖÖ an alle!!!




Ich würde mal sagen Frage beantwortet

>>> CLOSED <<<

himitsu 27. Jun 2008 23:07

Re: Eigene Uses Unit?!
 
Zitat:

Zitat von J Kadison
die DCU will ich nämlich in den Ordner C:\Delphi\lib rein kopieren

PS: du kannst auch (was ich auch bevorzugen würde) ein eigenes Verzeichnis anlegen, wo du deine eigenen Units (PAS und/oder DCU) drin ablegst.
und fügst dieses Verzeichnis den Suchpfaden hinzu (siehe Delphi-Umgebungsoptionen).

> macht sich für Backups günstiger :zwinker:

3_of_8 27. Jun 2008 23:16

Re: Eigene Uses Unit?!
 
Das ist vor allem auch dann sehr sinnvoll, wenn man z.B. eine neue Delphi-Version installieren will und alle eigenen Units dort haben will. Wenn man alles in lib haut, muss man erst sorgfältig die eigenen Units von den Borland (äh, Borland/Inprise/Borland/CodeGear/Embarcadero, ach, egal)-Units trennen, um nichts neues zu überschreiben.

J Kadison 3. Jul 2008 12:16

Re: Eigene Uses Unit?!
 
Hm sorry aber ich muss mich hier nomma melden :drunken: ich glaub mein Delphi mag mich nicht

Wenn ich's nur mit der unit mache geht's auch aber das problem ist ich möchte eine Procedure zum verschlüsseln machen und somit wäre eine dcu besser als ein bearbeitbares format


Also ich hab jetzt mein Programm geschrieben, hab die Unit genauso gemacht, wie oben beschrieben, jetzt allerdings krieg ich jetzt immer die Fehlermeldung, dass Form1 sich überschneidet, also ich denk mal weil ich meiner erstellten dcu ja auch die Rede von einer Form1 ist.

Delphi-Quellcode:
[Fehler] WARNING. Duplicate resource(s):
[Fehler]  Type 10 (RCDATA), ID TFORM1:
[Fehler]    File C:\Programme\Delphi7\Projects\Unit1.dfm resource kept; file c:\programme\delphi7\meine Units\Cryption.dfm resource discarded.

Wie bekomme ich denn ein Form aus einer Application heraus?
Sorry wenn ich mich jetz mega dumm stell aber ich weiß es nicht bessee :gruebel:

[edit] wer richtig schreiben kann is klar im vorteil xD naja gut dass man editieren kann xD [/edit]



:coder2:



Zitat:


Allerletztes Edit für heut:

also ich habe es jetzt hinbekommen! Nochmal ne kleine Zusammenfassung, wie das ganze jetzt funktioniert für alle die genauso verpeilt sind wie ich! Ist zwar keine Musterlösung aber es funktioniert!


Also Empfehlenswert: In Delphi Umgebungsvariablen einen eigenen Ordner angeben (besser falls das ganze mal gesichert werden sollte)

Erstellt eine Neue Unit (alles andere vorher schließen!)


Zitat:

Delphi-Quellcode:
unit MeineUnit;

interface

uses Windows;

procedure SagHallo; //Prototyp

implementation

procedure SagHallo;
begin
  MessageBox(0,'Hallo Welt',nil,0);
end;

end.
Source: DeddyH


dann speichert ihr das Ganze und schließt es!


Macht eine neue anwendung, und fügt dem Projekt eure Unit hinzu.
Jetzt erstellt ihr diese Anwendung und ihr habt auhc die DCU die ihr geuscht habt
(Tipp: wenn ihr die Anwendung in einem Anderen Ordner erstellt wie die Unit dann habt ihr in dem Ordner der Unit wirklich nur die DCU)

Jetzt müsst ihr nur noch die DFM der erstellten Anwendung in den Ordner der duc kopieren und editieren:

Delphi-Quellcode:
object FormMeineUnit: TFormMeineUnit
  Left = 1
  Top = 1
  Width = 1
  Height = 1
  Caption = 'FormMeineUnit'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
end
(Hinweis: die form muss EINMALIG sein und darf nicht noch einmal vorkommen)



jetzt könnt ihr wenn ihr eine programm schreibt oben in Uses "MeineUnit" hinzufügt jederzeit eure Prozedur SagHallo; aufrufen ohne sie nochmal deklarieren oder so zu müssen




VIEL SPASS EUCH ALLEN NOCH !!!

:bouncing4: :bounce1: :bouncing4: :bounce1:


hitzi 3. Jul 2008 13:04

Re: Eigene Uses Unit?!
 
Hä? Ist nicht dein Ernst, oder? :zwinker:

J Kadison 3. Jul 2008 13:21

Re: Eigene Uses Unit?!
 
Wieso soll das nicht mein ernst sein? hab ich das Ganze jetzt sooooo kompliziert gemacht?
Wenn's ne einfachere Methode gibt fänd' ich's toll wenn das jemand (für ideoten erklärt) reinstellen könnt

hitzi 3. Jul 2008 13:28

Re: Eigene Uses Unit?!
 
1. Erstelle ein Projekt
2. Datei/Neu/Unit
3. Unit bearbeiten und abspeichern
4. Unit in das Projekt über "uses" und dem Unitnamen einbinden
5. Fertig :)

[edit] falls du die Unit nicht im Projektpfad abspeicherst, muss du dem Projekt mitteilen, wo er noch nach der Unit suchen soll (Projekt/Optionen/"Verzeichnisse/Bedingungen"/Suchpfad)

DeddyH 3. Jul 2008 13:29

Re: Eigene Uses Unit?!
 
Auf dem oben beschriebenen Weg bindet man im Normalfall Units mit eigenen Routinen ein, die nichts mit der VCL zu tun haben. Wenn man einfach ein weiteres Formular im Projekt erstellen will, kann man das ganz bequem über das Hauptmenü machen. Ähnlich einfach ist das auch mit Hinzufügen eines bestehenden Formulars zum Projekt. Außerdem zeigt sich wieder einmal, dass man seine Formulare und Komponenten vernünftig benennen sollte, dann sind solche Effekte zumindest unwahrscheinlicher (Form1 könnte es ja öfter geben, frmNeuerBenutzer eher nicht).

J Kadison 3. Jul 2008 13:40

Re: Eigene Uses Unit?!
 
ja ne, dann hab ich aber immernoch das Problem, welches ich oben erwähnt habe:


Zitat:

Delphi-Quellcode:
[Fehler] WARNING. Duplicate resource(s):
[Fehler]  Type 10 (RCDATA), ID TFORM1:
[Fehler]    File C:\Programme\Delphi7\Projects\Unit1.dfm resource kept; file c:\programme\delphi7\meine Units\Cryption.dfm resource discarded.

oder?!

mkinzler 3. Jul 2008 13:45

Re: Eigene Uses Unit?!
 
Du hast die Res sowohl manuell wie auch automatisch {$R} eingebunden

BullsEye 3. Jul 2008 13:54

Re: Eigene Uses Unit?!
 
Mal kleine Zwischenfrage:

Wenn ich eine eigene Procedure habe, warum muss ich dann für jede Koponente dann extra das Formular davorschreiben?


BSP:
Normal:

Delphi-Quellcode:
procedure TfrmMain.FormCreate(Sender: TObject);
begin
Height := 100;
Width := 100;
end;
Eigene:
Delphi-Quellcode:
procedure groesse;
begin
Form1.Height := 100;
Form1.Width := 100;
end;
warum geht da nicht einfach:

Delphi-Quellcode:
procedure groesse;
begin
Height := 100;
Width := 100;
end;
Bei ner eigenen Unit versteh ich das ja wohl noch.. aber warum geht das nicht, wenn das alles in ein und der selben Unit ist?

wazup 3. Jul 2008 13:56

Re: Eigene Uses Unit?!
 
Wenn ich nichts übersehen hab, hat noch niemand erwänd das man auch .PAS-Dateien ins Lib-Verzeichnis einfügen kann :!:
Mach ich übrigends auch immer!

Reinhardtinho 3. Jul 2008 13:58

Re: Eigene Uses Unit?!
 
@BullsEye

Eine Unit ist was anderes als eine Klasse.
Deine Prozedur gehört zu keiner Klasse, woher soll sie wissen welche Klasse oder welches Objekt gemeint ist.

DeddyH 3. Jul 2008 13:59

Re: Eigene Uses Unit?!
 
@BullsEye:
Zitat:

Delphi-Quellcode:
procedure TfrmMain.FormCreate(Sender: TObject);

Das ist eine Methode von TfrmMain.
Zitat:

Delphi-Quellcode:
procedure groesse;

Das ist eine Prozedur, die keinen direkten Bezug zum Formular hat.

BullsEye 3. Jul 2008 14:11

Re: Eigene Uses Unit?!
 
Zitat:

Zitat von Reinhardtinho
@BullsEye

Eine Unit ist was anderes als eine Klasse.
Deine Prozedur gehört zu keiner Klasse, woher soll sie wissen welche Klasse oder welches Objekt gemeint ist.

Ah danke!

Luke_83 3. Jul 2008 14:23

Re: Eigene Uses Unit?!
 
Also meine Unit sieht folgendermaßen aus
Delphi-Quellcode:
{
Versionsnummer und Datum        
             
}    

unit Myunit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Registry,JPEG,ShlObj, ActiveX, ComObj,shellapi,extctrls,FileCtrl;


  procedure Test1;




//Globale Variablen

implementation


{******************************************************************************
     Informationen
}
Procedure Test1;
Begin

End;

end.
Die Unit Speicherst du mit der Dateiendung PAS ab und kopierst diese in dein Projektordner.
Bei deinem Projekt fügtst du dann bei uses myunit hinzu.

Um die Prozedur eins aufzurufen schreibst du dann : myunit.Test1;

Cyf 3. Jul 2008 14:31

Re: Eigene Uses Unit?!
 
Zitat:

Zitat von Luke_83
Also meine Unit sieht folgendermaßen aus
Delphi-Quellcode:
{
Versionsnummer und Datum        
             
}    

unit Myunit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Registry,JPEG,ShlObj, ActiveX, ComObj,shellapi,extctrls,FileCtrl;


  procedure Test1;




//Globale Variablen

implementation


{******************************************************************************
     Informationen
}
Procedure Test1;
Begin

End;

end.
Die Unit Speicherst du mit der Dateiendung PAS ab und kopierst diese in dein Projektordner.
Bei deinem Projekt fügtst du dann bei uses myunit hinzu.

Um die Prozedur eins aufzurufen schreibst du dann : myunit.Test1;

Wobei das das 'myunit.' bei
Delphi-Quellcode:
myunit.Test1;
optional ist und nur verwendet werden muss, wenn verschiene .pas die selben Funktionsnamen enthalten, da im Zweifelsfall die "lokalste" Definition benutzt wird, es ist aber auch nicht falsch es immer zu verwenden und kann der Übersichtlichkeit unter Umständen dienen.
Wenn es sich machen lässt sollte der Übersicht halber bei kleinen Projekten darauf verzichtet werden, Namen in verschiedenen Namespaces doppelt zu verwenden.

DeddyH 3. Jul 2008 14:33

Re: Eigene Uses Unit?!
 
Zitat:

Zitat von Luke_83
Delphi-Quellcode:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Registry,JPEG,ShlObj, ActiveX, ComObj,shellapi,extctrls,FileCtrl;

Diese Units brauchst Du alle für eine Prozedur ohne weiteren Code? :gruebel:

Luke_83 3. Jul 2008 16:07

Re: Eigene Uses Unit?!
 
Für meine Proceduren und Funktionen hatte ich die meisten Uses benötigt. Für einfache Proceduren kann man sicherlich einen großteil weglassen.

fui-tak 22. Mär 2009 18:50

Re: Eigene Uses Unit?!
 
Um nochmal auf die Frage von BullsEye zurückzukommen. Das Problem würde ich folgendermaßen lösen:

Delphi-Quellcode:
type
  TForm1 = class(TForm)
  procedure groesse;

  ...

procedure TForm1.groesse;
begin
   Height := 100;
   Width := 100;
end;
Einfach den Formularnamen vor den Prozedurnamen schreiben (das T nicht vergessen) und die Prozedur oben bei den Deklarationen hinzuzufügen


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:57 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