Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Menü in Delphi realisieren (https://www.delphipraxis.net/87353-menue-delphi-realisieren.html)

Problemmacher 27. Feb 2007 14:43


Menü in Delphi realisieren
 
Schönen Tag Liebe User,

da mir per PN leider niemand helfen wollte, frag ich nun doch
hier direkt im Forum - Wäre wirklich nett wenn mir jemand
helfen könnte! Schonmal vorab größten Dank!

Ich wollte euch nämlich fragen, welche Möglichkeiten ich besitze,
in Delphi ein Menü zu realisieren. Auf folgender Website habe
ich bereits eine Möglichkeit dafür gefunden, jedoch werden da bei
jedem Klick auf einen der Menüpunkte einfach in der Prozedur die
jeweiligen Komponenten ein-/ bzw ausgeblendet - Bei sehr vielen
Seiten die ich dabei also im Programm realisieren möchte, würde der
Quelltext ja schon allein durch diese Sachen ünnötig lang werden.
Link > http://noebis.pi-noe.ac.at/delphi/kapitel6.htm

Gibt es eine elegantere Lösung? Am schönsten wäre es ja, wenn es sowas
gehen würde, dass ich alle Seiten einzeln machen könnte und diese
so wie im Internet durch eine Art IFrame oder Include dann in das
Formular einbinden könnte. Ich hoffe ihr versteht was ich meine
und könnt mir helfen. Nochmal lieben Dank!

Grüße,
Gregor

mkinzler 27. Feb 2007 14:46

Re: Menü in Delphi realisieren
 
Du könntest das menü ja zur Laufzeit erzeugen lassen.

Problemmacher 27. Feb 2007 15:00

Re: Menü in Delphi realisieren
 
Zitat:

Zitat von mkinzler
Du könntest das menü ja zur Laufzeit erzeugen lassen.

Das bedeutet? Sorry, bin kein Superprofi in Delphi, daher wäre es nett
wenn du es etwas ausführen könntest, hab damit noch nicht lange zu tun =)! Danke!

mkinzler 27. Feb 2007 15:01

Re: Menü in Delphi realisieren
 
Wenn du vielleicht geanuer beschreiben würdest, was du genau vor hast.

Kedariodakon 27. Feb 2007 15:01

Re: Menü in Delphi realisieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Warum nicht einfach die TMainMenu Komponente aufs Formular ziehen und dann doppelt anklicken?

Bye Christian

Problemmacher 27. Feb 2007 15:07

Re: Menü in Delphi realisieren
 
Ich habe vor (wie dem Aufbau z.B. einer Website nach) in Delphi ein Programm
zu schreiben, wo ich aufgrund der besseren Benutzerfreundlichkeit ein
Menü integrieren möchte. Damit möchte ich auf verschiedene Bereiche zugreifen,
nehmen wir mal an ich habe vor für 20 Städte NRWs Menüpunkte anzulegen,
weil ich für jede Stadt dann im gleichen Fenster best. Informationen einfügen will.
Für jede Stadt sind dann halt versch. Komponenten Komponenten vorgesehen,
die jedoch nie alle gemeinsam angezeigt werden, sondern immer nur für die
jeweilige Sektion (Menüpunkt) ...

Nun habe ich wie gesagt im Internet durch den Link sowas gefunden, jedoch
ist dort das Prinzip die Menüpunkte einfach als Ein/- und Ausschalter
für die Visible-Eigenschaft auszunutzen. Jedoch würde dies in meinem
Fall z.B. den Quellcode total lang machen, da ich ja 20 Menüpunkte habe
mit sagen wir mal 10 Komponenten ... dann müsste ich ja in jeder
Menüpunktprozedur reinschreiben welche Komponenten angezeigt werden
sollen und welche nicht ... und bei der Masse an Komponenten doch ein
unglaubliches Chaos ... versteh ihr was ich meine? Sorry, falls die Sätze
etwas abgehackt sind ...

Problemmacher 27. Feb 2007 15:10

Re: Menü in Delphi realisieren
 
Mist, ausversheen statt Edit .. Zitat gedrückt - Sorry!

mkinzler 27. Feb 2007 15:11

Re: Menü in Delphi realisieren
 
Ist die Struktur der Menüs immer gleich? Dann könnte man die Menüpunkt dementsprechend umbenenne oder diese zur laufzeit erstellen und wieder zu entfernen, wenn ein anderer Bereich gewählt wird.

Problemmacher 27. Feb 2007 15:15

Re: Menü in Delphi realisieren
 
