Autor Beitrag
TimHa
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 88



BeitragVerfasst: So 24.04.05 16:19 
Also, ich habe in meinem Programm eine Prozedur rechnen. Diese Prozedur hätte ich jetzt gerne in einer eigenen Unit (Uberechnen). Bin folgendermaßen vorgegangen:

Habe eine neue Unit angelegt. Im Implementationteil der Unit steht die Prozedur mit Variablendeklaration etc. im Interfaceteil habe ich den Prozeduraufruf stehen.
Im Hauptprogramm habe ich im Implementationteil uses Uberechnung; stehen.

Wenn ich das Programm starten will bekomme ich Fehler:
[Error] Uberechnung.pas(33): Undeclared identifier: 'showmessage'
Die Zeile zum Fehler lautet:
showmessage('Bitte geben Sie einen Wert größer 0 ein!');

Weiter unten kommt Fehler:
[Error] Uberechnung.pas(44): Undeclared identifier: 'form1'
Hier die Programmzeile:
val(form1.E_Die_Preis.Text, Die_Preis, code);

Als alles in einer Unit stand hat das Programm geklappt. Warum klappts jetzt nicht mehr? Für Hilfe wäre ich dankbar.

Tim
Fabian W.
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1766

Win 7
D7 PE
BeitragVerfasst: So 24.04.05 16:34 
Bitte stell uns mal die Units zur Verfügung. So müsste man ja fst so was wie ne Telephondiagnose mache :wink: n
TimHa Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 88



BeitragVerfasst: So 24.04.05 16:42 
haupt
ausblenden volle Höhe 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:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
unit Ukfzvergl;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, ExtCtrls, ToolWin, Menus, Spin;

