Autor Beitrag
Jagg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 635



BeitragVerfasst: Di 15.04.03 07:32 
Hallo !

Ich habe einen MenüPunkt "Extras",dadrunter ist das UnterMenü "Letzte Dateien",bei diesem MenüPunkt zeigt dann ein Pfeil nach rechts und dadrunter sind dann die ganzen Dateien aufgelistet,die zuletzt geöffnet worden sind !
Ich habe es schon mal geschafft,das er den 1.Eintrag(Datei) öffnet,aber wie mache ich das denn beim 2,3,4 usw.
Beim 1. Eintrag geht das so :

ausblenden Quelltext
1:
2:
3:
LastOpen := LetzteDateien1.Items[0].Caption;
Delete(LastOpen,1,1);
Table1.TableName := LastOpen;


Kann mir jemand helfen ???

Jagg !
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 15.04.03 10:41 
Jagg hat folgendes geschrieben:
Kann mir jemand helfen ???

Weiß ich noch nicht. :?

Zitat:
Ich habe einen MenüPunkt "Extras",dadrunter ist das UnterMenü "Letzte Dateien",bei diesem MenüPunkt zeigt dann ein Pfeil nach rechts und dadrunter sind dann die ganzen Dateien aufgelistet,die zuletzt geöffnet worden sind !

Wird dieses Menü dynamisch zur Laufzeit des Programms erzeugt? Ich tippe mal auf: Ja.

Zitat:
Ich habe es schon mal geschafft,das er den 1.Eintrag(Datei) öffnet,aber wie mache ich das denn beim 2,3,4 usw.

Dynamisch erzeugten Menüeinträgen kannst du einen eigene OnClick-Behandlung zuweisen. Dafür gibt es, IMHO, auch ein Beispiel in der Hilfe. Falls nicht, bzw. falls du damit Probleme hast, krame ich mal eins raus. Muss ich aber erst suchen.

Als Hinweis: diese eigene OnClick-Behandlung liefert dir als Sender ja das Menüitem. Darüber kommst du an die Caption ran, die (wie ich vermute) mit dem Dateinamen identisch ist. Und wenn du den Dateinamen hast, kannst du die Datei auch laden/ausführen/usw.
Jagg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 635



BeitragVerfasst: Di 15.04.03 12:06 
da ist was dran !
aber mit IHMO find nicht !
also brauch ich doch dein beispiel ;)

Jagg !
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 15.04.03 12:23 
Ein kurzes und relativ unkompliziertes Beispiel:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
type
  TForm1 = class(TForm)
    { ... }
  private
    OnDynMenuClick(Sender: TObject);
    BuildMenu;
  end;

procedure TForm1.OnDynMenuClick(Sender: TObject);
var
  szFilename : string;
begin
  szFilename := (Sender as TMenuItem).Caption;
  ShowMessage(szFileName);
end;

procedure TForm1.BuildMenu;
var
  mii : TMenuItem
begin
  mii := TMenuItem.Create(LetzteDateien1);

  mii.Caption := 'IrgendEineDatei.file';
  mii.OnClick := OnDynMenuClick;

  LetzteDateien1.Add(mii);
end;

Ich bin davon ausgegangen, dass "LetzteDateien1" der Name des Menüeintrags ist, der für die Anzeige der zuletzt geöffneten Dateien verantwortlich ist.
Das Beispiel zeigt dir, wie man dynamisch Menüeinträge anhängt (Prozedur BuildMenu), und wie man die Caption (in deinem Fall mit dem Dateinamen identisch) anzeigen lassen kann (OnDynMenuClick). Musst mal schauen, ob und was du davon gebrauchen kannst.

IMHO bedeutet übrigens (übersetzt) "meiner bescheidenen Meinung nach" und hatte nichts mit einem Suchbegriff zu tun. :)
Jagg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 635



BeitragVerfasst: Mi 16.04.03 14:18 
yo das geht jetzt danke,aber habe jetzt mal ne andere Frage !

Ich kann alles jetzt öffnen,aber wenn ich jetzt sortieren will,sagt er immer noch fehler !
Jetzt zu der Situation,(es ist ein DrpdownMenu),mit den Feld z.b . Name)wenn ich Sortieren will,soll er die"
(Sender as TMenuItem).Caption" aus dem Dropdownmenu herausnehemen, die ich geöffnet habe !

Versteht ich mich ???

Jagg !
GSE
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 740

Win 2k, Win XP Pro
D5 Prof, D6 Ent, D2k5 PE
BeitragVerfasst: Mi 16.04.03 14:30 
Jagg hat folgendes geschrieben:
Versteht ich mich ???

Weiß nicht, ob du verstehst was du schreibst? :)

Wir wär´s mit:(Sender as TMenuItem).visible := false zum Ausblenden oder(Sender as TMenuItem).free?
Ausblenden hat natürlich den Vorteil, dass du´s später wieder anzeigen kannst ohne das Menu neu aufzubauen. Sieh mal!

mfg
GSE

_________________
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs
and the universe trying to produce bigger and better idiots. So far, the universe is winning. (Richard Cook)
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 16.04.03 15:23 
Jagg hat folgendes geschrieben:
Versteht ich mich ???

Ich versuch´s mal -

Dein Menü (im Sinne eines Hauptmenüs o.ä.) zeigt die zuletzt geöffneten Dateien an. Außerdem hast du aber irgendwo noch eine Dropdown-Box (ComboBox), die die selben Namen enthält. Du möchtest jetzt aus dem Menü der Combobox alle Dateinamen entfernen, die du geöffnet hast?

Wenn das stimmt, dann mache dich in der Hilfe zur Combobox mal schlau über
ausblenden Quelltext
1:
Items.IndexOf					

und
ausblenden Quelltext
1:
Items.Delete					
Jagg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 635



BeitragVerfasst: Mi 16.04.03 20:04 
Ok,Leute,ich erkläre euch nochmal die Situation !
Also...

Unter dem MenüPunkt "Datei" ist der UnterMenüPunkt "Letzte Dateien" und es ist mit einem Pfeil nach rechts versehen,dadrunter ist dann ein DropDownMenü aufgelistet mit all den Dateien,die zuletzt geöffnet worden sind....und jetzt.....gibt es noch den MenüPunkt "Extras" und der UnterMenüpunkt "Daten sortieren",welches auch mit einem Pfeil nach rechts markiert ist und bei diesem DropDownMenu sind all die Felder aufgelistet,wonach man sortieren kann !

Ich öffne jetzt eine Datei von DropDownMenü aus und will danach sortieren,aber er sagt dann die Fehlermeldung "Index bereits vorhanden"
d.h. ich muss den Index vorher löschen,das ist auch kein Problem !

Jetzt zum ProblemFall...Ich habe eigene Prozedur für das Sortieren und dadrin steht eine Zeile :
ausblenden Quelltext
1:
S := (Sender as TMenuItem).Caption					

d.h. immer wenn ich sortiere,ruft er die Prozedur (Ich nenne Sie mal "Sortieren") auf und liest die angeklickten Eintrag aus dem DropDownMenü aus (z.b. wenn der Eintrag "Name" ist,ist S = Name)
,aber wenn ich jetzt von vornerein eine zuletzt geöffnete Datei (z.b. C:\Hallo.dbf) öffne und dann sortiere ist der Index (in diesem Fall "Hallo.MDX") schon vorhanden,weil ich ihn ja nicht gelöscht habe,d.h. drum wieder,ich muss beim "Sortieren" auf das DropDownMenü,wo die letzte Dateien stehen,zugreifen können,aber ich weiss nicht wie,wenn ich
ausblenden Quelltext
1:
S := (Sender as TMenuItem).Caption					

hinschreibe,bei der Zeile wo er zugreifen soll auf das DropDownMenü der "letzten Dateien",ist S = Name und NICHT S = Hallo.dbf,weil das alles passiert in der Prozedur "Sortieren" !

Das heisst ja im Klartext,ich suche eine Möglichkeit,wo er auf ein anderes DropDownMenü zugreift und NICHT von ein DropDownMenü zugreift,das schon von vornerein festgeliegt ist !

Ich hoffe,ihr versteht micht jetzt !

Jagg !
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 16.04.03 20:47 
Ja. Aber dann ist Drop-down der falsche Begriff. Drop-down bezeichnet z.B. die Items einer Combobox. Was du meinst, ist technisch gesehen ein normales Popup-Menü. Und bevor jetzt irgendwer erzählt: "Du redest Unsinn" - dann erstellt bitte eine Ressourcendatei
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
IDR_MENU1 MENU DISCARDABLE 
BEGIN
    POPUP "bla"
    BEGIN
        POPUP "bla"
        BEGIN
            MENUITEM "bla",                         ID_BLA_BLA_BLA
        END
    END
END

Meinetwegen kann man es auch als Untermenü bezeichnen.
Jagg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 635



BeitragVerfasst: Do 17.04.03 07:27 
Hier ist der Code :
ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
procedure TForm1.Anrede1Click(Sender: TObject);
 var i,x : Integer;
       s,LastOpen,ExLastOpen : String;