Wenn ich dich richtig verstehe fragst du ob die Anordnung und
der Inhalt des Menüs stetig gleich bleibt, egal wessen Inhalt
gerade dort angezeigt wird? Dann ja - Also will halt z.B. fünf
Begriffe im Menü haben als Oberbegriff der nichts auslöst, nur so
halt z.B. Niederrhein, Westfalen etc. ... und dann soll bei einem
Klick darauf das Menü erscheinen mit den Städten, die Listen bleiben
da ja immer gleich ... >> Dies ist auch wohl weniger das Problem,
ABER wie kann ich dann den verschiedenen Inhalt der Menüpunkte
darstellen, der sich ja in vielen Komponenten unterscheiden kann ...
Gibts da keine andere einfache und simple Methode statt der Visible-Eigenschaft?

mkinzler 27. Feb 2007 15:28

Re: Menü in Delphi realisieren
 
Vielleicht wäre in diesem Fall ein TabControl interessant.

DGL-luke 27. Feb 2007 15:36

Re: Menü in Delphi realisieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
@mkinzler: Eher TPageControl ;-)

@Problemmacher:

Wie wärs mit Frames? Ein Frame ist ein "Teil" einer Form, den du wie eine Form mit COntrols und natürlich Code bestücken kannst.

Dann brauchst du z.B. einen Frame für deine Städte, und einen für was anderes. Da deine Ausführungen hier sehr unklar sind, mach ich kurz mal ne Demo fertig.

mkinzler 27. Feb 2007 15:37

Re: Menü in Delphi realisieren
 
Zitat:

@mkinzler: Eher TPageControl Wink
Nein ich dachte schon an einen TabControl. da die Struktur ja immer gleich ist.

Problemmacher 27. Feb 2007 15:40

Re: Menü in Delphi realisieren
 
Oh das ist sehr nett! Hab ja auch im ersten Posting geschrieben
das ich eine Art IFrame oder Include Lösung suche wie man sie
von Websites kennt. Wusste nicht wie ich das anders ausdrücken soll.

Brauch halt ein festes Menü und dann halt einen Bereich der universell
je nach Menüpunkt angezeigt werden soll. Hierfür eignete sich die
Visible-Eigenschaft allerdings nicht, da ich so bei jeder Menüklickprozedur
unzählige Sachen ausblenden musste, um das gewünschte anzuzeigen ...

DGL-luke 27. Feb 2007 15:59

Re: Menü in Delphi realisieren
 
Hallo,

das ist ganz einfach:

Du definierst dir ein

Delphi-Quellcode:
ActiveFrame: TFrame;
und immer wenn du die frames wechselst, machst du

Delphi-Quellcode:
ActiveFrame.Hide;

ActiveFrame := NewFrame;
damit musst du pro Menüart immer nur einen frame definieren.

Problemmacher 27. Feb 2007 16:01

Re: Menü in Delphi realisieren
 
@DGL-luke - Das mit dem Menü ist schon genau das was ich vor hatte,
jedoch weiß ich nicht ob ich mit der Einbindung der Inhalte so zu
recht kommen werde. Wenn wir jetzt ein anderes Beispiel nehmen,
z.B. ich möchte gern ein Programm schreiben worüber man auf zwei
Spiele zugreifen kann ... über das Menü, ist ja jetzt so kein Problem denke
ich mal ...

Jedoch erscheint mir deine Demo zumindest so, als wäre sie an
ein Schema gebunden. Sprich dort steht immer der Stadtame u.s.w.,
jedoch wollte ich gern inhaltsmäßig völlig unabhängige Seiten
voneinander gestalten. Genau wie auf einer Website, dort ist
der Inhalt auch immer anders und nicht nach dem gleichen Schema,
so ist die Newssektion anders aufgebaut als die Impressums Seite ...

Worum es mir also ging, ist folgendes: Ich mache wie gewohnt im Formular
meine Komponenten u.s.w. für eine Seite fertig. Dann hab ich ja ein
eigenständiges Programm bzw Projekt. Nun mache ich noch eins und hab
also zwei Programme geschrieben, die verschieden platzierte Komponenten
haben, andere Aufgaben u.s.w. ... nun wollte ich die halt durch das
Menü benutzerfreundlicher zugänglich machen, damit nicht alles auf
eine Formular-Seite gepackt wird.

Entschuldigt falls ich mich unklar ausgedrückt habe, aber ist halt
schwer zu erklären was machen zu wollen, was man selber nicht kann =)!

Danke auf jeden Fall dafür, dass ihr euch bereits so viel Zeit
genommen habt, um mir zu helfen!

DGL-luke 27. Feb 2007 16:06

Re: Menü in Delphi realisieren
 
Jop.

Geh mal auf Datei|Neu|Frame. Dann hast du genau so einen Frame, den du mit einer "Maske" aus Komponenten ausstatten kannst.

Wenn du wirklich total unterschiedliche Sachen willst, musst du halt für jedes einen einzelnen Frame machen. Das kannst du ja auch verschachteln!

Also einen "Spiele"-Frame, und in diesen dann die Information über die anderen frames, sprich die einzelnen spiele. du musst halt dann im frame noch eine variable definieren, der du das gewünschte spiel zuweisen kannst.

(Ich weiß ja nicht, obs dir aufggefallen ist, aber ich benutze hier immer die "Tag"-Eigenschaft. Das kannst du so beibehalten, du musst dann nur pro "Kategorie" ein OnCLick-Event implementieren - wäre zumidnest IMO das praktischste)

Problemmacher 27. Feb 2007 16:20

Re: Menü in Delphi realisieren
 
Ok langsam hab ich es, nurnoch paar "doofe Fragen", weil
ich es noch nicht ganz verstanden hab. Muss man halt einmal
richtig durchgemacht haben und dann versteht man das auch,
aber beim ersten Mal ist es immer schwer, sorry ...

Hab nun das Formularfenster(Unit1) und einen neuen Frame (Unit2) erstellt,
nun habe ich ja zwei Fenster in Delphi. Nun meine Fragen ...

> Wo kann ich im Hauptformularfenster (Unit1) bestimmen wo der Frame XY
angezeigt werden soll?

> Wie bzw. was schreibe ich in die Przedur des jeweiligen Menüpunktes,
damit der jeweilige gewünschte Frame im Hauptformularfenster geöffnet wird.

Danke =)!

DGL-luke 27. Feb 2007 16:34

Re: Menü in Delphi realisieren
 
Hallo,

ich würde erstens den Frames sinnvolle Name geben :)

dann zu deinen Fragen:

- Stell am besten den "Align" des Frames auf alClient. Er wird dann da, wo er hineinkommt, alles ausfüllen. Wo er genau hinkomt, bestimmst du über die Eigenschaft "Parent". Die sollte eigentlich immer die selbe sein, und kann eine beliebige von TWinControl abgeleitete Komponente sein, z.B. ein TPanel.

- Das siehst du in meiner Demo: "Frame.Show". Wie bereits gesagt, solltest du dir irgendwo merken, welcher frame zuvor aktiv war, damit du den verstecken kannst.

Problemmacher 27. Feb 2007 16:41

Re: Menü in Delphi realisieren
 
Zitat:

Zitat von DGL-luke
- Das siehst du in meiner Demo: "Frame.Show". Wie bereits gesagt, solltest du dir irgendwo merken, welcher frame zuvor aktiv war, damit du den verstecken kannst.

Wenn ich einen neuen Menüpunkt drücke, wird doch der neue Frame im Fenster
geladen und der alte wäre dann doch nicht mehr sichtbar, oder? Falls nein,
was wäre denn dann das Gegenteil von Frame.Show ... Frame.Delete /.Destroy?

DGL-luke 28. Feb 2007 16:26

Re: Menü in Delphi realisieren
 
Hallo,

wenn du nur den zweiten auf sichtbar schaltest, dann wird der alte drunterstecken, und evtl. streiten sich die dann um den Platz da ^^

Deshalb solltest du den alten gleich wieder auf Nicht sichtbar schalten. Das geht entweder per "Visible := false" oder per "Hide".

Zu deiner PN:

Zitat:

In deinem Quelltext steht ja "CityFrame.Show;",
doch wo finde ich den im Programm wieder? Also hab
schon unter Fensterliste geguckt und so, aber bei dir
find ich nicht den Ort wo dieser Frame (dieses weitere
Fenster in Delphi) sich befindet?
Er ist in der Unit UfrCities.pas abgelegt. Die Variable CityFrame ist als privates Form-Member definiert, steht also in der Formdeklaration drin.

Zitat:

Außerdem sagtest du ja ich könnte den Panel als Fenster für
den Frame benutzen, mit Hilfe der Eigenschaft Parent.
Bei mir gibt es allerdings keine Eigenschaft Parent, sondern
nur ParentFont, ParenShowHint, ParentDiBiMod, ParentColor?
Hallo,

wenn du dir meinen Code im OnFormCreate anschaust:

Delphi-Quellcode:
Cityframe := TCityFrame.Create(self);
Cityframe.Parent := self; //das ist das wichtigste
self ist hier die Form, das müsstest du nur durch "FramePanel" oder wie auch immer du dein panel nennen willst ersetzen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:12 Uhr.

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