Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Procedure an neue Form (https://www.delphipraxis.net/85509-procedure-neue-form.html)

Telefonkabel 31. Jan 2007 19:24


Procedure an neue Form
 
Hy!
In einer Konsolenanwendung, erstelle ich eine neue Form. Auf dieser Form ist ein Button und dieser soll sein onclick Ereignis auf eine Procedure in der Konsolenanwendung richten.
Ich möchte also die Procedure in die neu erstellte Form kopieren. Ist sowas möglich? Wenn ja, wie?

mkinzler 31. Jan 2007 19:28

Re: Procedure an neue Form
 
Konsolenanwendungen haben normalerweise keine Fenster(Formulare)
Aber einer Event-Property kannst jede passende Methode zuweisen (Signatur muß stimmen)

Telefonkabel 31. Jan 2007 20:06

Re: Procedure an neue Form
 
Ich hab es jetzt so, dass das button.click Ereignis = der Procedure in der KOnsole ist.
Nun habe ich aber das Problem, dass mir der Compiler sagt, dass Methodenzeiger und reguläre Proceduren inkompatilbe Typen sind.

Was sind Event-Propertys und wo kann ich die umstellen?


Danke schonmal :)

mkinzler 31. Jan 2007 20:12

Re: Procedure an neue Form
 
Eine Methode ist Teil einer Klasse.

Telefonkabel 31. Jan 2007 20:14

Re: Procedure an neue Form
 
Und wie kann ich eine class in einer Konsole einrichten?
Vor die Procedure class schreiben reicht nicht.
Bin gerade ziemlich konfus.
Sorry für die vielen blöden Fragen, es ist aber wichtig. :(

mkinzler 31. Jan 2007 20:20

Re: Procedure an neue Form
 
Man kann auch in Konsolenanwendungen Klassen verwenden, oder was verstehst du unter einer Konsolenanwendung?

Telefonkabel 31. Jan 2007 20:26

Re: Procedure an neue Form
 
Naja, ich versteh gerade nicht, was eine class ist.
In einer normalen Anwendung gibt es ja den Bereich Type und dort steht dann Tform1 = class(Tform) und danach kommen die ganzen Proceduren, die zu dieser KLasse gehören.
Aber was kann es in einer Konsolenanwendung für KLassen geben? Da ist doch garkeine Tform vorhanden, die kommt doch erst später dazu.
Es sieht bisher so aus:
Delphi-Quellcode:
procedure klicke(sender:tobject);
begin
   showmessage('hallo');
end;


procedure erschaffen;
  var form : tform;
    button : tbutton;

begin
   form := tform.CreateNew(Application);
   form.Left := 500;
   form.Show;
   button := tbutton.Create(form);
   button.Top := 25;
   button.parent := form;
   button.OnClick := klicke;
end;

begin
   erschaffen;
end.
Was muss ich machen, dass mir der Compiler nicht an der Stelle button.OnClick := klicke; um die Ohren springt?

Danke nochmals an alle!

EDIT: Naja, ich verstehe darunter dieses Eumel, was man unter "Neu" und "Konsolenanwendung" erstellen kann. ^^"

mkinzler 31. Jan 2007 20:35

Re: Procedure an neue Form
 
Eine Konsolenanwendung ist eine Anwendung ohne Fenster, diese kann obejektorientiert sein oder nicht. Eine Windowsanwendung kann wiederrum auch ohne Klassen sien (Non-VCL).

Events benötigen eine Methode, keine Funktion. Und Methoden sind wie gesagt Teil einer Klasse. Ich verstehe dein Vorhbane noch nicht ganz.
Handelt es sich hierbei um 2 Programme?

Telefonkabel 31. Jan 2007 20:56

Re: Procedure an neue Form
 
Also, ich will folgendes tun:
Ich möchte einen neune Desktop erstellen.
Und in diesem soll eine Form erstellt werden.
Da das nur durch eine Konsolenanwendung möglich ist (hab es mit einer normalen Anwendung versucht, da sollte sich der Desktop auf einen Buttonklick öffnen und dann eine Message anzeigen, aber es öffnete sich nur der Desk und die Message wurde auf dem alten angeziegt und nicht im neune, obwohl sie nach createdesk kam), muss ich nun eine Form erstellen, auf der ein Button ist. Und wenn dieser Button gedrückt wird, soll ein Event, welches sich in der Konsole befindet ausgeführt werden.
So und nun habe ich das Problem, dass eine Konsole von vornerein keine Objekte hat und folgich kann man deshalb soweit ich weiß auch keine Class anlegen und deshalb wird das auch mit dem Event für den Button auf der erstellen form nichts, da dieser eine Methode und somit eine Class benötigt.
Ich hoffe ihr könnt mir weiterhelfen.

P.S. der Quellcode oben ist abgespeckt, also erstmal ohne das Createdesk.

mkinzler 31. Jan 2007 21:17

Re: Procedure an neue Form
 
Zitat:

Da das nur durch eine Konsolenanwendung möglich ist
Nein, wenn du die VCL verwendest, mußt du auch eine VCL-Anwendung erstellen.
Zitat:

So und nun habe ich das Problem, dass eine Konsole von vornerein keine Objekte hat und folgich kann man deshalb soweit ich weiß auch keine Class anlegen
Natürlich kann man in einer Konsolenanwendung Klassen verwenden nur halt keine VCL!

Telefonkabel 1. Feb 2007 04:35

Re: Procedure an neue Form
 
Zitat:

Zitat von mkinzler
Nein, wenn du die VCL verwendest, mußt du auch eine VCL-Anwendung erstellen.

Also kann ich das auf diese Art und Weise vergessen, oder wie?

Zitat:

Natürlich kann man in einer Konsolenanwendung Klassen verwenden nur halt keine VCL!
Und was für KLassen kann ich dann in einer Konsolenanwendung verwenden?
Wäre toll, wenn du mir ein Beispiel geben könntest. :)

