![]() |
Ein Programm ohne Units schreiben
Hallo,
wie kann ich ein Programm ohne Units schreiben. Ich soll ein Programm schreiben in der keine Units vorhanden sein sollen. Ich soll in der Datei Programmieren, in der normalerweise die Form created werden. Ist das überhaupt möglich??? wie kann ich da zum beispiel eine klasse TFenster erzeugen die mir dann ein grafisches fenster ausgibt??? MFG Christian18 |
Re: Ein Programm ohne Units schreiben
Ohne Units? :shock:
Dann entweder ![]() |
Re: Ein Programm ohne Units schreiben
hierbei handelt es sich um die dpr-Datei.
auch diese kannst du mit Delphi editieren und anschliessend compilieren. schau dir den Inhalt einfach mal an, du wirst den "Trick" schon selber finden... |
Re: Ein Programm ohne Units schreiben
meinst du evtl. eine Konsolen Anwendung (Console Application) für die Eingabe-Aufforderung?
|
Re: Ein Programm ohne Units schreiben
F8 drücken und dann hast du das was du haben willst, das ist das eigentliche programm, da kannst du Coden was du willst, ist halt komplizierter ... .
|
Re: Ein Programm ohne Units schreiben
Um den Projektquelltext zu bearbeiten, klickst du auf projekt -> quelltext anzeigen oder auf ansicht -> projektquelltext (je nach Delphiversion).
Du meinst sicher ohne selbstgemachte Units programmieren. Ein paar Units wirst du immer brauchen. Komplett ohne Units weiss der Compilier z.B. nicht, was inttostr heissen soll oder was eine tform ist. Diese Units stehen in der Uses-Liste. In der Unit WINDOWS.DCU sind eigentlich schon fast alle Befehle enthalten, um ein Konsolen- oder nonVCL-Programm zu schreiben. In der Unit forms ist tform deklariert. Classes enthält einige nützliche Typen. Ein normales Delphi-Programm enthält schon von Start an diese Units:
Delphi-Quellcode:
zusätzlich enthält es noch die Unit unit1.pas.
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; |
Re: Ein Programm ohne Units schreiben
Zitat:
|
Re: Ein Programm ohne Units schreiben
Hallo,
erst einmal danke für die schnellen antworten. ich habe jetzt mal probiert. das mache ich jetzt in meiner Projektdatei:
Delphi-Quellcode:
bis jetzt geht aber noch kein fenster auf. was muß ich jetzt machen, damit ein fenster beim programm start geöffnet wird.
program Project1;
uses Forms; type TFenster = class(TForm) private public end; var Fenster : TFenster; {$R *.res} end. |
Re: Ein Programm ohne Units schreiben
Das geht eben nicht. Das mit den Fenstern liegt an der VCL von Delphi. Und die kann das eben nicht dierekt aus dem Projektquelltext auslesen dass du ein Fenster aufmachen willst. Dierekt aus dem Projektquelltext werden normalerweise nur nonVCL-Programme erstellt und das ist eine FURCHTBAR komplizierte Sache. Desweiteren könntest du auch eine Konsolenanwendung erstellen:
Delphi-Quellcode:
program project1;
uses windows; var s:string; begin allocconsole; writeln('Ich bin eine Konsolenanwendung. Drücken sie ENTER, um mich zu beenden.'); read(s); freeconsole; end; |
Re: Ein Programm ohne Units schreiben
das geht doch und zwar so:
Delphi-Quellcode:
program Project1;
uses Forms; type TFenster = class(TForm) private public end; var Fenster : TFenster; {$R *.res} procedure Button1Click(sender:TObject); begin application.terminate; end; begin application.initalize; application.titel := 'Mein erstes Programm mit Fenster!'; application.createform(TFenster,fenster); application.run; fenster.caption := 'Hallo'; with tbutton.create(fenster) do begin parent := fenster; width := 100; caption := 'Klickmich!'; onclick := Button1Click; end; end. |
Re: Ein Programm ohne Units schreiben
@igel: :shock:
application.run ist eine Endlosschleife. Es wird erst in die nächste Zeile gesprungen wenn der User das Programm beendet hat! Form zur Laufzeit anzeigen geht so:
Delphi-Quellcode:
program Project1;
uses Forms; type TFenster = class(TForm) {private public} //brauchst du garnicht. end; var Fenster : TFenster; procedure Button1Click(sender:TObject); begin application.terminate; end; {$R *.res} //wenn du diese Zeile entfernst, verliert das Programm sein Icon. begin Application.Initialize; Application.CreateForm(tfenster, fenster); fenster.caption := 'Hallo'; application.title:='Mein erstes Programm mit Fenster' with tbutton.create(fenster) do begin parent := fenster; width := 100; caption := 'Klickmich!'; onclick := Button1Click; end; Application.Run; end. |
Re: Ein Programm ohne Units schreiben
hallo ichbins,
wenn ich deine variante compilieren will, dann kommt bei mir eine fehler meldung. das hatte ich nämlich auch schon mal getestet. und bei mir kam genau die gleiche fehler meldung. so und hier jetzt die fehler meldung: Exception EResNotFound in Modul Projekt1.exe bei 00043A94. Ressource TFenster wurde nicht gefunden. |
Re: Ein Programm ohne Units schreiben
@ichbins :?
Zitat:
Zitat:
Delphi-Quellcode:
@christian18
.
. . fenster.caption := 'Hallo'; with tbutton.create(fenster) do begin parent := fenster; width := 100; caption := 'Klickmich!'; onclick := Button1Click; end; application.run; . . . Delphi schreibt normalerweise automatisch in die Resourcen-Datei Resourcen für die Fenster. Da du die aber nicht erstellt hast musst du das {*.res} da wohl weg lassen |
Re: Ein Programm ohne Units schreiben
hallo igel,
ich habe das jetzt auch schon weggelassen und der gleiche fehler kommt immernoch. |
Re: Ein Programm ohne Units schreiben
Liste der Anhänge anzeigen (Anzahl: 1)
Bei mir kommen da jede Menge Fehlermeldungen.
für den Button brauche ich
Delphi-Quellcode:
Resnotfound heisst dass er irgendeine Ressourcendatei nicht gefunden hat. Damit meint er wahrscheinlich die dfm-Datei...
stdctrls;
gut gemeinter Rat: vergisses Du kannst dein Fenster ganz ohne die Forms.pas erzeugen. Das geht dann über nonVCL. da schreibst du dir dann praktisch alle Teile der forms selber. Du hast auch keine application-variable etc... Dafür ist die Datei (mit D7) nur 14 KB groß. Im Anhang mein erster/(noch) einziger nonVCL-Versuch. Das Programm kann seine Größe ausgeben und wenn ich auf das Form klicke, verschwindet der Text (eigentlich hätte was ganz anderes passieren sollen :oops:) @igel: sry... :oops: ich hab deinen Code nur überflogen und dabei ein paar wichtige Dinge übersehen :oops: |
Re: Ein Programm ohne Units schreiben
Also wenn das alles nichts hilft, ein letzter Versuch von mir:
Delphi-Quellcode:
Delphi Denkt wenn du application.createform verwendest das du eine *.dfm Datei hättest.
.
. . begin application.initialize; fenster := TFenster.Create(application); fenster.show; . . . application.run; end; @ichbins entschuldigung akzeptiert :-D |
Re: Ein Programm ohne Units schreiben
aber es muß doch auch eine andere möglichkeit geben. gibt es in allen andern programmiersprachen auch. man hat mir das ja auch als aufgabe gegeben. also muss es funktionieren. nonVCL hatte ich auch schon gedacht als ich die aufgabe bekam. dann habe ich die person angesprochen von der ich die aufbabe habe und dann sagte er das es auch anders funktioniert. er meinte ich soll eine Objektvariable aus anlegen und die dann aus der klasse TForm füllen. und das habe ich jetzt auch schon gemacht. und jetzt komme ich nicht weiter. naja wenn nochjemand was weiß, dann bitte ich um hilfe. vielen danke schon einmal im vorraus.
MFG Christian18 |
Re: Ein Programm ohne Units schreiben
Du benötigst eigentlich nur die Windows-API, um Fenster zu erzeugen. In den Zeiten *vor* Delphi war das die einzige Möglichkeit, Windows-Applikationen zu entwickeln. Na, fast jedenfalls. Man bricht sich tierisch einen ab, aber es geht.
Ganz *ohne* Units geht es aber nicht, denn die Windows-API ist auch eine Unit, nur in Form einer DLL. Ohne fremde Hilfe (sprich: Units) kannst Du in Delphi und den meisten Programmiersprachen gar nichts anstellen, ausgenommen, im Stillen vor sich hinrechnen, da die Ein- und Ausgaberoutinen auch in einer Unit enthalten sind... Du kannst Deinem Lehrer also spitzfindig erklären, das die Sprache 'Delphi' keine Sprachkonstrukte zum erzeugen von Fenstern beinhaltet, weswegen die Aufgabe per se nicht lösbar ist. |
Re: Ein Programm ohne Units schreiben
Zitat:
Soll das heißen 'ohne eigene Units', oder 'gänzlich ohne Units' (letzteres geht nicht, da der Delphi-Compiler ohne System.pas und SysInit.pas nicht arbeiten kann). |
Re: Ein Programm ohne Units schreiben
Zitat:
|
Re: Ein Programm ohne Units schreiben
Zitat:
diese Variante benutzte "Application.CreateForm()". Dabei wird dann versucht die entsprechende Fenster-Resource aus der DFM-Datei zu laden. Diese DFM-Datei war aber nicht vorhanden. Erzeuge das Fenster mit: Fenster := TFenster.Create(Application); und dann sollte es gehen. |
Re: Ein Programm ohne Units schreiben
Zitat:
Ciao, Ralf |
Re: Ein Programm ohne Units schreiben
Zitat:
das wird so nicht gehen. (ich meine jetzt nicht das mit dem CreateForm, das geht auch nicht aber das wurde hier ja schon behandelt) Was auch nicht geht ist die Zuweisung des Eventhandlers "Button1Click". Dieser ist als ganz normale Prozedur deklariert. Als Eventhandler können aber nur Methoden benutzt werden! Es muss also heissen:
Delphi-Quellcode:
und später dann:
procedure TFenster.Button1Click(sender:TObject);
begin application.terminate; end;
Delphi-Quellcode:
Ohne "Button1Click" zu einer Methode zu machen, bekommst du diesen Source ja nicht einmal kompilliert.
onclick := TFenster.Button1Click;
Ciao, Ralf |
Re: Ein Programm ohne Units schreiben
Stimmt, hatte ich vergessen...
Ich frage mich aber, weshalb das auch ohne das "application.createform" nicht funktionert... |
Re: Ein Programm ohne Units schreiben
Versuch doch auch mal Luckies
![]() Hat mir ein wenig geholfen. Auch wenn ich im Endeffekt Fenster mit der Win32-API erstmal links liegen lassen will, und mich nur auf die Messages beschränken will, wenn ich das mal brauchen sollte... Mich damit noch rumzuärgern lohnt imho kaum. Da warte ich lieber, bis .NET Standard ist. Da spart man sich das Umgewöhnen ;) |
Re: Ein Programm ohne Units schreiben
Liste der Anhänge anzeigen (Anzahl: 1)
Anbei ein "Hello World"-Projekt "ohne Units"...
- Delphi gestartet - Neu / Anwendung ... - Button auf Form erzeugt - Button1Click implementiert - Alles gespeichert - Delphi geschlossen - Unit1.dfm -> Projekt1.dfm - Projekt1.dpr uses aus Unit1.pas - Code aus Unit1.pas in Projekt1.dpr - Delphi gestartet - Projekt erzeugt |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:53 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