AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Form kann nicht angezeigt werden?

Ein Thema von alcaeus · begonnen am 7. Mai 2005 · letzter Beitrag vom 9. Mai 2005
Antwort Antwort
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#1

Form kann nicht angezeigt werden?

  Alt 7. Mai 2005, 11:31
Hallo allerseits,

ich erzeuge ein Form, und setze dieses dann ueber die Parent-Eigenschaft auf dein TTBXAlignmentPanel:
Delphi-Quellcode:
frmAbout := TfrmAbout.Create(Self);
frmAbout.Parent := bxapMain;
Wenn ich nun versuche, das Form mit Show oder mit .Visible := True anzuzeigen, bekomme ich immer die Fehlermeldung "Cannot focus an invisible or disabled window". Wenn ich die Form hingegen nicht auf das AlignmentPanel setze funktionierts. Dasselbe passiert uebrigens bei eine normalen Panel. Sowohl das AlignmentPanel, das normale Panel und die Form sind Enabled, und ausser der Form sind auch alle Visible. Ich habe wirklich keine Ahnung woran das liegen kann, das entzieht sich irgendwie meiner Logik. Kann mir jemand vielleicht weiterhelfen?

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Form kann nicht angezeigt werden?

  Alt 7. Mai 2005, 11:47
Also ich habs mit nem normalen Panel versucht:

Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var
  frmAbout : TForm2;
begin
  frmAbout := TForm2.Create(Self);
  frmAbout.Parent := Panel1;
  frmAbout.Show;
end;
ging bei mir ohne Probleme

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Form kann nicht angezeigt werden?

  Alt 7. Mai 2005, 12:04
Hi Andreas,
ich vermute mal sehr stark, dass du diesen Code innerhalb von OnCreate oder OnShow des Formulars aufgerufen hast. Zu dieser Zeit ist das Panel entweder noch nicht erzeugt oder noch nicht sichtbar.

Chris
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#4

Re: Form kann nicht angezeigt werden?

  Alt 7. Mai 2005, 12:11
Hallo Chak,

ich setze den Parent zwar im OnCreate, aber das Show des zweiten Forms rufe ich in einem ButtonClick auf.
Ich habe jetzt versucht, ein zweites Formular anzuzeigen, dort erhalte ich keine Fehlermeldung, aber es passiert auch nichts

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#5

Re: Form kann nicht angezeigt werden?

  Alt 7. Mai 2005, 15:13
So, hab jetzt einen Teil davon geloest: Ich muss zuerst den Parent setzen, dann BorderStyle auf bsNone, sonst geht da gar nichts, obwohl das normalerweise nicht der Fall ist. Aber egal, mir machts nichts aus.
However, zweites Problem: das Form das ich aus der DLL hole, wird nie angezeigt, wenn ich im Anfang Visible auf False setze. Visible wird geaendert, das erfrage ich mit einem ShowMessage. Setze ich am Anfang hingegen Visible auf True, so wird es immer angezeigt, egal wie ich Visible veraendere. Hat da jemand evtl. eine Loesung fuer mich?

Greetz
alcaeus

[add]Solange kein Parent gesetzt ist, wird auch das Form aus der DLL angezeigt. Ich kann mir das nur anhand der TBX-Kompos erklaeren, aber glauben will ich es nicht [/add]
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Form kann nicht angezeigt werden?

  Alt 7. Mai 2005, 17:00
Zitat von alcaeus:
So, hab jetzt einen Teil davon geloest: Ich muss zuerst den Parent setzen, dann BorderStyle auf bsNone, sonst geht da gar nichts, obwohl das normalerweise nicht der Fall ist. Aber egal, mir machts nichts aus.
However, zweites Problem: das Form das ich aus der DLL hole, wird nie angezeigt, wenn ich im Anfang Visible auf False setze. Visible wird geaendert, das erfrage ich mit einem ShowMessage. Setze ich am Anfang hingegen Visible auf True, so wird es immer angezeigt, egal wie ich Visible veraendere. Hat da jemand evtl. eine Loesung fuer mich
Verwendest Du Laufzeitpackages für DLL und Exe?
Falls nein wird es Probleme geben da ja TForm aus der Exe <> TForm aus der DLL ist!
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: Form kann nicht angezeigt werden?

  Alt 7. Mai 2005, 17:51
Hallo alcaeus,

wenn du deinem Fenster einen Parent verpasst, dann solltest du nicht vergessen ihm vorher den Style WS_CHILD zu geben (CreateParams).

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#8

Re: Form kann nicht angezeigt werden?

  Alt 9. Mai 2005, 17:58
Hallo allerseits,

neue Woche, neues Glueck: ich habs geschafft. Damit nicht nur ich profitiere, stelle ich die Loesung mal hier rein:

Die Loesung verwendet die oben erwaehnten CreateParams. Die Funktion die das Form erstellt (in der DLL) wird so deklariert:
Delphi-Quellcode:
function GetMainForm(ParentHandle: HWND): TForm; stdcall;
begin
   if ParentHandle > 0 then
      Result := TfrmDLL.CreateParented(ParentHandle)
   else
      Application.CreateForm(TfrmDLL, Result);
end;
Das Form muss die CreateParams-Methode im public-Bereich ueberschreiben:
procedure CreateParams(var Params: TCreateParams); override; Die Implementation sieht dann so aus:
Delphi-Quellcode:
procedure TfrmDLL.CreateParams(var Params: TCreateParams);
begin
   inherited CreateParams(Params);
   if Self.ParentWindow > 0 then
      Params.Style := Params.Style or WS_CHILD;
end;
Bei der Verwendung wird zuerst der Funktionstyp deklariert:
TGetDLLFrm = function(ParentHandle: HWND): TForm; stdcall; Nun kann man sich den Pointer auf die Funktion holen:
DLLFormProc := GetProcAddress(DLLHandle, PChar('GetMainForm')); Und anschliessend kann man sich auch das Form holen:
Delphi-Quellcode:
ModuleForm := TGetDLLFrm(DLLFormProc)(Panel1.Handle);
with ModuleForm do
begin
   BorderStyle := bsNone;
   Align := alClient;
   Visible := True;
end;
Bei mir funktioniert das, vielen Dank an alle die geholfen haben

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:38 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