Ich dnake euch trotzdem schon jetzt!

mkinzler 1. Feb 2007 05:37

Re: Procedure an neue Form
 
Klassen kann man nicht nur verwenden sondern auch selbst erstellen! Du solltest dich mal mit den Grundlagen der objeketorientieren Programmierung befassen.

Matze 1. Feb 2007 06:19

Re: Procedure an neue Form
 
Wenn du, wie mkinzler geschrieben hat, auf die VCL zugreifen möchtest, was du machst, dann empfiehlt sich eine VCL-Anwendung, denn der Sinn einer Konsolenanwendung ist es, ohne die VCL auszukommen, sondern das Programm über doe WIndows-Konsole zu bedienen, wie es der Name schon sagt. Du hast sicher einen Fehler in deinem Code und daher liegt es nicht an der VCL-Anwendung. In der Konsolenanwendung wirst du höchstwahrscheinlich den selben Effekt feststellen können.

Ich meine mich zu erinnern, dass genau deine Problemstellung kürzlich schon hier besprochen wurde.

So, hier ist das Thema und es ist von dir erstellt und handelt eigentlich von dem gleichen Problem. Wo liegt deines denn nun? :gruebel:

Telefonkabel 1. Feb 2007 20:23

Re: Procedure an neue Form
 
Zitat:

Zitat von Matze
Wenn du, wie mkinzler geschrieben hat, auf die VCL zugreifen möchtest, was du machst, dann empfiehlt sich eine VCL-Anwendung, denn der Sinn einer Konsolenanwendung ist es, ohne die VCL auszukommen, sondern das Programm über doe WIndows-Konsole zu bedienen, wie es der Name schon sagt. Du hast sicher einen Fehler in deinem Code und daher liegt es nicht an der VCL-Anwendung. In der Konsolenanwendung wirst du höchstwahrscheinlich den selben Effekt feststellen können.

Ich meine mich zu erinnern, dass genau deine Problemstellung kürzlich schon hier besprochen wurde.

So, hier ist das Thema und es ist von dir erstellt und handelt eigentlich von dem gleichen Problem. Wo liegt deines denn nun? :gruebel:


Nein, ich kann eben keine VCL zum Aufruf der Form auf dem neuen Desktop verwenden, da diese neue Form an die sich auf dem alten DEsktop befindliche Form gebunden ist und somit auf dem alten und nicht auf dem neuen geöffnet wird.
Wenn mir einer sagt, wie ich über eine Form einen Desktop erstellen udn dort eine andere Form anzeigen kann, dann würde ich es eben so machen, da ich aber in meinem anderen Thread keine wirkliche Antwort erhalten hab, muss ich nun über die Konsole gehen.

mkinzler 1. Feb 2007 20:28

Re: Procedure an neue Form
 
Zitat:

Nein, ich kann eben keine VCL zum Aufruf der Form auf dem neuen Desktop verwenden, da diese neue Form an die sich auf dem alten DEsktop befindliche Form gebunden ist und somit auf dem alten und nicht auf dem neuen geöffnet wird.
TForm ist Teil der VCL-Bibliothek, d.h. bei Verwendung dieser Klasse verwendest die die VCL.
Versuchs es mal mit .CreateParented

Telefonkabel 1. Feb 2007 22:02

Re: Procedure an neue Form
 
Was macht das createparented und wo soll ich das benutzten (in der Konsolenanwendung oder in der Tform)?

EDIT: Wenn ich das Createparented in der Konsole oder in einer Form anwende, also:
Delphi-Quellcode:
    test := TForm.Createparented(OldDesk);
    test.show;
Dann bringt er mir den Fehler 1400 ungültiges Fensterhandle.
Was heißt das?

mkinzler 1. Feb 2007 22:05

Re: Procedure an neue Form
 
In der VCL-Anwendung. Nach dem du den neuen Desktop erstellt hast kannst du die Form mit diesem Alternativ-Konstruktor an diesen hängen

Telefonkabel 1. Feb 2007 22:19

Re: Procedure an neue Form
 
WEnn ich das versuche, bringt mir das Programm den Fehler 1400, also ungültiges Fensterhandle.
Was kann ich dagegen tun?

mkinzler 1. Feb 2007 22:25

Re: Procedure an neue Form
 
as übergibst du las Handle?

Telefonkabel 1. Feb 2007 22:33

Re: Procedure an neue Form
 
Wo übergebe ich das Handle?
Wenn es das ist, was in den KLammern hinter Createparented steht, dann ist es newdesk. (bzw. zum Test erstmal olddesk, da ich mich sonst immer ab und anmelden müsste, weil das Prog auf dem neuen leeren Desk hängen bleibt.)

Telefonkabel 12. Feb 2007 21:30

Re: Procedure an neue Form
 
*push*
Entschuldigung fürs pushen, aber ich muss dieses Problem unbedingt beseitigen.
Hab viel versucht, aber nichts davon wollte funktinieren.
Shellexecute mit dem neuen Desktop als Fensterhandle --> öffnet das Programm auf dem alten Desk.
Shellexecute mti der Form auf dem neuen Desk als Handle --> öffnet das Programm auf dem alten.

Ich weiß nimmer weiter. T_T


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:05 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz