Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Procedure in allen Unit's verwenden (https://www.delphipraxis.net/141150-procedure-allen-units-verwenden.html)

Big_Boss 3. Okt 2009 21:31


Procedure in allen Unit's verwenden
 
Hey,

Ich möchte eine Procedure in allen Unit's verwenden.
Aber das will einfach nicht klappen!....
Hier mein Code:
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;

  private
    { Private declarations }
  public
    { Public declarations }
  end;
      procedure Ausrichten; forward;

var
  Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure Ausrichten;
begin
  Form2.Left:=form1.Left+form1.width+5;
  form2.Top:=form1.Top+5;
end;
In Unit2 hab ich "form1.Ausrichten;" stehen, aber die Procedure Ausrichten wird nicht erkannt :(
Was is da falsch?

MfG Big_Boss

Wolfgang Mix 3. Okt 2009 21:45

Re: Procedure in allen Unit's verwenden
 
Versuch 'mal

Delphi-Quellcode:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,unit2;
aber erstmal herzlich willkommen in der Dp :dp:

Gruß

Wolfgang

Big_Boss 3. Okt 2009 21:53

Re: Procedure in allen Unit's verwenden
 
Hm nee das klappt so auch nicht kommt immer noch die Fehlermeldung:
Zitat:

[DCC Error] Unit2.pas(34): E2003 Undeclared identifier: 'Ausrichten'

Luckie 3. Okt 2009 21:55

Re: Procedure in allen Unit's verwenden
 
Pack die Prozedur in eine extra Unit und binde diese über all ein, wo sie gebraucht wird.

himitsu 3. Okt 2009 21:59

Re: Procedure in allen Unit's verwenden
 
bei dem hier gezeigten Code hast du Unit 2 in Unit eins eingebunden,
aber um von Unit1 auf etwas in Unit1 zugreifen zu können, müßtest du die Unit1 in der Unit2 ( Uses Unit1; einbinden.

Aber es wäre natürlich besser, wenn du diese Prozedur in eine andere Unit verlegst,
Unit eins, welche bei dir wohl eine/die Hauptunit sein wird, eignet sich nicht sonderlich gut für sowas.

haentschman 3. Okt 2009 22:00

Re: Procedure in allen Unit's verwenden
 
Hallo,

die Deklaration der Procedure Ausrichten steht falsch.

schieb sie mal dahin:
Delphi-Quellcode:
private
    { Private declarations }
  public
    { Public declarations }
    procedure Ausrichten;
  end;
unabhängig davon:

- stimme ich meinem Vorredner zu
- oder da, in diesem Falle, die Procedure die eigene Form betrifft, die Prozedur in Form2 zu deklarieren und einzubinden.

:hi:

edit: hab die Units verdreht beim Lesen...also Quellcode ignorieren bitte. Ich hol dann mal Kaffee, vieleicht hilfts. :oops:

Big_Boss 3. Okt 2009 22:07

Re: Procedure in allen Unit's verwenden
 
In Unit2 wollte ich sie nicht reinmachen, falls ich sie später noch wo anders brauche....
Das mit der extra Unit werd ich machen, aber dann bleibt immer noch das Problem dass ich die nicht in die anderen reinbekomme...

Zitat:

bei dem hier gezeigten Code hast du Unit 2 in Unit eins eingebunden,
unit 1 hab ich in unit 2 auch noch eingebunden;) aber wird trotzdem nicht erkannt...

Luckie 3. Okt 2009 22:09

Re: Procedure in allen Unit's verwenden
 
Zitat:

Zitat von Big_Boss
Das mit der extra Unit werd ich machen, aber dann bleibt immer noch das Problem dass ich die nicht in die anderen reinbekomme...

Wieso dass denn nicht? Einfach bei den Uses einbinden.

Klaus01 3. Okt 2009 22:15

Re: Procedure in allen Unit's verwenden
 
Delphi-Quellcode:
unit Unit3;

interface

uses
  Forms;

procedure ausrichten(f1,f2: TForm);

implementation

procedure ausrichten(f1,f2:TForm);
begin
  f2.Left:=f1.Left+f1.width+5;
  f2.Top:=f1.Top+5;
end;
In der Unit1 und Unit2 dann die Unit3 einbinden.

Benutzen kannst Du die Routine dann so:

Delphi-Quellcode:
ausrichten(Form1,Form2);
Grüße
Klaus

Big_Boss 3. Okt 2009 22:19

Re: Procedure in allen Unit's verwenden
 
Okay vielen Dank! So funktionierts.
Aber warum kann ich nicht direkt auf Objekte zugreifen in der procedure??

Bernhard Geyer 3. Okt 2009 23:42

Re: Procedure in allen Unit's verwenden
 
Zitat:

Zitat von Big_Boss
Okay vielen Dank! So funktionierts.
Aber warum kann ich nicht direkt auf Objekte zugreifen in der procedure??

Können schon, aber damit hättest du astreinen Spaghetticode produziert indem du viele unnötige Abhängigkeiten (Variablennamen und Unitnamen) aufbaust. Und in 4 Wochen kracht der Code und du weißt nicht warum.

himitsu 3. Okt 2009 23:50

Re: Procedure in allen Unit's verwenden
 
Zitat:

Zitat von Bernhard Geyer
Können schon, aber damit hättest du astreinen Spaghetticode produziert ...

Das und so (siehe #9) kannst du diese Prozedur wirklich unabhängig auch für andere Formulare wiederverwenden.

Abgesehn davon, hast du so auch keine Probleme, wenn du deine Formulare einmal umbenennst solltest
(Form1 und Form2 sind ja nicht wirklich aussagekräftig :zwinker: )


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:35 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 by Thomas Breitkreuz