AGB  ·  Datenschutz  ·  Impressum  







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

Im Onactivate die Form hiden

Ein Thema von TheMiller · begonnen am 20. Nov 2005 · letzter Beitrag vom 20. Nov 2005
Antwort Antwort
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#1

Im Onactivate die Form hiden

  Alt 20. Nov 2005, 12:06
Hallo,

prüfe in Form2 bei onactivate einige Daten. Wenn diese nicht stimmen, soll Form2 gehidet werden und Form1 gezeigt werden. Doch - wie nicht anders zu erwarten - gab es den besagten Fehler, dass im OnAvtivate nicht gehidet werden kann.

Gibt es da einen Trick?

Danke im Voraus
Bisheriger Nutzername "DJ-SPM"
  Mit Zitat antworten Zitat
Benutzerbild von Daniel B
Daniel B

Registriert seit: 27. Okt 2005
Ort: Dachau
453 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Im Onactivate die Form hiden

  Alt 20. Nov 2005, 12:13
Noch früher prüfen. Je nachdem wie oft Du das abfragen willst.
Activate kommt ja immer wieder, Paint auch.
Besser im Create prüfen und im Show Hiden, oder im Show prüfen und dann Hiden.

Lebenslauf:
OnCreate -> OnShow -> OnActivate -> OnPaint -> OnResize -> OnPaint
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Im Onactivate die Form hiden

  Alt 20. Nov 2005, 12:19
Hai DJ-SPM,

kannst Du nicht versuchen die Daten zu prüfen bevor Du überhaupt die Form im Programm erzeugst bzw. anzeigen lassen möchtest?
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#4

Re: Im Onactivate die Form hiden

  Alt 20. Nov 2005, 12:45
Naja, wollte eigentlich so eine Art Lade-Bildschirm (kein Splash-Screen). Gebe in Form1 die Zugangsdaten ein, komme dann auf Form2, dort connected er zum Server, prüft und läd die Daten runter. Wenn aber die Daten falsch sind, soll er wieder zum Anmeldebildschirm auf Form1 zurückkehren.
Bisheriger Nutzername "DJ-SPM"
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#5

Re: Im Onactivate die Form hiden

  Alt 20. Nov 2005, 12:51
Hi,
dann prüf das am besten nicht im OnActivate. Setz einfach in Form1 die Eigenschaft Visible von Form2 auf true, ruf deine Methode zum prüfen auf (am besten mit Rückgabewert ob alles geklappt hat). Wenn du in Form1 dann ein erfolgreiches Anmelden von dieser Methode bekommst, versteckst du Form1, sonst form2. Hoffe ist halbwegs klar wie ich das meine.
Und wenn du auch mit einem Form auskommen könntest, wären Frames vielleicht noch eine gute Alternative für dich, ich finde die echt Praktisch (und man kann sehr elegant so etwas realisieren).
Würde dir auch raten möglichst nicht überkreuz Units einzubinden (falls bei dir der Fall)

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#6

Re: Im Onactivate die Form hiden

  Alt 20. Nov 2005, 13:00
Hm,

Frames ist eine gute Idee, aber wie gehe ich mit denen um? habe das noch nie gemacht. Kannst du mir diesbezüglich Tipps geben?
Bisheriger Nutzername "DJ-SPM"
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#7

Re: Im Onactivate die Form hiden

  Alt 20. Nov 2005, 16:06
Ja klar,
also Frames legst du unter Datei|Neu|Frame an. Du erhälst dabei dann immer ein Fenster, dass stark an ein Form erinnert. Um ein Frame auf einem Form zu platzieren benutzt du Frameeinfügen, ist auf der Std.Palette gleich das erste (glaube ich).
Frames bekommen immer eine eigene Unit und ermöglichen dir damit schon mal etwas modularität in jedes Programm zu bringen.

