![]() |
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? |
Re: Procedure an neue Form
Konsolenanwendungen haben normalerweise keine Fenster(Formulare)
Aber einer Event-Property kannst jede passende Methode zuweisen (Signatur muß stimmen) |
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 :) |
Re: Procedure an neue Form
Eine Methode ist Teil einer Klasse.
|
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. :( |
Re: Procedure an neue Form
Man kann auch in Konsolenanwendungen Klassen verwenden, oder was verstehst du unter einer Konsolenanwendung?
|
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:
Was muss ich machen, dass mir der Compiler nicht an der Stelle button.OnClick := klicke; um die Ohren springt?
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. Danke nochmals an alle! EDIT: Naja, ich verstehe darunter dieses Eumel, was man unter "Neu" und "Konsolenanwendung" erstellen kann. ^^" |
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? |
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. |
Re: Procedure an neue Form
Zitat:
Zitat:
|
Re: Procedure an neue Form
Zitat:
Zitat:
Wäre toll, wenn du mir ein Beispiel geben könntest. :) Ich dnake euch trotzdem schon jetzt! |
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.
|
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, ![]() |
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. 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. |
Re: Procedure an neue Form
Zitat:
Versuchs es mal mit .CreateParented |
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:
Dann bringt er mir den Fehler 1400 ungültiges Fensterhandle.
test := TForm.Createparented(OldDesk);
test.show; Was heißt das? |
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
|
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? |
Re: Procedure an neue Form
as übergibst du las Handle?
|
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.) |
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 02:05 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