Entwickler-Ecke

Sonstiges (Delphi) - Texteditor mehrere Dateien zur gleichen Zeit bearbeiten


CurdledMilk - Fr 27.05.05 18:17
Titel: Texteditor mehrere Dateien zur gleichen Zeit bearbeiten
Hallo ihr!

Also ich bin noch Anfänger in Delphi und soll für die Schule einen Texteditor schreiben. Mein erstes größeres Problem liegt jetzt darin, die Möglichkeit zu schaffen, mehrere Texdokumente zu öffnen. Ich habe schon gesucht aber nichts so richtig in diese Richtung gefunden. Hoffe ihr könnt mir schnell helfen. Ich wöllte es gern so machen, das man diese dann über eine Karteikarte (wie bei firefox wenn mehrere Seiten geöffnet sind) auswählen kann.

Hoffe ihr könnt mir helfen.


stifflersmom - Fr 27.05.05 18:19

Wie wäre es mit einer MDI Applikation?

In D7 über Datei/Neu/Weitere/Projekte


Moin


CurdledMilk - Fr 27.05.05 18:29

Hm da is ja dann schon alles vorgegeben. Das dürfen wir also nicht verwenden.
Gibt es auch noch weitere Möglichkeiten.


BenBE - Fr 27.05.05 18:39

Datei\Neu\Form

Dort dann ein Sub-Fenster mit Editor implementieren...

Danach nur noch im Hauptfenster Menü und ähnliches erstellen und dann Für jede neue Textdatei ein eigenes Subfenster erstellen (Dynamisch, zur Laufzeit).


CurdledMilk - Fr 27.05.05 18:51

:shock:

Danke erst mal aber da ich wie gesagt noch Anfänger bin versteh ich einiges (viel *g*) davon nicht:

Sub-Fenster mit Editor implementieren?
Dynamisch, zur Laufzeit?

Wie mach ich es, das sich eine neues Textfeld öffnet wenn der user auf datei>neu klickt
und klappt es dann, das die Funktionen (Schrifftgröße etc.) auch für die neuen fenster gelten.?


BenBE - Fr 27.05.05 21:44

Und zwar benötigst Du dafür eine TObjectList Dateien: TObjectList;, welches Du in deiner Main-Form deklarierst.

In TMainForm.Create initialisierst Du diese TObjectList dann mit Dateien := TObjectList.Create(true);

Klickt Der User dann auf Datei\Neu führst Du folgende beiden Zeilen aus:

Delphi-Quelltext
1:
2:
3:
4:
var DateiFenster: TDeinDateiEditorForm;

Datei := TDeinDateiEditorForm.Create(nil);
Dateien.Add(Datei);


