Ein Form mehrfach laden
-
Mach die Funktion go_to zu einer Memberfunktion von (vermutlich) Form1. Oder schau mal in der Hilfe nach, was denn dort überhaupt übergeben werden kann.
Anonsten kann ich dir nur raten, erst mal ein paar Tutorials mit den Grundlagen durchzuarbeiten.
Und bitte keine Fullquotes machen.
Grüße Joe_M.
-
Hallo
ach, das hab ich ja ganz übersehen. Die Fehlermeldung ist schon ganz aussagekräftig, this kann nur in Methoden benutzt werden, also Funktionen, die einer Klasse wie TForm1 zugeordnet sind. Dies solltest du in einem Tutorial über Objektorientierte Programmierung in C++ nachlesen.
Du kannst jetzt ganz einfach die Methode go_to deiner Fensterklasse zuordnen (wenn die Fensterklasse TForm1 heißt) :
void TForm1::go_to(AnsiString nick) { LONG MyGWL_EXSTYLE = GetWindowLong(Form2->Handle, GWL_EXSTYLE); SetWindowLong(Form2->Handle, GWL_EXSTYLE, MyGWL_EXSTYLE | WS_EX_APPWINDOW ); myForm *Form2 = new TForm2(this); myform->Caption=nick; myform->Show(); delete myform; }Außerdem öffnest du noch das zugehörige Headerfile zu diesem Fenster, und gibts dort noch die Definition der Methode an
public : ... void go_to(AnsiString nick);/Edit : zu spät (@ Joe_M : für deine Statistik *grins*)
/Edit : momentmal, eigentlich ist das this in TForm2(this) gar nicht nötig, TForm2(NULL) ist in diesem Fall völlig ausreichend
bis bald
akari
-
{ myform->Show(); delete myform; }Ist mir gerade noch aufgefallen. So wird das Form2, direkt nach Erstellung, sofort wieder gelöscht. Bestenfalls flackert es mal kurz auf, egal, ob der Konstruktor mit, oder ohne Owner-Parameter aufgerufen wird.
@akari: Scheint mein Glückstag zu sein.

Grüße Joe_M.
-
Hallo
ja, statt Show() sollte wohl ShowModal() aufgerufen werden.
bis bald
akari
-
LOL
Also joa.. danke erstmal

Wird schonklappen
Nur... muss ich jetzt das delete woanders rein packen.. macht wenig sinn, dass ich das öffne wenn ichs direkt wieder lösch
Aber danke leute
ihr habt mir sehr geholfen 
-
akari schrieb:
ja, statt Show() sollte wohl ShowModal() aufgerufen werden.
Hmm.. weiß net obs nu daran liegt.. auf jeden Fall kann ich jetzt gar net mehr zum Form1 um ein weiteres Fenster zu öffnen

-
Hallo
dann schau dir mal in der Borland-Hilfe an, was TForm::ShowModal() macht.
Ansonsten must du wirklich das delete an eine endere Stelle verlegen, nämlich dann wenn du das entprechende Fenster schließt.
Eventuell wäre ja eine MDI-Anwendung für dich das bessere Konzept.bis bald
akari
-
Hatte doch
myform->Show(); ... delete form;geschrieben. Die ... bedeuten, dass dazwischen was kommt und der Zeiger freizugeben ist.
Du kannst den Zeiger global anlegen, im Konstruktor initialisieren und im Destruktor löschen. So kann du Show() verwenden ohne in der Funktion ein delete zu machen
-
Christian211 schrieb:
Du kannst den Zeiger global anlegen, im Konstruktor initialisieren und im Destruktor löschen. So kann du Show() verwenden ohne in der Funktion ein delete zu machen
Das klingt gut. Nur wie global anlegen? Sorry... ich steh irgendwie aufm Schlauch...
-
Hi Christian,
scheinst ja jetzt auch öfter hier zu sein...
Es hatte dir doch keiner einen Vorwurf gemacht. Es war einfach ein Mißverständnis von Shevron. Wie das eben so ist, wenn man sich nicht die Mühe macht, sich intensiv mit den Grundlagen auseinander zu setzen, bevor man sich an ein GUI-Projekt wagt.Allein diesen Satz find ich sehr treffend:
shevron schrieb:
Das mit new haben mir schon mehrere Leute gesagt... scheint also der richtige Ansatz zu sein...
Noch jemand, der keine F1-Taste auf seiner Tastur hat... Oder der einfach zu faul ist, sie zu benuten. Ich kann mir nichr vorstellen, dass man an new und delete vorbeikommt, wenn man auch nur ein einziges Grundlagentutorial durcharbeitet.
Sorry, Shevron, aber Du mußt zuerst ein paar Grundlagen lernen. So führt jede Antwort von uns nur zu 2 Neuen Fragen. Und die werden alle ausführlichst in Grundlagentutorials beantwortet.
-
Nach 2 Jahren Programmierung sollte man meinen es zu können nicht wahr?

Aber wie schon gesagt.. mein Lehrer war nicht so die Granate...
-
Sollte man tatsächlich meinen... Es ist mir schleierhaft, wie man 2 Jahre lang C++ lernen kann, ohne einmal mit Themen, wie 'Lebensdauer von Variablen' oder 'Dynamische Instanzen von Objekten' in Kontakt zu geraten.
Wie auch immer, es kann nicht schaden, die Lücken mit einem Tutorial zu schließen. Müßte doch recht schnell gehen.
-
joa mach ich jetzt auch mal.. also bis gleich ^^
-
Habe micht auch gar nicht "vorgeworfen" gefühlt

Hier nochmal alles genau für shevron:
Alternative 1 globaler Zeiger
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; Irgendwas *zeiger; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { zeiger=new Irgendwas; } //--------------------------------------------------------------------------- TForm1::~TForm1() { delete zeiger }Alternative 2 Bestandteil der Klasse. Hier wird der Zeiger in der *.h definiert:
class TForm1 : public TForm { __published: // Von der IDE verwaltete Komponenten private: Irgendwas *zeiger; // Anwender-Deklarationen public: // Anwender-Deklarationen __fastcall TForm1(TComponent* Owner); ~TForm1(); };Im Konstuktor und Destruktor bleibt es wie es ist.
-
Danke Christian... Werde denk ich mal so verfahren...
Ich les mir jetzt aber glaub ich trotzdem mal besser Tuts und so durch...
Gibts ja nicht.. was hatte ich da nur fürn Stumpf-Lehrer?
Naja... wenn man nicht alles selber macht
Trotzdem danke Jungs

Ich bleib tapfer am Ball