type
  TForm1 = class(TForm)
    StatusBar1: TStatusBar;
    Label1: TLabel;
    Label2: TLabel;
    E_All_Laufl: TEdit;     // Edit Feld Laufleistung
    Label3: TLabel;
    E_All_Nutzd: TEdit;     // Edit Feld Nutzungsdauer
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    E_Die_Preis: TEdit;       //Edit Feld Diesel Anschaffungspreis
    E_Die_Steuer: TEdit;      //Edit Feld Diesel KFZ Steuer
    E_Die_Vers: TEdit;        //Edit Feld Diesel Versicherungbeitrag
    E_Die_Treibverb: TEdit;   //Edit Feld Diesel Treibstoffverbrauch
    E_Die_Treibkost: TEdit;   //Edit Feld Diesel Treibstoffkosten
    E_Ben_Preis: TEdit;       //Edit Feld Benziner Anschaffungspreis
    E_Ben_Steuer: TEdit;      //Edit Feld Benziner KFZ Steuer
    E_Ben_Vers: TEdit;        //Edit Feld Benziner Versicherungsbeitrag
    E_Ben_Treibverb: TEdit;   //Edit Feld Benziner Treibstoffverbrauch
    E_Ben_Treibkost: TEdit;   //Edit Feld Benziner Treibstoffkosten
    Timer1: TTimer;
    E_Die_Bez: TEdit;         //Edit Feld Diesel KFZ Bezeichnung
    E_Ben_Bez: TEdit;         //Edit Feld Benziner KFZ Bezeichnung
    Label10: TLabel;
    L_Ausg_Kos_Die: TLabel;   //Label Ausgabe Kosten Diesel
    L_Ausg_Kos_Ben: TLabel;   //Label Ausgabe Kosten Benziner
    Image1: TImage;
    MainMenu1: TMainMenu;
    N2: TMenuItem;
    Hilfe1: TMenuItem;
    N3: TMenuItem;
    ber1: TMenuItem;
    PrinterSetupDialog1: TPrinterSetupDialog;
    PrintDialog1: TPrintDialog;
    Datei1: TMenuItem;
    Neu1: TMenuItem;
    Drucken1: TMenuItem;
    Druckereinrichten1: TMenuItem;
    N1: TMenuItem;
    Beenden1: TMenuItem;
    procedure Timer1Timer(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure E_All_LauflKeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Beenden1Click(Sender: TObject);
    procedure Drucken2Click(Sender: TObject);
    procedure ber1Click(Sender: TObject);
    procedure Label1Click(Sender: TObject);
    procedure Drucken1Click(Sender: TObject);
    procedure Druckereinrichten1Click(Sender: TObject);
    procedure Neu1Click(Sender: TObject);

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

var
  Form1: TForm1;

implementation
uses Uberechnung;              //Einbinden d Units
{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
StatusBar1.Panels[0].Text:=datetostr(now);  //Ausgabe Datum in StatusBar
StatusBar1.Panels[1].Text:=timetostr(now);  //Ausgabe Zeit in StatusBar
end;

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key=',' then key:='.';        //Wandlung von Komma in Punkt
end;


procedure TForm1.E_All_LauflKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
rechnen(sender);                //Aufruf der Prozedur rechnen
end;

procedure TForm1.Beenden1Click(Sender: TObject);
begin
 if application.MessageBox('Programm beenden?','Frage',36)=6 then close;
end;

{procedure TForm1.Drucken2Click(Sender: TObject);
begin
form1.Print
end;}


procedure TForm1.ber1Click(Sender: TObject);
var button:integer;
begin
button:=application.messagebox
      ('KFZ Vergleich: Diesel oder Benziner' +#13 +#13
       +'Programmiert von Tim Hauptmann (FSTE02)''Info',64);
end;

procedure TForm1.Label1Click(Sender: TObject);
begin
printersetupdialog1.Execute;
end;

procedure TForm1.Drucken1Click(Sender: TObject);
begin
printdialog1.Execute;
end;

procedure TForm1.Druckereinrichten1Click(Sender: TObject);
begin
printersetupdialog1.Execute;
end;

procedure TForm1.Neu1Click(Sender: TObject);
begin
form1.E_All_Laufl.Text:='1';
form1.E_All_Nutzd.Text:='1';

form1.E_Die_Preis.Text:='1';
form1.E_Die_Steuer.Text:='1';
form1.E_Die_Vers.Text:='1';
form1.E_Die_Treibverb.Text:='1';
form1.E_Die_Treibkost.Text:='1';
form1.E_Ben_Preis.Text:='1';
form1.E_Ben_Steuer.Text:='1';
form1.E_Ben_Vers.Text:='1';
form1.E_Ben_Treibverb.Text:='1';
form1.E_Ben_Treibkost.Text:='1';

form1.E_Die_Bez.Text:='';
form1.E_Ben_Bez.Text:='';

form1.L_Ausg_Kos_Die.Caption:='';
form1.L_Ausg_Kos_Ben.Caption:='';
end;

end.


berechnung
ausblenden volle Höhe 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:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
unit Uberechnung;

interface
procedure rechnen(sender:tobject);

implementation
procedure rechnen(sender:tobject);
var
    laufl, nutzd:single; //Allgm. Var f Laufleistung und Nutzungsdauer
    Die_Preis,      //Variable für Diesel Anschaffungspreis
    Die_Steuer,     //Variable für Diesel KFZ Steuer
    Die_Treibkost,  //Variable für Diesel Treibstoffkosten
    Die_Treibverb,  //Variable für Diesel Treibstoffverbrauch
    Die_Vers,       //Variable für Diesel Versicherungskosten
    Die_Kosten,     //Variable für Diesel Gesamtkosten
    Die_Kfix, Die_Kvar:single; //Hilfsvariablen zur Berechnung Gesamtkosten

    Ben_Preis,      //Variable für Benziner Anschaffungspreis
    Ben_Steuer,     //Variable für Benziner KFZ Steuer
    Ben_Treibkost,  //Variable für Benziner Treibstoffkosten
    Ben_Treibverb,  //Variable für Benziner Treibstoffverbrauch
    Ben_Vers,       //Variable für Benziner Versicherungskosten
    Ben_Kosten,     //Variable für Benziner Gesamtkosten
    Ben_Kfix, Ben_Kvar:single;  //Hilfsvariablen zur Berechnung Gesamtkosten

    s,t:string;       //Hilfsvariablen für Wandlung Text <-> Zahl
    code:integer;

begin    

if laufl=0 then        //Fehlerüberprüfung Laufleistung
begin
 showmessage('Bitte geben Sie einen Wert größer 0 ein!');
 exit;
end;

if nutzd=0 then        //Fehlerüberprüfung Nutzungsdauer
begin
 showmessage('Bitte geben Sie einen Wert größer 0 ein!');
 exit;
end;

//Beginn "Kosten Diesel"
val(form1.E_Die_Preis.Text, Die_Preis, code);   //Wandlung Eingaben in Variablen
val(form1.E_Die_Steuer.Text, Die_Steuer, code);
val(form1.E_Die_Treibkost.Text, Die_Treibkost, code);
val(form1.E_Die_Treibverb.Text, Die_Treibverb, code);
val(form1.E_Die_Vers.Text, Die_Vers, code);

Die_Kfix:=Die_Preis/nutzd+Die_Steuer+Die_Vers;    //Berechnung Kosten Diesel
Die_Kvar:=Die_Treibverb*Die_Treibkost/100;
Die_Kosten:=(Die_Kfix+Die_Kvar*laufl)*nutzd;

str(Die_Kosten:10:2,s);                          //Rückwandlung Zahl in Text
form1.L_Ausg_Kos_Die.Caption:=s+' €';            //Ausgabe
//Ende "Kosten Diesel"

//Beginn "Kosten Benziner"
val(form1.E_Ben_Preis.Text, Ben_Preis, code);     //Wandlung Eingaben in Variablen
val(form1.E_Ben_Steuer.Text, Ben_Steuer, code);
val(form1.E_Ben_Treibkost.Text, Ben_Treibkost, code);
val(form1.E_Ben_Treibverb.Text, Ben_Treibverb, code);
val(form1.E_Ben_Vers.Text, Ben_Vers, code);

Ben_Kfix:=Ben_Preis/nutzd+Ben_Steuer+Ben_Vers;    //Berechnung Kosten Benziner
Ben_Kvar:=Ben_Treibverb*Ben_Treibkost/100;
Ben_Kosten:=(Ben_Kfix+Ben_Kvar*laufl)*nutzd;

str(Ben_Kosten:10:2,t);                          //Rückwandlung Zahl in Text
form1.L_Ausg_Kos_Ben.Caption:=t+' €';            //Ausgabe
//Ende Kosten Benziner"

end;



end.


Hoffe, so ist es klarer.
Mit ist beim Programmieren so viel unklar... :)

Tim
raziel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2453

Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
BeitragVerfasst: So 24.04.05 16:44 
Hallo,

Ein uses name_der_unit_in_der_form1_deklariert_ist; im implementation-Teil Deiner Unit dürfte Abhilfe schaffen ;) (Wobei du für name_der_unit_in_der_form1_deklariert ist die entsprechende Unit einsetzt, in der Form1 deklariert ist ;))