Wölltest Du nun eine existierende Datei öffnen, so könntest Du dies realisieren, indem Du Datei.OpenFile(FileName); aufrufst (sofern diese Methode in deiner Formularklasse TDeinDateiEditorForm implementiert ist (empfehelnswert).

TDeinDateiEditorForm kümmert sich dann um alle weiteren angelegenheiten zum Behandeln der Dateien (öffnen\speichern einer Datei). Guck Dir dazu mal die Komponenten TMemo und TRichEdit an.

HTH.


CurdledMilk - Sa 28.05.05 11:00

Mhh ja.

was is diese Tobjektlist genauer is es ein objekt oder eine var wenn es ein objekt is wo is es dann in der Objektliste
wenn ich versuche es als var zu nehmen kommt das dabei raus

"[Fehler] Unit1.pas(19): Undefinierter Bezeichner: 'TObjectList'"
"[Fataler Fehler] Project1.dpr(5): Verwendete Unit 'Unit1.pas' kann nicht compiliert werden"


BenBE - Sa 28.05.05 11:31

Bitte benutze bei unbekannten Bezeichnern doch einfach die sich oben links auf deiner Tastatur befindliche F1-Taste, die Dir beim markieren des Bezeichners TObjectList im Quelltext sofort verraten hätte, dass Du die Unit Contnrs einbinden musst.


CurdledMilk - Sa 28.05.05 11:36

Ja das hab ich gelesen konnte damit aber nichts anfangen.
Geh ich da auf Datei>neu>unit oder mach ich das irgend wie anders


stifflersmom - Sa 28.05.05 12:10

Du nimmst die Unit "Contnrs" unter uses mit auf,
das war's.

Aber mal ohne Dir zu nahe treten zu wollen,
ist Dein Delphi (object pascal) denn umfangreich genug,
um Dein Problem auch wirklich Programmiertechnisch
erschlagen zu können?
Denn eine Unit einzubinden sollte zum Grundstock eines
Delphi-Programmierers gehören.

Moin


CurdledMilk - Sa 28.05.05 13:08

Is halt ne Hausarbeit bis nächsten Freitag. (Wir haben dafür die ganze Woche frei) Auch wenn ichs nich kann muss ichs also machen. :D Wir sollen uns delphi so zu sagen näher erarbeiten.
Ich zeig ma wie ichs jetzt Hab einfach nur so zum probieren in einem neuen Delphi Progr.

Delphi-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:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Contnrs, Menus  ;

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    Datei1: TMenuItem;
    Neu1: TMenuItem;
    procedure FormCreate(Sender: TObject);
    procedure Neu1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  Dateien: TObjectList;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
Dateien := TObjectList.Create(true);
end;

procedure TForm1.Neu1Click(Sender: TObject);
var DateiFenster: TForm1;
    Datei:Textfile;
begin
Datei := TForm1.Create(nil);
Dateien.Add(Datei);
end;

end.


Fehlermeldung sind diese:

[Fehler] Unit1.pas(38): Operator ist auf diesen Operandentyp nicht anwendbar
[Fehler] Unit1.pas(39): Inkompatible Typen: 'TObject' und 'Text'
[Fataler Fehler] Project2.dpr(5): Verwendete Unit 'Unit1.pas' kann nicht compiliert werden

Moderiert von user profile iconAXMD: Code- durch Delphi-Tags ersetzt.


BenBE - Sa 28.05.05 16:56

Siehe Beispiel-Abschnitt aus meinem Post [http://www.delphi-forum.de/viewtopic.php?p=256892#256892] ...
Damit erklären sich diese beiden Meldungen.

Dau benötigst dafür allerdings noch eine zweite Form, in der Du die Grunddinge zum bearbeiten der Datei einbaust.


CurdledMilk - So 29.05.05 15:21

Ich hab mich noch mal bisl drann versucht komm aber nicht wirklich weiter hab jetzt 2. Form(en) in Form1 Das Hauptprogramm (mit Datei>neu laden Speichern; Format>Text Formatieren Text Ausrichtung) und in Form2 Das MEMO wo der user drin schreiben soll. Wie muss ich dann jetzt den Quelltext schreiben.
Also was muss ich in den Stellen die du mir gegeben hast einfügen.

Danke noch mal für die bis jetzige Hilfe.


BenBE - So 29.05.05 21:03

Eins nur kurz vorweg: Wir sind hier kein Hausaufgabenforum! D.h. das hier jegliche Hilfe freiwillig ist und daher ich (und auch kein anderer) verpflichtet ist, Dir hier deine Hausaufgaben zu lösen.

Lese bitte meine vorigen Posts nocheinmal genau durch, da ich dort schon (wiederholt) gesagt habe, welche Funktion Du wo ergänzen musst und Poste im Anschluss daran mal Deinen bisherigen Source.


CurdledMilk - Mo 30.05.05 12:12

Nein das is schon klar. Ich bin halt nur etwas genervt weil ichs nich auf die Reihe bringe. Und ich hab mir den Quelltext von dir wirklich schon oft angeschaut und auch viel probiert aber es funktioniert irgend wie nicht. Ich komm noch nicht so richtig damit klar was ich für was einsetzen soll (TDeinDateiEditorForm nehme ich tform1 --> wo die ganzen Bearbeitungsbutton drin sind, für DateiFenster und Datei weiß ich noch nicht was da rein muss. Mein aktueller Quelltext sieht so aus:


Delphi-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:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    Datei1: TMenuItem;
    Neu1: TMenuItem;
    ffnen1: TMenuItem;
    Speichern1: TMenuItem;
    Speichernunter1: TMenuItem;
    Drucken1: TMenuItem;
    Schlieen1: TMenuItem;
    Programmbeenden1: TMenuItem;
    Bearbeiten1: TMenuItem;
    Rckgngig1: TMenuItem;
    Ausschneiden1: TMenuItem;
    Kopieren1: TMenuItem;
    Einfgen1: TMenuItem;
    AllesMarkieren1: TMenuItem;
    Lschen1: TMenuItem;
    Format1: TMenuItem;
    Schrifft1: TMenuItem;
    N3: TMenuItem;
    Hilfe1: TMenuItem;
    Information1: TMenuItem;
    FontDialog1: TFontDialog;
    SaveDialog1: TSaveDialog;
    OpenDialog1: TOpenDialog;
    PrintDialog1: TPrintDialog;
    ToolBar1: TToolBar;
    ToolButton1: TToolButton;
    ToolButton2: TToolButton;
    ToolButton3: TToolButton;
    ToolButton4: TToolButton;
    Ausrichtung1: TMenuItem;
    ToolButton5: TToolButton;
    ToolButton6: TToolButton;
    ToolButton7: TToolButton;
    ToolButton8: TToolButton;
    ToolButton9: TToolButton;
    ToolButton10: TToolButton;
    ToolButton11: TToolButton;
    ToolButton12: TToolButton;
    ToolButton13: TToolButton;
    ToolButton14: TToolButton;
    ToolButton15: TToolButton;
    ToolButton16: TToolButton;
    ToolButton17: TToolButton;
    ToolButton18: TToolButton;
    ToolButton19: TToolButton;
    ToolButton20: TToolButton;
    ToolButton21: TToolButton;
    ToolButton22: TToolButton;
    ToolButton23: TToolButton;
    ToolButton24: TToolButton;
    ToolButton25: TToolButton;
    ToolButton26: TToolButton;
    ToolButton27: TToolButton;
    ToolButton28: TToolButton;
    ToolButton29: TToolButton;
    ImageList1: TImageList;

    procedure FormCreate(Sender: TObject);
    procedure Neu1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  Dateien: TObjectList;
implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
Dateien := TObjectList.Create(true);
end;

procedure TForm1.Neu1Click(Sender: TObject);
var Form2: TForm1;
begin
Textfile := TForm1.Create(nil);
Dateien.Add(Datei);

end;

end.



Delphi-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:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm2 = class(TForm)
    Memo1: TMemo;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

end.


Ich hoffe du kannst mir weiter helfen.

Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt.


BenBE - Mo 30.05.05 23:26

k, Unit1, Zeilen 92 und 95: TForm1 durch TForm2 ersetzen.

Außerdem in Zeile 96 einen Aufruf

Delphi-Quelltext
 
96:
{ ... }
Datei.Show;
ergänzen.

Danach sollte die Datei-->Neu-Funktion hinhauen.

Für das Öffnen und Speichern von Dateien fügst Du nach Zeile 15 folgende beiden Zeilen ein:

Unit2.pas
 
16:
17:
{ ... }
procedure LoadFileData(Filename:String);
procedure SaveFileData(Filename:String);


Danach kurz Strg+Umschalt+C drücken (noch in der Klassendeklaration) und es sollte auch gleich die Implementation dieser Routinen erscheinen. Das Laden und Speichern selber, traue ich Dir mal zu ...


CurdledMilk - Di 31.05.05 11:56

Hallo
supie vielen dank es geht.

Ich mach noch mal nen neuen post für die Speicherfrage auf. Ich kann zwar speichern aber der text wird dann nich mit gespeichert. Sondern nur ne lehre txt.datei