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



BeitragVerfasst: Fr 04.04.03 09:55 
Hallo Leute !

Es gibt viele SchreibProgramme wie Microsoft Word,wo rechts oder links neben dem "Öffen-Feld" eine kleiner Pfeil nach unten zu sehen ist !
Wenn man darauf klickt,dann kommt eine Liste mit den Dateien die vorher oder zuletzt geöffnet worden sind !

Wie mache ich das unter Delphi ???
Wie heisst den die Komponente dafür ???

Jagg !
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Fr 04.04.03 10:16 
Hallo

erstell dir ein Popupmenu, wo du deine Dateien einträgst (kannst die einträge ja auch zur Laufzeit hinzufügen)

erstell in deiner Toolbar einen neuen Schalter mit style tbsDropDown.
unter Dropdownmenu gibst du das Popupmenu an.

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
Jagg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 635



BeitragVerfasst: Fr 04.04.03 10:33 
Danke !
Jagg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 635



BeitragVerfasst: Fr 04.04.03 11:48 
ich will die einträge des popupmenu zur laufzeit erstellen !
ich habe so :
ausblenden Quelltext
1:
Popupmenu1.items.caption := Opendialog1.Filename;					


Hier bei soll er immer den zuletzt "opendialog1.filename" reinschreiben,aber er machts nichts warum ???

Jagg !
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Fr 04.04.03 12:07 
ausblenden Quelltext
1:
Popupmenu1.items[nummer].caption := Opendialog1.Filename					

nummer muß aber als Menuitem im Popupmenu existieren.
Wenn du nur den Filename ohne Pfad hinzufügst hats aber keinen Sinn.

Bespiele, wie du ein menu zur Laufzeit erstellst, findest du bestimmt auch hier im Forum. ansonsten ist eins in der OH unter menuitem.add. Du mußt dann nur noch das click-ereignis zuweisen.

Deine Popupmenueinträge mußt du noch verwalten (wieviel Einträge sollen maximal rein, was passiert mit doppelten einträgen und und).

Eina andere Variante wäre, den Pfad+Dateiname in einer Liste (z.B. Stringliste), du willst die Einträge ja bestimmt auch irgendwo für den nächsten Programmstart speichern.
Das Popupmenu baust du dann z.B. nur mit den Dateinamen auf und als Tag setzt du den entsprechenden Index in der Liste. dadurch gestaltet sich das Onclick-ereignis fürs Item einfacher.


Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 04.04.03 12:33 
ausblenden Quelltext
1:
OpenDialog1.Filename;					

Liefert den kompletten Pfad inklusive Pfad und Dateiname. :!:
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Fr 04.04.03 12:39 
Luckie hat folgendes geschrieben:
ausblenden Quelltext
1:
OpenDialog1.Filename;					

Liefert den kompletten Pfad inklusive Pfad und Dateiname. :!:


immer diese Kleinigkeiten :oops: . hast natürlich Recht. :)

Jetzt fällt mir wieder ein, was ich noch schreiben wollte: es ist nicht unbedingt sinnvoll, den kompletten Pfad ins Popupmenu zu übernehmen, da dieser u.U. recht lang und unübersichtliche werden kann.

Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 04.04.03 12:44 
Delphi packt auch den kompletten Pfad in das Menü. Und wenn man mehrere Dateien mit gleichen Namen hat, hilft das nur.
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Fr 04.04.03 12:51 
Luckie hat folgendes geschrieben:
Delphi packt auch den kompletten Pfad in das Menü. Und wenn man mehrere Dateien mit gleichen Namen hat, hilft das nur.


Stimmt auch wieder. aber grad bei Delphi macht der komplette Pfad für mich keinen großen Sinn, da ich dort nix quer über die Festplatte verteile.
Der erste Teil des Pfades ist immer gleich....

Word machts aber wieder anders, kürzt den Dateinamen, wenn er zu lang ist (C: /.../blabla), find ich am besten.

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 04.04.03 12:53 
Gerade da macht es Sinn. Was meinst du wie viele Dateien ich mit den Namen Projekt1.dpr auf der Platte habe. :roll:
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Fr 04.04.03 12:58 
Luckie hat folgendes geschrieben:
Gerade da macht es Sinn. Was meinst du wie viele Dateien ich mit den Namen Projekt1.dpr auf der Platte habe. :roll:

ok, ist halt Ansichtssache. dem einen gefällts so dem anderen so :)

möglich wäre aber auch
statt
d:\anwendungen\Borland\Delphi6\Projects\Projekt1\Projekt1.dpr
d:\anwendungen\Borland\Delphi6\Projects\Projekt2\Projekt2.dpr

d:\...\Projekt1\Projekt1.dpr
d:\...\Projekt2\Projekt2.dpr

edit: wenn du n Menu nimmst, ist denke ich mal die 2 . Variante besser, sonst hat man schnell ne riesen "Menufläche", beim Popup ist es weniger tragisch

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
Jagg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 635



BeitragVerfasst: Mo 07.04.03 19:37 
ich bekomme das trotzdem nicht hin ich weiss nicht was ich machen soll
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Di 08.04.03 07:51 
ok, ein Vorschlag:
habs aber nicht weiter getestet. erstell die Toolbar entprechend wie ich oben geschrieben habe. auf irgendwelche fehlerabfragen habe ich verzichtet.
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:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
unit Unit19;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ComCtrls, ToolWin, Menus;

