AGB  ·  Datenschutz  ·  Impressum  







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

Frames?

Ein Thema von Jonas · begonnen am 14. Dez 2005 · letzter Beitrag vom 14. Dez 2005
Antwort Antwort
Jonas

Registriert seit: 5. Feb 2005
266 Beiträge
 
Delphi 2007 Professional
 
#1

Frames?

  Alt 14. Dez 2005, 13:12
Hi ich wollte mal fragen wie man in Delphi Frames benutzten kann? Ich habe ein Hauptfenster und möchte es mit ner Frame teilen, sprich das die eine hälfte auf *Knopfdruck* nen komplett anderen Inhalt bzw ne komplett andere Frame darstellt. Ich stell es mir halt wie bei HTML mit diesen Frames vor. Kann man jemand erklären wie das geht? Ich habe schon gesehn das es sowas wie Tabs und PageControl gibt, doch das ist nicht das was ich möchte.
  Mit Zitat antworten Zitat
Benutzerbild von sh17
sh17

Registriert seit: 26. Okt 2005
Ort: Radebeul
1.594 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Frames?

  Alt 14. Dez 2005, 13:31
Einfache Möcglichkeit:

Du legst Dir in Deinem Hauptformular eine Variable Frame : TFrame an

Dann nimmst Du Dein eigenes Frame und erstellst es z.B. beim Click auf den entspr. Menüpunkt

Delphi-Quellcode:
Frame := TMyFrame.Create(self)
Result.Parent := self;

..

TMyFrame(Frame).Edit.text := 'Beispiel'
Sven Harazim
--
  Mit Zitat antworten Zitat
Der_Unwissende

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

Re: Frames?

  Alt 14. Dez 2005, 14:11
Sich mal selber zitiert
Zitat von Der_Unwissende:
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
Vielleicht hilft es auch dir ein wenig weiter.

Gruß Der Unwissende
  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 08:40 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