Delphi-PRAXiS
Seite 1 von 2  1 2      

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 TForm mit BorderStyle=bsNone Frage (https://www.delphipraxis.net/166319-tform-mit-borderstyle%3Dbsnone-frage.html)

RWarnecke 7. Feb 2012 22:46

TForm mit BorderStyle=bsNone Frage
 
Hallo zusammen,

ich habe auf einer Form eine Listview und eine Auswahlliste. Wenn ich in der Listview auf einen Eintrag einen Doppelklick ausführe, wird eine zweite Form mit der Eigenschaft BorderStyle=bsNone erstellt und über die Listview gelegt. Ich benutze die TForm sozusagen als eine Art Frame. Über einen Button kann ich die erstellte Form, die über der Listview liegt wieder schliessen. Wenn ich jetzt in der Auswahlliste, die zusätzlich zur Listview oder zur erstellten Form angezeigt wird, einen Eintrag auswähle, soll sich der Inhalt der Listview ändern. Bis hier funktioniert alles wunderbar.

Jetzt zu meinem Problem :
Wenn nicht die Listview zu sehen ist, sondern die erstellte Form, soll diese vorher geschlossen werden und dann die Listview wieder angezeigt werden. Ich habe das ganze versucht über die Eigenschaft Showing der erstellten Form abzufangen. Nur leider wird diese Eigenschaft auch dann True gesetzt, wenn die erstellte Form über die Procedure Close geschlossen wird.

Also kommt meines Erachtens die Eigenschaft Showing nicht in Frage. Wie könnte ich es trotzdem realisieren, dass die erstellte Form erst geschlossen wird und dann der neue Inhalt der Listview entsprechend dem Eintrag in der Auswahlliste angezeigt wird ? Ein Wechsel zwischen den einzelen Einträgen der Auswahlliste sollte immer Funktionieren.

Gruß
Rolf

Uwe Raabe 7. Feb 2012 23:26

AW: TForm mit BorderStyle=bsNone Frage
 
Ich bin nicht sicher, ob ich dich richtig verstanden habe, aber was spricht gegen
Delphi-Quellcode:
Form.Visible
?

EWeiss 7. Feb 2012 23:28

AW: TForm mit BorderStyle=bsNone Frage
 
Die Frage wäre warum mußt du die Borderlose Form schließen reicht hier nicht ein Hide?

gruss

Uwe Raabe 7. Feb 2012 23:31

AW: TForm mit BorderStyle=bsNone Frage
 
Zitat:

Zitat von EWeiss (Beitrag 1149756)
Die Frage wäre warum mußt du die Borderlose Form schließen reicht hier nicht ein Hide?

Delphi-Quellcode:
procedure TCustomForm.Hide;
begin
  Visible := False;
end;
:gruebel:

EWeiss 7. Feb 2012 23:38

AW: TForm mit BorderStyle=bsNone Frage
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1149757)
Zitat:

Zitat von EWeiss (Beitrag 1149756)
Die Frage wäre warum mußt du die Borderlose Form schließen reicht hier nicht ein Hide?

Delphi-Quellcode:
procedure TCustomForm.Hide;
begin
  Visible := False;
end;
:gruebel:

Lieber Uwe schon klar..
mein Problem dabei du hast ein paar Minuten vor mir gepostet so konnte ich deinen Beitrag erst nachher sehn ;)

gruss

RWarnecke 8. Feb 2012 00:09

AW: TForm mit BorderStyle=bsNone Frage
 
Hallo Ihr beiden,

danke erstmal für Eure Antworten. Ich weiß nicht, ob es eine entscheidene Rolle spielt, aber ich setzte den BorderStyle erst zur Laufzeit. Wenn ich euch richtig verstanden habe, dann soll ich die Forms, die im Moment durch einen Doppelklick auf einen ListView-Eintrag erstellt werden, beim Starten des Programms erstellen oder ? Damit ich dann später nur noch mit Hide und Show/ShowModal die Forms anzeigen oder verschwinden lassen kann ?

Edit: Hier noch ein Sourcecodeteil wie ich erstelle :
Delphi-Quellcode:
BillingDetails := TCreateBillingForm.Create(Self);
BillingDetails.Parent := Self;
BillingDetails.BorderStyle := bsNone;
for I := 0 to BillingDetails.ComponentCount - 1 do
  if (BillingDetails.Components[i] is TAdvEdit) then
    TAdvEdit(BillingDetails.Components[i]).ReadOnly := True;
{...}
BillingDetails.Show;
Dieser Teil wird in meiner MainForm des Programms ausgeführt, wenn auf einen Eintrag in der ListView ein Doppelklick ausgeführt wird.

EWeiss 8. Feb 2012 00:21

AW: TForm mit BorderStyle=bsNone Frage
 
Zitat:

Damit ich dann später nur noch mit Hide und Show/ShowModal die Forms anzeigen oder verschwinden lassen kann ?
So war das gedacht.

Ich Händle das mit meinen nonvcl Windows genau so.

gruss

RWarnecke 8. Feb 2012 00:24

AW: TForm mit BorderStyle=bsNone Frage
 
Wenn ich aber nur Hide und Show/ShowModal benutze, habe ich ja immer noch die ganzen Eingaben in der Form stehen. Das heißt also, Du löscht dann prinzpell alles beim Verstecken oder vor dem Anzeigen wieder ? Wenn ja, ist das nicht etwas umständlich ?

EWeiss 8. Feb 2012 00:29

AW: TForm mit BorderStyle=bsNone Frage
 
Zitat:

Zitat von RWarnecke (Beitrag 1149778)
Wenn ich aber nur Hide und Show/ShowModal benutze, habe ich ja immer noch die ganzen Eingaben in der Form stehen. Das heißt also, Du löscht dann prinzpell alles beim Verstecken oder vor dem Anzeigen wieder ? Wenn ja, ist das nicht etwas umständlich ?

Ich weiss nicht was da in der Form drin steht.
Aber in dem du die Form schließt löschst du doch quasi auch alles oder?

Blick nicht so recht da durch was du auf die Form setzen willst zu Laufzeit.
Wenn es gedruckte Texte sind reicht ein einfaches refresh bei Hide oder?
Dafür muss ich die Form nicht immer und immer wieder neuladen.

Wenn du das TAdvEdit aufsetzt brauchst du bei hide doch nur die einträge löschen.
Ohne die Komponente immer wieder neu zu laden.

gruss

Uwe Raabe 8. Feb 2012 08:57

AW: TForm mit BorderStyle=bsNone Frage
 
Zitat:

Zitat von RWarnecke (Beitrag 1149778)
Wenn ich aber nur Hide und Show/ShowModal benutze, habe ich ja immer noch die ganzen Eingaben in der Form stehen. Das heißt also, Du löscht dann prinzpell alles beim Verstecken oder vor dem Anzeigen wieder ? Wenn ja, ist das nicht etwas umständlich ?

Sehe ich das richtig, daß du bei jedem Doppelclick in den ListView eine neue Instanz für BillingDetails erstellst? Dann stellt sich die Frage, an welcher Stelle eine etwaige vorherige Instanz freigegeben wird. Wenn du keine besonderen Vorkehrungen getroffen hast, wird das Form bei einem Close eigentlich auch nur versteckt und nicht freigegeben. Wenn du dann beim nächsten Doppelclick eine neue Instanz erzeugst und BillingDetails zuweist, bleibt das vorherige Form noch existent und wird erst bei Freigabe des MainsForms aus dem Speicher entfernt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:56 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz