Autor Beitrag
c4fan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Di 24.08.04 15:59 
Ich möchte eine Datei in einem Rich Edit öffnen welches während der Laufzeit erstellt wird und sich über Page Control auf einem Tabsheet befindet, welches auch während der Laufzeit erstellt wird. Mein Problem dabei ist, dass ich z.B. beim ersten Tabsgeet den dateinamen in einem array speichern möchte und auch wenn ich auf zweite Tabsheet klicke dessen Name speichern kann. Diesen aktuellen Dateinamen vom Öffnen lasse ich mir auf einem Label zur Kontrolle anzeigen aber so wie ich es möchte, dass mir beim wechseln der Tabsheets die aktuellen Dateinamen angezeigt werden.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var
  Form1: TForm1;
  Memo, memos : TRichEdit;
  index, i, a : integer;
  x : array [1..2of integer;
  s, o : string;
  dat : array [0..40of string;

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.FormCreate(Sender: TObject);
begin
form1.TabSheet1.Caption:=' 0 ';
index:= (PageControl1.ActivePageIndex);
memos:= TRichEdit(findcomponent('RichEdit'+inttostr(index)));
end;

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.ffnen1Click(Sender: TObject);
begin
OpenDialog1.Filename:='';
if OpenDialog1.Execute then
Memos.Lines.LoadFromFile(OpenDialog1.Filename); 
o:=OpenDialog1.Filename;
dat[index]:=o;
form3.show;
form3.label1.Caption:= dat[index];
end;


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.PageControl1Changing(Sender: TObject;
  var AllowChange: Boolean);
begin
dat[index+1]:= o;
form3.label1.Caption:= dat[index];
end;


Wie kann ich das Problem lösen? :(

Moderiert von user profile iconTino: Code- durch Delphi-Tags ersetzt.
Maa83
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 160

Win XP Pro
D6 Ent
BeitragVerfasst: Mi 25.08.04 16:25 
Wenn ich das richtig verstanden habe möchtest du folgendes machen:

Mehrere Dokumente öffnen die sich jeweils auf eigenen Tabsheets befinden.
Diese Dokumente möchtest du dann speichern können.

Da sich dies alles auf einen PageControl abspielt sollte das nicht allzu schwer sein.

Du hast ein dynamisches Array für den Pfad. Dieses kannst du je nachdem auf welchem Tabsheet du stehst anhand der Eigenschaft TPageControl.ActivePageIndex
auslesen.

Damit du weisst welches RichEdit du speichern musst kannst du diesem z.B. die gleiche Endzahl wie dem Tabsheet geben und die gleiche Endzahl wie dem Index des dynamischen Arrays. Also hat z.B. das erste Dokument den Tabsheet-Namen tsDok_0
das TRichedit redtDok_0 usw.

somit kannst du anhand des Namens das ganze ermitteln und abspeichern.

hoffe man kann mich verstehen :wink:
c4fan Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Mi 25.08.04 22:50 
schön das du mein vorhaben verstanden hast. Genau so sollte es eigentlich laut Quellcode funktionieren. Aber irgendetwas scheint mit dem array nicht zu stimmen aber ich komm nich drauf. Deswegen dachte ich vielleicht du findest den Fehler. :D
Maa83
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 160

Win XP Pro
D6 Ent
BeitragVerfasst: Do 26.08.04 08:56 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.PageControl1Changing(Sender: TObject;  
  var AllowChange: Boolean);  
begin  
dat[index+1]:= o;  
form3.label1.Caption:= dat[index];  
end;


Wieso änderst du das Array dat bei wechsel der Tabsheets?
Das Array besteht doch schon...

Reichen würde da:

ausblenden Delphi-Quelltext
1:
form3.label1.Caption:= dat[PageControl1.ActivePageIndex];					


kann sein das da noch ein +1 oder ein -1 hinter "ActivePageIndex" stehen muss.

nur was ich nicht sehe ist das du irgendetwas zur Laufzeit erzeugst???

Oder ist das nur ein Beispielcode?
c4fan Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Do 26.08.04 10:53 
Also die Tabsheets und Richedits erzeuge ich in einer buttonclick prozedure. Das mit dem +1-1 war auch nur zu testzwecken. Mein vorhaben ist, dass ich den jeweiligen Dateinamen zur Datei welche im Edit geöffnet wird in einem array gespeichertwird. So das Tabsheet zum Dateinamen passt verstehst du was ich meine?
Maa83
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 160

Win XP Pro
D6 Ent
BeitragVerfasst: Do 26.08.04 13:29 
Also nochmal.

Der ganze Quellcode der jetzt kommt ist nicht getestet. Musst du also noch anpassen und ggf. korrigieren.

Du brauchst 4 Variablen.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
var tabDok : Array[0..10of TTabsheet;
    redtDok : Array[0..10of TRichEdit;
    Dateipfad : Array[0..10of String;
    AktivesDokument : Integer;



ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.FormCreate(...)
begin
    AktivesDokument := 0;
end;


Beim klicke auf den Button Dokument Erzeugen passiert folgendes:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
procedure TForm1.CreateDocument;
var OpenDLG : TOpenDialog;
    datpfad : String;
begin
    OpenDLG := TOpenDialog.Create(Self);   
    if OpenDLG.Execute then begin
        datpfad := OpenDLG.FileName;
    end;
    if datpfad = '' then exit;

    //Tabsheet erzeugen
    tabDok[AktivesDokument] := TTabSheet.Create(PageControl1);
    tabDok[AktivesDokument].Parent := PageControl1;
    //RichEdit erzeugen
    redtDok[AktivesDokument] := TRichEdit.Create(tabDok[AktivesDokument]);
    redtDok[AktivesDokument].Parent := tabDok[AktivesDokument];

    Dateipfad[AktivesDokument] := datpfad;
    inc(AktivesDokument)
end;


Beim speichern passiert dann folgendes:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.SaveDocument;
var datpfad : String;
begin
    datpfad := Dateipfad[PageControl1.ActivePageIndex];
    //Hier der Code zum Speichern (weiss den Befehl grad nicht, deswegen muss die untere Zeile angepasst werden!!!)
    redtDok[PageControl1.ActivePageIndex].Save(datpfad);
end;


Das wars.
Zur Einfachheit habe ich in diesem Codebeispiel statische Array genommen. Für so einen Fall sollte man eigentlich mit dynamischen Arrays arbeiten.

Falls du dazu auch noch Hilfe brauchst meld dich einfach noch mal. :)
c4fan Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Fr 27.08.04 11:13 
SO wie du das sagst habe ich das schon fast nur beim erstellen sieht die prozedure ein wenig anders aus:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure TForm1.Button3Click(Sender: TObject);
var TabSheet:TTabSheet;
begin
  x[1]:= x[1]+1;
  TabSheet:=TTabSheet.Create(Form1.PageControl1);
  TabSheet.TabVisible:=True;
  TabSheet.PageControl:=Form1.PageControl1;
  TabSheet.Caption:= InttoStr((PageControl1.PageCount)-1);
  Memo:=TRichedit.Create(self);
  Memo.Parent:=TabSheet;
  Memo.Name:= ('RichEdit'+inttostr(x[1]));
  Memo.Lines.Clear;
  Memo.Width:=305;
  Memo.Height:= 361;
  Memo.Top:= 8;
  Memo.Left:= 8;
  Memo.PlainText:= true;
end;
Maa83
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 160

Win XP Pro
D6 Ent
BeitragVerfasst: Fr 27.08.04 11:31 
dann vergleich halt mal die Teile und schau was verkehrt ist.

was soll dieses

x[1]:= x[1]+1;

???
c4fan Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Fr 27.08.04 12:32 
Da lege ich die Namen für RichEdit fest. Immer +1. Das heisst wenn ich ein neues feld haben möchte wird immer ein neues richedit erstellt. 1,2...
Maa83
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 160

Win XP Pro
D6 Ent
BeitragVerfasst: Fr 27.08.04 12:43 
du überschreibts immer die Varibale Memo und die Variable Tabsheet.

mach es so wie ich es oben geschrieben habe dann funktioniert das ganze!
c4fan Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Fr 27.08.04 17:30 
Also so wie du es geschrieben hast, vermischt mit meinem Prog funktioniert es. Vielen Dank für Deine Bemühungen.