Warum das so ist: Du musst Delphi mitteilen, wo Form1 und ShowMessage deklariert sind. Und dazu genügt es, ihm einen Verweis auf deine Hauptunit mitzugeben, denn dort ist wahrscheinlich Form1 deklariert und über den Verweis auf die Unit Forms eine Verknüpfung zur Unit Dialogs gegeben, in der ShowMessage deklariert ist.

//edit: huch, du hast ja grad gepostet ;)
Ersetze name_der_unit_in_der_form1_deklariert_ist oben einfach durch Ukfzvergl

Gruß,
raziel

_________________
JSXGraph


Zuletzt bearbeitet von raziel am So 24.04.05 16:46, insgesamt 1-mal bearbeitet
Fabian W.
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1766

Win 7
D7 PE
BeitragVerfasst: So 24.04.05 16:45 
Schreib doch die Uberechnung ganz oben zu den anderen Units.
TimHa Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 88



BeitragVerfasst: So 24.04.05 16:57 
raziel ,

danke für den Tipp. Der hat echt was gebracht. Mir sind selber noch zwei Fehler aufgefallen und dann hat es geklappt. :)

Immerhin etwas.

Muss dem Forum echt mal ein großes Lob aussprechen. Danke, dass ihr euch Zeit nehmt meine Probleme zu lösen!

Tim