Wie gesagt, ein Frame verhält sich im Prinzip schon mal wie ein ganz normales Form, aber halt nur im Prinzip. Deshalb geh ich mal lieber auf die Unterschiede ein. Ereignisse wie OnActivate wirst du bei einem Frame nicht finden, genauso wenig wie du eine eigene Titelleiste hast. Genaugenommen verhält sich ein Frame doch eher, wie ein Panel dass du um die platzierten Elemente erweitern kannst. Ein wichtiger Vorteil von Frames besteht darin, dass sie etwas, hm, wie soll ich sagen, Zeigerartig behandelt werden. Wenn du auf zwei verschiedenen Forms das gleiche Frame platzierst und Dinge an dem Frame veränderst, dann änderst du damit beide Forms gleich mit (glaube die werden auch nur einmal im Speicher gehalten). Hier gilt es allerdings aufzupassen. Wenn du etwas an einem Frame änderst, dann tue es immer in dem Fenster, dass zu der Frame-Unit gehört.
Hast du also dein TFrame1 und ein TForm1 wobei eine Instanz von TFrame1 auf dem TForm1 liegt. Der Einfachheit halber bezeichne ich letzteres mal als Frame2 (also Frame2 = Instanz von TFrame1 auf Form1).
Fügst du jetzt einen Button auf TFrame1 hinzu, ist der auch automatisch auf Form1 zu sehen (in Frame2). Fügst du den Button aber in Frame2 ein, so hat das keine Auswirkungen auf die eigentliche Klasse. Hast du also noch Form2 und da liegt auch eine Instanz (Frame3), dann wird sich an Frame3 genau dann was ändern, wenn du es direkt an TFrame1 änderst.

Klingt kompliziert, ist aber eigentlich ganz einfach (und gut durchdacht, wenn man sich dran gewöhnt hat). Aufpassen musst du auch mit den Variablen, die du für TFrame1 benutzt. Width und Height gibt es natürlich auch hier schon (ist ja ein Controll) und gerade wenn man die auch als private deklariert und 0 setzt gibt es lustige Effekte (kein sichtbares Frame ohne Compilerwarnung, nicht dass ich sowas mal gemacht hätte )

Wie gesagt, achte drauf, dass du immer auf dem nicht-Form arbeitest. Da kannst du dann auch die Aktionen für Ereignisse festlegen. Die gelten dann auch immer für jede Instanz dieses Frames. Damit kannst du Frames gut wiederverwenden und hast auch eine schöne Möglichkeit ein Form etwas modularer zu gestalten.

Für das was du vorhast, kannst du dann jedes Form durch ein Frame ersetzen und diese dann beide auf dem Form (immer mit Align auf volle Clientgröße gestellt) platzieren. Deine Eingaben von TFrame1 (= alte Form1) liest deine jetzige Form aus und reicht die an Frame2 (früher Form2) weiter. Damit müssen Frame1 und Frame2 nichts von einander wissen.
Frame2 kann dann eine Funktion vom Typ Boolean haben, und die ruft dein Form auf. Ist die Erfolgreich, versteckst du Frame1 und zeigst Frame2, sonst nicht.

Delphi-Quellcode:
procedure TForm1.doSomething;
begin
  if self.Frame2.connect(self.Frame1.EditLogin.Text, self.Frame1.EditPassword.Text, ....) then
    begin
      self.Frame1.visible := False;
      self.Frame2.visible := True;
    end
  else
    begin
      // z.B. die falschen Felder markieren oder was auch immer
    end;
end;
Hoffe das hilft dir weiter. Und sorry wenn Antworten heute etwas dauern
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#8

Re: Im Onactivate die Form hiden

  Alt 20. Nov 2005, 16:43
Hey vielen Dank!

Das ist ja schon fast ein Tutorial. Ich werde es mal durchtesten... Habe nur leider jetzt keine Zeit.

Vielen Dank nochmal!
Bisheriger Nutzername "DJ-SPM"
  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 10:53 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