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ü.Untermenü.Checked := true (https://www.delphipraxis.net/76904-menue-untermenue-checked-%3D-true.html)

newuser01 11. Sep 2006 20:54


Menü.Untermenü.Checked := true
 
Hallo

Ich habe ein Hauptmenü (Optionen) und in diesem sind 3 Untermenüs (Untermenü1, Untermenü2, Untermenü3) wenn ich jetzt eines der Untermenüs anklicke soll das Untermenü Checked := true sein. Ich weiß das ich im Objektinspektor nur AutoCheck auf true setzen muss und die Sache funktioniert. Ich möchte aber das wenn das Programm bendet und neu gestartet wird der Checkedharken im letzten angeklickten Untermenü bleibt. Dazu möchte ich das Klickereignis zb: der Variable "sCheck" übergeben also sCheck := 'Untermenü1=true' und dieses in der Registry "Regist.WriteString('Menue','sCheck');" abspeichern. Wenn ich dann in "TForm1.FormCreate" wieder die Registrie auslese mit "sCheck := Regist.ReadString('Menue');" und auswerte also "if sCheck = 'Untermenü1=true' then" soll das entsprechende Untermenü1 wieder den Checkedharken bekommen. ich weiß nur nicht genau wie ich das Menü genau ansprechen muss "MainMenu1.Untermenü1.Checked := true" ???

mkinzler 11. Sep 2006 21:07

Re: Menü.Untermenü.Checked := true
 
.FormCreate ist zu früh, nimm lieber .Loaded.
Zitat:

ich weiß nur nicht genau wie ich das Menü genau ansprechen muss
Ich weiß nicht genau was du mit Untermenü meinst.
Die Punkte sind eigene Klassen vom Typ MenuItem

Hawkeye219 11. Sep 2006 21:57

Re: Menü.Untermenü.Checked := true
 
Zitat:

Zitat von mkinzler
.FormCreate ist zu früh, nimm lieber .Loaded.

TForm.Loaded wird aufgerufen, bevor das OnCreate-Ereignis des Formulars ausgelöst wird.

Gruß Hawkeye

mkinzler 11. Sep 2006 22:00

Re: Menü.Untermenü.Checked := true
 
Zitat:

TForm.Loaded wird aufgerufen, bevor das OnCreate-Ereignis des Formulars ausgelöst wird.
Ich bin immer davon ausgegangen, das es andersherum sei. :oops:

marabu 12. Sep 2006 06:35

Re: Menü.Untermenü.Checked := true
 
Liste der Anhänge anzeigen (Anzahl: 1)
Guten Morgen Holger.

Du hast ein Menu und darin mehrere Items, bei denen die Eigenschaft RadioItem auf True gesetzt wurde. Beim Neustart deines Programms soll das Item wieder markiert werden, welches der Benutzer in der vorigen Sitzung zuletzt markiert hatte. Dazu musst du dir diese Einstellung irgendwo merken. Das kannst du in der Registry vermerken, aber auch in einer Steuerdatei.

Nehmen wir mal die Steuerdatei. Dazu verwendest du die Komponente TMemIniFile aus der Unit IniFiles. Eine Formvariable dieses Typs in der private section deiner Form erlaubt dir den Zugriff zu verschiedenen Zeitpunkten und von verschiedenen Methoden aus. Im Ereignis OnCreate() deiner Form lädst du die Steuerdatei und im Ereignis OnDestroy() kannst du sie wieder speichern, falls es nötig ist.

Jedes MenuItem hat ein eindeutiges Merkmal - die Eigenschaft Command. Dieses Merkmal benutze ich in der angehängten Demo, ich speichere es und identifiziere damit das MenuItem beim Neustart des Programms, um seine Markierung zu setzen. Es sind nicht viele Zeilen Code. Mit der Online-Hilfe solltest du in der Lage sein jede einzelne Zeile nachzuvollziehen.

Grüße vom marabu

newuser01 12. Sep 2006 10:51

Re: Menü.Untermenü.Checked := true
 
Hallo marabu deine Idee ist auch nicht schlecht. Ich habe es aber bereits anders gelöst. Ich speicher die Sache in der Registry ab.

Delphi-Quellcode:
 

procedure TForm1.Untermenue1Click(Sender: TObject);
var
Regist: TRegistry;
begin

   try
   Regist := TRegistry.Create;
   Regist.Rootkey:=HKEY_CURRENT_USER;
   Regist.OpenKey('Software\ProgrammName',True);
   Regist.WriteString('Menue','0');
   Regist.Free;
 
   MainMenu1.Items[1].Items[0].Items[0].Checked := true;

            except
            //
   end;
end;

//--------------------------------------------------------------------------------------------


procedure TForm1.FormCreate(Sender: TObject);
var
Regist: TRegistry;
sMenueItem:String;
i,iMenueItem,iMenueAnzahl:integer;
begin

iMenueAnzahl := 5;

   try

   Regist := TRegistry.Create;
   Regist.Rootkey:=HKEY_CURRENT_USER;
   Regist.OpenKey('Software\ProgrammName',True);
   sMenueItem := Regist.ReadString('Menue');

   for i := 0 to iMenueAnzahl do
   begin
   if i = StrToInt(sMenueItem) then MainMenu1.Items[1].Items[0].Items[i].Checked := true;
   end;//for

   Regist.Free;

            except
            //
   end;
end;
und ein Danke für eure Hilfe !


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:04 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