CODE 1400 - Ungültiges Fensterhandle



  • class Picture{
    	public:
    
    		TForm *Window;
    		TImage *Image;
    
    		//-------------------------------------------->>>>>>
    
    		Picture(AnsiString dir){
    
    		Window = new TForm(this);
    		Image = new TImage(Window);
    
    		Image->Picture->LoadFromFile(dir);
    		Image->AutoSize=true;
    		Image->Width=Image->Picture->Width;
    		Image->Height=Image->Picture->Height;
            Image->Align=alClient;
    
    		Window->Position=poScreenCenter;
    		Window->Caption=ExtractFileName(dir);
    		Window->BorderStyle=bsToolWindow;
    		Window->Width = Image->Picture->Width;
    		Window->Height = Image->Picture->Height;
    
    		Window->Show();
    		}
    
    		//-------------------------------------------->>>>>>
    
    		~Picture(){
    		delete Window;
    		delete Image;
    		}
    
        };
    

    Der FEhler beim Ausführen:

    Ungültiges Fensterhandle

    Bei der Stelle

    Window->Show();
    

    Wieos das ?
    Stimmt

    Window = new TForm(this);
    

    Etwa nicht ?



  • Du mußt dort den Eigentümer des Formulars angeben (im Sinne der VCL). Deine Klasse "Picture" erscheint mir dafür nicht gedacht.
    Nimm am besten einfach Application oder 0.

    Window = new TForm(Application); // oder 0
    

    Ähnliches gilt für "Image(this)": du brauchst (und solltest) dann nicht mehr das Image von Hand "delete"n, da das dann der Eigentümer (Owner) selber macht.

    P.S: Es fehlt bei dir noch ein "Image->Parent = Window;"...

    Schau dir mal in der Hilfe den Unterschied dzwischen "Parent" und "Owner" an!


Anmelden zum Antworten