type
  TForm1 = class(TForm)
    ToolBar1: TToolBar;
    ToolButton_oeffnen: TToolButton;
    PopupMenu_LastFiles: TPopupMenu;
    OpenDialog1: TOpenDialog;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure ToolButton_oeffnenClick(Sender: TObject);

  private
    { Private-Deklarationen }
    SL_LastFiles:Tstringlist;
    Procedure OeffneMich(s:string);
    Procedure PopupmenuAufbauen;
    Procedure PopupNeuerEintrag(s:string);
    procedure Popup_LastfilesClick(Sender: TObject);
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
  SL_LastFiles := TStringList.create;
  if FileExists(ExtractFileDir(Application.ExeName)+'\Lastfiles') then
    SL_LastFiles.LoadFromFile(ExtractFileDir(Application.ExeName)+'\Lastfiles');
  PopupmenuAufbauen;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  SL_LastFiles.SavetoFile(ExtractFileDir(Application.ExeName)+'\Lastfiles');
  SL_LastFiles.free;
end;

Procedure TForm1.PopupNeuerEintrag(s:string);
begin
  //prüfen, ob der Eintrag schon drin ist
  if SL_LastFiles.IndexOf(s)<>-1 then
    begin
      //diesen Eintrag an erste stelle schieben
      SL_LastFiles.Move(SL_LastFiles.IndexOf(s),0);
    end
   else
    begin
      //sonst an erster Stelle einfügen
      SL_LastFiles.insert(0,s);
    end;
  //maximal 5 Einträge, rest löschen
  while SL_LastFiles.Count >5 do SL_LastFiles.delete(SL_LastFiles.count-1);
  //menu neu aufbauen
  PopupmenuAufbauen;
end;

Procedure TForm1.PopupmenuAufbauen;
//Popup aufbauen, siehe Menuitems.add aus der OH
Var NewItem: TMenuItem;
    I : integer;
begin
  //der einfachheithalber wird das Menu immer gelöscht un neu erstellt
  //menu löschen
  PopupMenu_LastFiles.items.clear;
  //jeden Eintrag der Stringlist eintragen
  for  I := 0 to SL_LastFiles.Count-1 do
    begin
      NewItem := TMenuItem.Create(Self);
      NewItem.Caption := inttostr(i+1)+': '+SL_LastFiles.Strings[i];
      NewItem.tag     := i;  //den index als tag hinterlegen
      NewItem.OnClick := Popup_LastfilesClick;
      PopupMenu_LastFiles.items.Add(NewItem);
    end;
end;

Procedure TForm1.OeffneMich(s:string);
begin
  ShowMessage(s);
end;

procedure TForm1.Popup_LastfilesClick(Sender: TObject);
Var tag:integer;
begin
  //ein Popupeintrag wird ausgewählt und entsprechenden eintrag aus Stringlist holen
  tag := TComponent(sender).tag;
  OeffneMich(SL_LastFiles.Strings[tag]);
end;

procedure TForm1.ToolButton_oeffnenClick(Sender: TObject);
begin
  if OpenDialog1.Execute then
    begin
      //eintrag zum Popup hinzufügen
      PopupNeuerEintrag(OpenDialog1.filename);
      //und Datei "öffnen"
      OeffneMich(OpenDialog1.filename);
    end;
end;

end.


Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
Jagg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 635



BeitragVerfasst: Di 08.04.03 15:09 
Wie geht das den eingentlich wenn ich es nicht mit einem PopupMenu machen will,sondern das die letzten geöffneten Dateien in dem MenüPunkt "Datei" angezeigt werden soll ? (sowas gibt es auch in WORD)
vllt mit :
ausblenden Quelltext
1:
Datei1.Items[0].add ???					

Ich habe es mal versucht,es startet aber nicht,er sagt immer Fehlermeldung das es eine "überladene Version von ADD nicht gibt"

Kann mir jemand helfen ???

Jagg !
Luncustaf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 324

Win 2k
D7 Ent.
BeitragVerfasst: Di 08.04.03 15:17 
ja du musst wie im anderen thread schon beschrieben eine Variable vom typ TmenuItem erzeugen diese dann mit dem Filename belegen

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
var NewItem : TMenuItem;
begin
NewItem := TMenuItem.Create(self); //erzeugen
NewItem.Caption := OpenDialog1.Filename; //FileName der Caption zuweisen
Datei1.Items[0].Add(NewItem); //FileName in das Menü eintragen
NewItem.Free;


wenn dann jemand draufklickt dann kannst du machen

ausblenden Quelltext
1:
Datei1.items[0][0].Onklick := oldoeffnen(Datei1.items[0][0].Caption); //prozedur					


procedure kann dann so aussehen

ausblenden Quelltext
1:
2:
3:
4:
procedure Toeffnen.oldoeffnen(dateiname : string);
begin
  memo1.LoadFromFile(dateiname);
end;


alles ungetestet und nur hingetippert also können auch fehler drinnen sein

gr€€tz