Autor Beitrag
Delphi2009lover
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 176



BeitragVerfasst: Fr 25.09.09 14:58 
Also Hallo erstmal^^

Ich hab da ein kleines Problem...

ich habe zwei Units...


HauptUnit
EditUnit


In der HauptUnit habe ich eine Procedure die "Listboxfuellen" heißt. Ich möchte jetzt, dass man diese über die EditUnit aufgerufen wird.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
unit SchuelerUnit;

interface

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

type
  THauptForm = class(TForm)
    UserListbox: TListBox;
    MainMenu1: TMainMenu;
    Datei1: TMenuItem;
    Userdatenbearbeiten1: TMenuItem;
    procedure Userdatenbearbeiten1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public

  end;

Ich habe mir jetzt gedacht dass ich die Procedure einfach unter die Public Deklarationen schreib aber das geht nicht und wenn ich sie da nicht rein schreiben wird sie nicht angezeigt (HauptUnit.HauptForm.Listboxfuellen exestiert nicht)

Wie kann ich die procedur jetzt public machen sodass ich sie dann über die Edit unit aufrufen kann?

Moderiert von user profile iconKha: Delphi-Tags hinzugefügt
Moderiert von user profile iconNarses: Topic aus VCL (Visual Component Library) verschoben am Fr 25.09.2009 um 15:07
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 25.09.09 15:10 
Moin!

Schonmal in die Suche geschaut? Suche in: Delphi-Forum, Delphi-Library FORMULAR UNIT ZUGRIFF :lupe: :les: :think: ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Fr 25.09.09 16:08 
Muss im Interfacs stehen

_________________
Markus Kinzler.
Delphi2009lover Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 176



BeitragVerfasst: Fr 25.09.09 16:30 
ich habs souw versucht :autsch:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
unit Unit4;

interface

procedure Test();
begin

end;

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

type
  TForm4 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;
Delphi2009lover Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 176



BeitragVerfasst: Fr 25.09.09 16:31 
geht ned...
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 25.09.09 16:37 
Wenn du das unter public schreibst, dann wäre das schon richtig. Wenn du das dort hinschreibst und es nicht klappt, machst du dabei etwas falsch oder der Fehler liegt woanders.

So wie du es jetzt schreibst, hieße das quasi (abgesehen davon, dass das begin..end nix oben bei der Deklaration zu suchen hat), dass Test nur zu der Unit, nicht aber zum Formular gehört. Dann wäre das aber dort oben auch die falsche Stelle, sondern gehört zwar in interface, aber direkt über implementation z.B., nicht ganz oben.

Wie hattest du es denn unter public versucht?
Tjeri
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 46



BeitragVerfasst: Sa 26.09.09 09:20 
Schreib die procedure einfach ganz normal, aber lass die zuweisung zu der speziellen Unit bzw. zu dem speziellen Formblatt weg

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
unit Test;

interface

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

type
  TFormblatt = class(TForm)
    procedure TestProcedure;

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Formblatt: TFormblatt;

implementation

procedure TestProcedure
var
begin
end;


in dem Fall wäre das dann procedure TestProcedure, die du einfach so wie sie ist schreiben musst. Du darfst aber nicht unten im Quellcode dann schreiben procedure TFormblatt.TestProcedure, weil dann kannst du sie nur von dort aus aufrufen(soweit ich weiß), Lass das TFormblatt. weg und dann klappt es auch indem du einfach in der anderen Unit die procedure mit TestProcedure aufrufst ;-)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 26.09.09 10:22 
Also so funktioniert es schonmal gleich gar nicht...
Du deklarierst die Methode oben als zu TFormblatt gehörig, unterhalb von implementation jedoch gibt es gar keine Implementierung dazu. Denn die Prozedur, die da steht, gehört ja nicht zu TFormblatt. Die beiden Deklarationen passen nicht zusammen. --> Kompilierfehler.
Zudem sollte man nichts außerhalb von public usw. mit der Default-Sichtbarkeit deklarieren, sondern wirklich explizit das einordnen unter public, private usw.

Richtig wäre die Deklaration so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
type
  TMyForm = class(TForm)
  private
  public
    procedure MyProcedure;
  end;

var
  MyForm: TMyForm;

implementation

procedure TMyForm.MyProcedure;
begin

end;
Dann lässt sich das auch von anderen Units aus aufrufen mit MyForm.MyProcedure, sofern die Unit in der uses steht. Wenn man aber mehrere Instanzen des Formulars hat, muss man statt MyForm auch die richtige nehmen.

Was du jetzt meintest, ist eine Prozedur, die nicht auf das Formular zugreift, sondern lose in der Unit hängt. Die könnte man dann aber auch einfach in der anderen Unit deklarieren, wenn die nicht zum Formular gehört. Das ist hier wohl kaum gewünscht. Aber ich schreibe das trotzdem einmal dazu wie es dann richtig aussieht:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
type
  TMyForm = class(TForm)
  private
  public
  end;

var
  MyForm: TMyForm;

procedure MyProcedure;

implementation

procedure MyProcedure;
begin

end;
Aufrufen geht dann in der Tat einfach mit MyProcedure. Man sollte daraus dann aber niemals das Formular ansprechen, da man dann bei mehreren Instanzen davon Probleme bekommt. So deklariert gehört eine Prozedur nur, wenn sie nichts mit einer bestimmten Instanz des Formulars zu tun hat.