Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi form2 größe aus form1 ändern (https://www.delphipraxis.net/111738-form2-groesse-aus-form1-aendern.html)

Arnulf 8. Apr 2008 16:44


form2 größe aus form1 ändern
 
Komisch, dass ich nichts gefunden habe darüber.
Aber ich habe 2 Forms.
in unit1 ( form1 ) rufe ich eine function in unit2 (enthält form2 - fVideo) auf.
dort versuche ich die größe von form2 anzupassen.

Delphi-Quellcode:
function TfVideo.receive(var myBitmap : TBitmap) : Boolean;
....
       Canvas.Draw( 0, 0, myBitmap );
       ClientWidth := myBitmap.Width;
       ClientHeight := myBitmap.Height;
.....
end;
der aufruf aus unit1
Delphi-Quellcode:
if (waitstate = WAIT_OBJECT_0)   then fVideo.receive(myBitmap);
in onRepaint der form2 (fVideo)
hab ich
Delphi-Quellcode:
ClientWidth := uMain.myBitmap.Width;
ClientHeight := uMain.myBitmap.Height;
Canvas.Draw( 0, 0, uMain.myBitmap );
jetzt wird mir beim aufruf die größe nicht angepasst.
beim repaint event allerdings schon.
also muss ich erst ein fenster über form2 (fVideo) drüberziehen damit es funktioniert.

Ist sicher nur eine kleine einstellung oder so, aber ich hab keine ahnung wo ich suchen soll.

lg
Arnulf

marabu 8. Apr 2008 17:02

Re: form2 größe aus form1 ändern
 
Hallo Arnulf,

hast du es schonmal mit dem Aufruf der Methode Invalidate() innerhalb von Receive() probiert?

Grüße vom marabu

Arnulf 8. Apr 2008 20:31

Re: form2 größe aus form1 ändern
 
Hallo marabu
nein nur asserhalb oder ja jetzt gerade.
funktioniert auch nicht.
fVideo reagiert einfach nicht auf die commandos hm...

busybyte 8. Apr 2008 20:45

Re: form2 größe aus form1 ändern
 
Ich tippe mal auf Dein
if waitstate ..
oder das Bitmap ist noch nicht fertig.
Kannst Du doch ganz einfach überprüfen.
Globales Bitmap und dann im receive dem Globalen Bmp dein übergebenes Bmp zuweisen.
Breakpoint direkt danach und Inhalt überprüfen,dann siehst Du ob
das übergebene Bmp stimmt.Wenn er gar nicht in Receive springt liegts wohl am if then.
Eine Form kann so auch nicht unendlich klein gemacht werden.
Minimum Width bei mir 125 mit Borderstyle (bsSizeable!)
bei allen anderen Borderstyles gehts auch schmaler.

Arnulf 8. Apr 2008 20:57

Re: form2 größe aus form1 ändern
 
nein am waitstate liegts sicher nicht.
nachdem die receive funktion aufgerufen wird - und das bitmap bekomme ich ebenfalls.
grundsätzlich benutze ich ein globales bitmap - übergebe das ja mit var.

Hab jetzt probiert in receive()
Delphi-Quellcode:
       ClientWidth := 100;
       ClientHeight := 100;
       invalidate();
einfach fix zu vergeben und hab mit breakpoint geprüft. - er springt einfach drüber ohne irgend etwas zu tun.
lg

semo 8. Apr 2008 21:01

Re: form2 größe aus form1 ändern
 
ich würde mich dem marabu anschließen:

Delphi-Quellcode:
function TfVideo.receive(var myBitmap : TBitmap) : Boolean;
....
  if Assigned(myBitmap) then
  begin
    Width := myBitmap.Width;
    Height := myBitmap.Height;
    Canvas.Draw(0, 0, myBitmap);
    Invalidate();    
  end;
.....
end;
Wissenswert wäre: Wie groß ist die Höhe und Breite deines Bitmaps?

semo 8. Apr 2008 21:06

Re: form2 größe aus form1 ändern
 
Einen Designvorschlag habe ich auch noch:
Warum nicht in form1 eine private Variable für dein Bitmap nutzen, die du dann per form2.receive() übergibst und in form2 ebenfalls eine private variable für das bitmap nutzen, welches du dann in form2.receive setzt.

man sollte wenn möglich globale variablen vermeiden.
somit kannst du auch dein in form2 dein
Delphi-Quellcode:
uses
  form1;
herauswerfen.

PS: Was passiert denn noch in deiner receive funktion?
Hats du noch andere Events des Form2 implementiert?
Könntest du nicht den Quellcode von form2 anhängen?

Arnulf 8. Apr 2008 21:10

Re: form2 größe aus form1 ändern
 
800x600

Delphi-Quellcode:
       if ( Assigned(myBitmap)) then
       begin
       ClientWidth := myBitmap.Width;
       ClientHeight := myBitmap.Height;
//       ClientWidth := 200;
//       ClientHeight := 200;
       Canvas.Draw( 0, 0, MyBitmap );
       invalidate();
       end
       else messagebox(0,pchar('no Bitmap'),nil,0)
funktioniert ebenfalls nicht - sobald ich aber ein anderes fenster drüber fahre gehts ( klar wegen onpaint).

edit:
jetzt mal ganz im ernst - das ist doch irgend so eine kleinigkeit die ich nicht weiß.
ich hab jetzt einfach mal das programm gestartet und einen button eingefügt:
Delphi-Quellcode:
procedure TfMain.Button2Click(Sender: TObject);
begin
fVideo.ClientHeight := 500;
fVideo.ClientWidth := 500;
fVideo.Invalidate;
end;
da tut sich nichts auf der form fVideo.
also hab ich irgend so eine kleinigkeit falsch und die sourcen sind es nicht sonder irgend etwas anderes

semo 8. Apr 2008 21:44

Re: form2 größe aus form1 ändern
 
hängst du bitte mal das projekt als zip archiv an.
sonst können wir hier noch lange rätseln.

Arnulf 8. Apr 2008 21:51

Re: form2 größe aus form1 ändern
 
ok - jetzt hab ichs.
ich hab einfach in der art noch nie mit 2 forms gearbeitet.

ich hab in form1 create - eine form2 erstellt und auf visible=true gesetzt.
damit hatte ich wohl 2 forms und eine runtime erstellt - also 3.

Dann ist es klar, warum beim onpaint event alles funktioniert hat, aber nicht wenn ich dirrekt was gezeichnet habe.

und ich bin nur drauf gekommen, weil ich einfach mal ein leeres projekt mit 2 forms erstellt hab.

jetzt verstehe ich auch, warum jeder angenommen hat, irgend etwas würde nicht stimmen mit den funktionen oder den events, weil alles eh so funktioniert wie ich es mir gedacht habe.
nur darf ich hald nicht extra noch eine form erstellen.

danke für die hilfe
Arnulf


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:09 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