| Autor |
Beitrag |
Jagg
      
Beiträge: 635
|
Verfasst: 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
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: 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 
      
Beiträge: 635
|
Verfasst: Fr 04.04.03 10:33
|
|
Jagg 
      
Beiträge: 635
|
Verfasst: Fr 04.04.03 11:48
ich will die einträge des popupmenu zur laufzeit erstellen !
ich habe so :
Quelltext 1:
| Popupmenu1.items.caption := Opendialog1.Filename; |
Hier bei soll er immer den zuletzt "opendialog1.filename" reinschreiben,aber er machts nichts warum ???
Jagg !
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Fr 04.04.03 12:07
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
|
Verfasst: Fr 04.04.03 12:33
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Fr 04.04.03 12:39
| Luckie hat folgendes geschrieben: | Quelltext
Liefert den kompletten Pfad inklusive Pfad und Dateiname.  |
immer diese Kleinigkeiten  . 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
|
Verfasst: 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
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: 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
|
Verfasst: 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. 
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: 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.  |
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 
      
Beiträge: 635
|
Verfasst: Mo 07.04.03 19:37
ich bekomme das trotzdem nicht hin ich weiss nicht was ich machen soll
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: 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.
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 
      
Beiträge: 635
|
Verfasst: 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 :
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
      
Beiträge: 324
Win 2k
D7 Ent.
|
Verfasst: 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
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
Quelltext 1:
| Datei1.items[0][0].Onklick := oldoeffnen(Datei1.items[0][0].Caption); //prozedur |
procedure kann dann so aussehen
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
|
|