begin
  s := (Sender as TMenuItem).Caption;
  i := 1;
  Repeat
    if s[i] = '&' then
      delete (s,i,1);
    inc (i);
  until i > length(s);
  if (Sender as TMenuItem).Caption = '&Anrede' then
  begin
    for x := 0 to Table1.FieldCount - 1 do
    begin
      if (Table1.Fields[x].FieldName = 'NAME0') then
        S := 'Name0';
      if (Table1.Fields[x].FieldName = 'ANREDE') then
        S := 'Anrede';
    end;
  end;
  Table1.Close;
  Table1.Active := false;
  LastOpen := (Sender as TMenuItem).Caption; <---- //Hier soll er den   angeklickten Text aus dem PopUpMenu,wo die "letzten Dateien" stehen auslesen,aber er liest vom PopUpMenu "Sortieren" aus// 
  ExLastOpen := ChangeFileExt(LastOpen,'.MDX');
  if OpenDialog1.FileName <> '' then
    DBDeleteIndex(OpenDialog1.FileName)
  else
  begin
    if FileExists (ExLastOpen)  then
      DBDeleteIndex(LastOpen);
  end;
  if SaveDialog1.FileName <> '' then
    DBDeleteIndex (SaveDialog1.FileName);
  Table1.Exclusive := true;
  if Form6.edbankname.text <> '' then
    DBDeleteIndex (ExtractFilePath(Form6.edbankname.text)+Form6.edbankname.text+'.dbf');
  Table1.AddIndex ('Index',S,[]);
  Table1.Exclusive := false;
 (Sender as TMenuItem).Checked := True;
  Table1.Exclusive := False;
  for I := 0 to Table1.IndexDefs.Count - 1 do
  if Table1.IndexDefs.Items[I].Fields = S then
    Table1.IndexName := Table1.IndexDefs.Items[I].Name;
  Table1.Active := True;
  Table1.IndexName := 'Index';
  if DBGrid1.Columns[0].FieldName = 'NAME0' then
    DBGrid1.Columns[0].Title.Caption := 'ANREDE';
  Table1.First;
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 17.04.03 08:11 
Du hast gestern geschrieben:
Zitat:
Unter dem MenüPunkt "Datei" ist der UnterMenüPunkt "Letzte Dateien" und es ist mit einem Pfeil nach rechts versehen,dadrunter ist dann ein DropDownMenü aufgelistet mit all den Dateien,die zuletzt geöffnet worden sind....

Und dazu gab ich dir am Dienstag die Empfehlung, dass du diesen Menüeinträgen eine eigene OnClick-Prozedur zukommen lässt, die dann die jeweiligen Dateien öffnet oder anzeigt. Wie das gehen kann, habe ich ja auch mit einem kurzen Beispiel demonstriert.

Dann schreibst du weiter:
Zitat:
und jetzt.....gibt es noch den MenüPunkt "Extras" und der UnterMenüpunkt "Daten sortieren",welches auch mit einem Pfeil nach rechts markiert ist und bei diesem DropDownMenu sind all die Felder aufgelistet,wonach man sortieren kann !

Ja, und? Was hat das mit der OnClick-Behandlung der zuletzt geöffneten Dateien zu tun? Ändern sich die Begriffe der Sortierung denn auch ständig? Und selbst wenn die Sortier-Menüeinträge ebenfalls dynamisch erstellt werden, dann darfst du sie aber nicht in die OnClick-Prozedur schicken, die für die zuletzt geöffneten Dateien zuständig ist. Das kann ja nichts werden.

Der von dir gepostete Quellcode ist daher auch nur bedingt hilfreich, weil du nicht gezeigt hast, wann und wie (oft) du ihn anwendest (= zuweist).
Zitat:
ausblenden Quelltext
1:
2:
//Hier soll er den angeklickten Text aus dem PopUpMenu,wo die "letzten Dateien" stehen auslesen,
aber er liest vom PopUpMenu "Sortieren" aus//

Dafür wird es einen Grund geben, aber der liegt dann wohl außerhalb des gezeigten Codes.

< ---------------- >

Woher kommen eigentlich die Namen der zuletzt geöffneten Dateien? Irgendwie und irgendwo musst du die ja gespeichert haben, damit du sie in das Menü aufnehmen kannst.
(Bitte keinen Code posten! Nur sagen: die stehen in einer INI, in der Registry, ...)
Jagg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 635



BeitragVerfasst: Do 17.04.03 08:23 
das habe ich alles in einer TStringlist,aber was hat das damt zu tun ???

Jagg !
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 17.04.03 11:57 
Gar nichts. Ich wollt´s nur mal so wissen. Um jetzt dein Problem zu lösen: benutze eine globale Stringvariable, bspw.
ausblenden Quelltext
1:
2:
var
  szLastOpenFile : string = '';

Wenn du jetzt im Menü eine der zuletzt geöffneten Dateien auswählst, wird dabei eine OnClick-Behandlung ausgelöst, in der du die Datei wahrscheinlich aufrufst und ihren Inhalt anzeigst?! In der selben Prozedur weist du der o.g. globalen Stringvariablen den Namen des Menüeintrags (und damit den Dateinamen) zu.
ausblenden Quelltext
1:
szLastOpenFile := (Sender as TMenuItem).Caption;					


In der Sortierfunktion hast du dann Zugriff auf die Variable. Und da sie den Namen der zuvor ausgewählten Datei enthält, dürfte es nun keine Probleme mehr geben.
Jagg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 635



BeitragVerfasst: Do 17.04.03 13:18 
Yo ich hab's dankeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee