Autor Beitrag
hRb
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 267
Erhaltene Danke: 12



BeitragVerfasst: Mi 15.04.20 21:49 
Hallo zusammen
Im Rahmen meiner Programmentwicklung habe ich derzeit mehrere Radiogroup-Objekte auf der Bedienoberfläche, um die unterschiedlichen Optionen beim Programmablauf zu steuern. Diese sollen nun optisch verschwinden und über ein Menü aufgerufen werden. Als Vorbild dient mir das Pulldownmenü des Compilers unter "Ansicht" (siehe beigefügtes Bild). Dort sieht man z.B. unter "Debug-Fenster" oder "Desktop" am Zeilenende ein ">", der anzeigt, dass ein Submenü folgt.
Untergeordnete Frage: wie erzeugt man diesen Pfeil > am Textende?

Beim Fahren mit der Maus über die Zeile öffnet sich beim Compiler das Submenü an passender Stelle (Top auf Zeilenhöhe). Bei mir soll sich statt der Submenü-Buttons das jeweilig entsprechende Radiogroup-Fenster öffnen. Mehrere Ansätze mit zweitem Mainmenu, Popup, PopupActionsbar, etc. lieferten bisher nicht das gewünschte Ergebnis.
Meine derzeitige "Zwischenlösung" ist ein PopupMenü. Muss hierbei jedoch auf eine der Menüzeilen klicken (statt Mausbewegung) um ein Radiogroup zu öffnen. Bei dieser Lösung arbeite ich mit visible true/false zur Anzeige der R-Groups; weiterhin sind die Fenster zu positionieren. Also alles in allem sehr umständlich.
Frage: Wie und mit welchen Objekten ist das Problem zu lösen? Möchte - wenn möglich - alles im Objektdesigner realisieren und nicht zur Laufzeit.
Vielleicht hat jemand ein Muster-Beispiel. Wäre super.
Gruß hRb
Einloggen, um Attachments anzusehen!
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8535
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 15.04.20 22:09 
Du möchtest anstelle eines Submenüs eine eigene Form an der Stelle einblenden? Das geht nicht so ohne weiteres, glaube ich. Und ist auch absolut nicht üblich, und daher nicht empfehlenswert. Menüs sind für Menüs da, nicht für was anderes. ;-)

Was möglich wäre, ist ein Submenü mit einer Liste von "RadioItems" (Property von TMenuItem), ggf. noch mit "AutoCheck". Diese könnten dann die RadioGroups ersetzen. Das nutze ich z.B. in einer kommenden Playlist-Auswahl, um im Menü die aktuell gewählte Liste zu markieren.
rad
Den einzelnen Items kannst du dann unterschiedliche Tags zuordnen, aber allen das gleiche OnClick-Event, in dem du dann je nach Tag die gewünschte Option abfängst und darauf reagierst.

Ein Submenü erstellt man, in dem man bei einem Menüeintrag im Objektdesigner per Rechtsklick "Create Submenu" auswählt
Einloggen, um Attachments anzusehen!
_________________
We are, we were and will not be.
hRb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 267
Erhaltene Danke: 12



BeitragVerfasst: Fr 17.04.20 23:32 
Hallo Gausi,
bin nicht sicher, ob ich richtig verstanden habe. Man kann das Radiogroup-Objekt zwar nicht direkt aufrufen. Aber im Bild (image2.jpg) wird indirekt die Lösung schon angezeigt. Dort findet man unter dem Menüpunkt Desktops u.a. die beiden Unter-Menüpunkte:
- Debug-Layout und
- Standard-Layout
Diese wechseln gegenseitig den Aktiv-Status, angezeigt durch das Bitmap "Haken". Hier müsste ich "nur" die Radio-Symbole einsetzen. Ist dem so?
Werde zumindest mal in diese Richtung einen Versuch starten.
hRb
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8535
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Sa 18.04.20 08:24 
Eine RadioGroup ist ja ein Element auf einer Form. Das bekommt man nicht ins Menu rein.

Man kann aber für einfache Einstellungen durchaus Menüs verwenden. Zur Anzeige, welche über ein Menü gewählte Einstellung aktiv ist, kann man die Eigenschaft "Checked" der TMenuItems benutzen. Wenn das beim OnClick automatisch passieren soll, gibt es auch noch die Property AutoCheck
Wenn zusätzlich die Property RadioItem auf True steht, kann immer nur eines "gecheckt" sein, und dann ändert sich das Haken-Symbol automatisch zu einem Kreis. Diese Symbole muss man nicht irgendwie definieren - das ist ein Feature von TMenu.

Wenn du den Haken behalten willst, aber dennoch immer nur einen Eintrag aktiviert haben willst, muss du das selber schreiben - also beim Anklicken eines Items erst alle anderen unchecken und dann das gewählte setzen. (Nichts anderes passiert auch intern wenn RadioItem gesetzt ist.)

_________________
We are, we were and will not be.
hRb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 267
Erhaltene Danke: 12



BeitragVerfasst: Mi 20.05.20 00:28 
Ich werbe immer wieder einmal, dass die Lösungen auf Fragen später auch als Code gezeigt werden. Also muss ich mich wohl selbst an diese Empfehlung halten.
So will ich nachstehend die einzelnen Entwicklungsschritte darzustellen. Zunächst habe ich - versehen mit den Tipps von Gausi - eine Lösung mit Untermenü(Pulldown) erstellt (siehe Bild). Danach konnte ich einen Teil meiner Fragen selbst beantworten.
Man nehme:
- ein TPopupMenu (Untermenüs entstehen durch RECHTSKLICK. Hierbei entstehen automatisch die von mir angefragten Pfeile),
- ein TImageList (man fülle dieses mit BitMaps. Auch hier RECHTSKLICK! Es erscheint u.a. Bildlisten-Editor... Klick. Danach selbsterklärend)
(Werde künftig, wenn ich nicht weiter weiss, häufiger mal den Rechtsklick versuchen.)

Nun zur Frage nach den Radio-Buttons. Hier Dank an Gausi.
Wichtig war der Satz: Eine RadioGroup ist ja ein Element auf einer Form. Das bekommt man nicht ins Menu rein. Meine Erkenntnis inzwischen: Popupmenü sind gut, solange es im Wesentlichen um Onklick-Verarbeitung geht. Soll jedoch etwas gespeichert werden, wie z.B. bei den Radio-Buttons, ist dies alles selbst zu realisieren. Ich habe den Weg wieder verlassen. Die "neue Lösung" ist in ein Programm "verpackt". Den Pascaal-Code herauszulösen erschien mir zu aufwändig. So stelle ich heute das gesamte Programm als zip-Datei bereit. Dieses Programm deckt zwei Aufagben ab:
1. Programm zum (einfacher) Dateiabgleich von Verzeichnissen. Ich sage bewusst "einfach", weil Th69 an anderer Stelle auf ein Profi-Programm hingewiesen hat, siehe: freefilesync.org/ . Für mich jedoch war "der Weg das Ziel". Auf diese Art lerne ich am meisten.
2. Das zweite Programm erlaubt das Dateidatum zu ändern. Entweder alle Dateien auf gleiches Datum einstellen oder um auf das bestehende Datei-Datum eine Differenzzeit zu addieren/subtrahieren. Diese Funktion ist hilfreich, um Bilddateien an Hand der Uhrzeit zu ordnen, z.B. wenn die Aufnahmen mit nicht korrekt eingestellter Kamerazeit aufgenommen wurden.

Ich bin Hobbyprogrammierer. Erwartet also nicht zuviel (es gibt nichts, was nicht zu verbessern wäre). Dennoch finden sich im Programm eine Reihe nützlicher Funktionen, die mir in zahlreichen Fragen im Forum beantwortet wurden. Der Dank gilt also der gesamten "Entwickler-Gemeinde".
hRb
Einloggen, um Attachments anzusehen!