Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Richedit, den Anfangstext löschen?


wurstuk - Sa 11.10.08 13:35
Titel: Richedit, den Anfangstext löschen?
Hi

ähm ich wollte gerade mal versuchen ein Programm zu schreiben was so ähnlich ist wie der
Texteditor von Windows bloß viel einfacher^^
und da hab ich mir gedacht das ich für das Feld wo mann was rein schreibt Richedit
nehmen könnte aber i-wie finde ich im Objektinspektor nichts wo mit mann den Anfangstext ändern kann...
also bei Edit steht da dann ja immer Edit1 und bei einem Label Label1 und bei Richedit
dann halt richedit1...

könnte mir i-jemand sagen wie ich das weg bekomme?

edit: kann mann vllt auch i-wie eine Scrollbar ein bauen das wenn mann mehr als das Fenster groß ist schreibt
mann einfach nach oben scrollen kann und nicht mit den Pfeiltasten jede reihe abklappern muss?


Moderiert von user profile iconGausi: Topic aus Sonstiges (Delphi) verschoben am Sa 11.10.2008 um 14:41


DiamondDog - Sa 11.10.08 13:40


Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.FormCreate(Sender: TObject);
begin
Richedit1.Text:='';
end;
So würde ich das machen.
Weiß aber nicht ob das die Richtige Lösung dafür ist.

Mfg Dog


wurstuk - Sa 11.10.08 13:42

cool Danke es klappt :D


DiamondDog - Sa 11.10.08 13:45

Nix zu Danken, aber wie gesagt weiß nicht ob das die richtige Lösung dafür ist.
Aber so lange es klappt sollte es ja ok sein ;)


wurstuk - Sa 11.10.08 14:01

Hmmm soweit bin ich bis jezzt, aber ich hab da noch ein Problem immer wenn ich eine Datei öffne wird
nur die erste Zeile geladen der Rest bleibt weg... ich glaube es liegt an nr, aber ich weiß nicht was ich
ihr zuordnen soll?



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

interface

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

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    OpenDialog1: TOpenDialog;
    PrintDialog1: TPrintDialog;
    SaveDialog1: TSaveDialog;
    RichEdit1: TRichEdit;
    Datei1: TMenuItem;
    ffnen1: TMenuItem;
    Speichern1: TMenuItem;
    Drucken1: TMenuItem;
    Schlieen1: TMenuItem;
    procedure FormCreate(Sender: TObject);
    procedure ffnen1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var nr: integer;
   diagnose: tstringlist;
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
diagnose := tstringlist.Create;
richedit1.Text := '';
end;

procedure TForm1.ffnen1Click(Sender: TObject);
begin
opendialog1.Execute;
diagnose.loadfromfile (opendialog1.filename);
richedit1.Text := diagnose.Strings[nr]//ich glaube da rann liegt es 
end

end.


Delete - Sa 11.10.08 14:09


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

interface

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

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    OpenDialog1: TOpenDialog;
    PrintDialog1: TPrintDialog;
    SaveDialog1: TSaveDialog;
    RichEdit1: TRichEdit;
    Datei1: TMenuItem;
    ffnen1: TMenuItem;
    Speichern1: TMenuItem;
    Drucken1: TMenuItem;
    Schlieen1: TMenuItem;
    procedure FormCreate(Sender: TObject);
    procedure ffnen1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var 
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  richedit1.Clear; //Text löschen
end;

procedure TForm1.ffnen1Click(Sender: TObject);
begin
  if opendialog1.Execute then //Execute ist eine Funktion
    richedit1.Lines.loadfromfile(opendialog1.filename); //Text der Datei ins Richedit laden
end

end.


Die globalen Variablen Diagnose und nr brauchst Du nicht (nr war eh nicht initialisiert).


LexXis - Sa 11.10.08 14:28
Titel: Re: Richedit, den Anfangstext löschen?
user profile iconwurstuk hat folgendes geschrieben Zum zitierten Posting springen:

...aber i-wie finde ich im Objektinspektor nichts wo mit mann den Anfangstext ändern kann...


Ich schon ;) Nennt sich "Lines"

mfg


wurstuk - Sa 11.10.08 14:30

OK danke an alle! :D

edit: achso und weiß jemand vllt auch jemand wie mann eine Scrollbar in ein richedit einbaut?

also das mann dann so durch den text scrollen kann^^


DiamondDog - Sa 11.10.08 14:40

Guck mal bei den Eigenschaften unter ScrollBars.


wurstuk - Sa 11.10.08 14:55

so das mit dem Öffnen klappt aber wenn ich etwas speicher kommt zwar das gespeicherte aber auch ganz viele komische zahlen....

weiß jemand wie ich das weg bekomme?


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:
unit text;

interface

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

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    OpenDialog1: TOpenDialog;
    PrintDialog1: TPrintDialog;
    SaveDialog1: TSaveDialog;
    RichEdit1: TRichEdit;
    Datei1: TMenuItem;
    ffnen1: TMenuItem;
    Speichern1: TMenuItem;
    Drucken1: TMenuItem;
    Schlieen1: TMenuItem;
    procedure FormCreate(Sender: TObject);
    procedure ffnen1Click(Sender: TObject);
    procedure Schlieen1Click(Sender: TObject);
    procedure Speichern1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  richedit1.Clear; //Text löschen

  end;

procedure TForm1.ffnen1Click(Sender: TObject);
begin
  try
  if opendialog1.Execute then //Execute ist eine Funktion
    richedit1.Lines.loadfromfile(opendialog1.filename); //Text der Datei ins Richedit laden
    except
    showmessage ('Fehler beim Öffnen');
    end;
end;
procedure TForm1.Schlieen1Click(Sender: TObject);
begin
close;
end;

procedure TForm1.Speichern1Click(Sender: TObject);
begin
try
if savedialog1.Execute then
richedit1.lines.SaveToFile (savedialog1.FileName);
except
showmessage ('Fehler beim Speichern');
end;
end;

end.


Delete - Sa 11.10.08 15:01

Stell das RichEdit mal auf PlainText. Außerdem solltest Du Dir beizeiten eine ordentliche Einrückung angewöhnen.


wurstuk - Sa 11.10.08 15:03

ja das mit dem einrücken is gerade so ne Sache...

ich hatte so ein Programm das den Quelltext eingerückt hat aber das funktioniert ein paar tage und dann is es plötzlich wieder aus dem Verzeichnis gelöscht...-.-

edit: wie auf plaintext? im Objektinspektor?


Delete - Sa 11.10.08 15:04

Ich hab da kein Programm für, aber eine Space-Taste^^.


wurstuk - Sa 11.10.08 15:06

ja aber dis ist mir i-wie zu anstrengend ^^ hehe


Delete - Sa 11.10.08 15:10

Und mir ist das zu anstrengend, unformatierten Code zu lesen. Wenn das mehr als 20 Zeilen sind, steigt da ja niemand mehr durch, was wozu gehört.


jaenicke - Sa 11.10.08 15:35

Dafür empfehle ich dir CnPack [http://www.cnpack.org/index.php?lang=en], insbesondere CnPack IDE Wizards, da kannst du einfach mehrere Zeilen markieren und mit Tab einrücken bzw. mit Shift + Tab ausrücken. Außerdem zeigt es dir visuell an was wozu gehört, also welches end zu welchem begin und wo welcher Block endet, etc.


Delete - Sa 11.10.08 15:55

Mehrere Zeilen ein- und ausrücken kann man auch mit IDE-Mitteln.


jaenicke - Sa 11.10.08 16:54

Das kommt vermutlich auch auf die Delphi-Version an, und beim BDS 2006 habe ich davon nix gemerkt, wie geht das da? Mit Markieren + Tab jedenfalls nicht, denn das habe ich ausprobiert gehabt. :nixweiss:


Delete - Sa 11.10.08 16:55

Markieren und mit STRG-K-I ein- bzw. mit STRG-K-U ausrücken. Geht schon seit TurboPascal 6 :mrgreen:


Yogu - Sa 11.10.08 18:16

Ich denke, das war jetzt genug Off Topic. :roll:

user profile iconwurstuk hat folgendes geschrieben Zum zitierten Posting springen:
wie auf plaintext? im Objektinspektor?

Ja, stelle einfach die Eigenschaft PlainText des RichEdits auf True. Andernfalls wird eine RTF-Datei gespeichert, die auch Formatierungsinformationen enthält.


jaenicke - Sa 11.10.08 18:31

Wenn du nur eine reine unformatierte Textanzeige haben möchtest, dann kannst du auch TMemo nehmen, der Unterschied ist, dass du in einem Memo nicht Teile des Texts andersfarbig oder fettgedruckt darstellen kannst wie im TRichEdit.

Wenn du aber ohnehin keine Datei im .rtf Format mit solchen Formatierungen benutzt, dann brauchst du das ja auch gar nicht.


wurstuk - So 12.10.08 03:16

OK danke für die Antworten

ich wrds über morgen mal aus probieren komm vorher nehmlich nicht mehr an den PC^^


wurstuk - So 12.10.08 20:50

So das mit dem Speichern und Öffnen klappt jetzt wunderbar! :D

Aber drucken klappt noch nicht so ganz könnte mir dis vllt nochmal einer erklären?

weil in dem Buch mit dem ich gerade lernen steht so

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
begin
try
if printdialog1.execute then
richedit1.text := diagnose.text;
richedit1.print := ('Diagnose');
end;
except
showmessage ('Fehler beim Drucken');
end;
end;


kann man das auch ohne eine Variable machen?


Yogu - So 12.10.08 21:02

user profile iconwurstuk hat folgendes geschrieben Zum zitierten Posting springen:
in dem Buch mit dem ich gerade lernen steht so

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
begin
try
if printdialog1.execute then
richedit1.text := diagnose.text;
richedit1.print := ('Diagnose');
end;
except
showmessage ('Fehler beim Drucken');
end;
end;

Das steht da garantiert nicht, oder in deinem Buch ist ein Fehler. Am besten rückst du deine Quelltexte immer richtig ein, dann siehst du Fehler frühzeitig:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
begin
  try
    if printdialog1.execute then
      richedit1.text := diagnose.text;
    richedit1.print := ('Diagnose');
  end// 'EXCEPT' oder 'FINALLY' erwartet, aber 'END'

  except // Anweisung erwartet, aber 'EXCEPT' gefunden
  showmessage ('Fehler beim Drucken');
end;
end;  // '.' erwartet, aber ';' gefunden

So sieht es besser aus:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
begin
  try
    if PrintDialog1.Execute then
    begin
      RichEdit1.Text := Diagnose.Text;
      RichEdit1.Print := ('Diagnose');
    end;
  except
    ShowMessage('Fehler beim Drucken');
  end;
end;

Da ist aber auch noch ein Kleiner Fehler din:


Delphi-Quelltext
 
6:
{ ... }
RichEdit1.Print('Diagnose');

Du musst den Titel als Parameter übergeben, Funktionen können keine Werte zugewiesen werden. ;)

user profile iconwurstuk hat folgendes geschrieben Zum zitierten Posting springen:
kann man das auch ohne eine Variable machen?

Welche Variable meinst du denn? Ich sehe dort nur VCL-Instanzen. :gruebel:


wurstuk - Mo 13.10.08 15:26

na diagnose ist im Buch eine Variable vom Typ tstringlist^^

Aber gibt es vllt ein weg wie mann einfach den befehl gibt richedit zu drucken ohne diagnose?


jaenicke - Mo 13.10.08 15:30

Ja, lass es einfach weg^^, die Zeile in der du Diagnose benutzt schreibt den Text aus Diagnose ja in das RichEdit und wenn du das nicht willst, warum schreibst du es dann hin? :gruebel:
Der Druckbefehl ist ja nur der Befehl Print, die Zeile davor mit der Zuweisung des Texts wird ja zum Drucken selbst nicht benötigt.


wurstuk - Mo 13.10.08 21:35

ok also nur

Delphi-Quelltext
1:
printdialog1.execute;                    

oder wie?

Und kann mir vllt jemand sagen wie ich schortcuts machen kann oder wie die heißen?
also zum Speichern dann Strg+S oder so^^


Yogu - Mo 13.10.08 21:47

user profile iconwurstuk hat folgendes geschrieben Zum zitierten Posting springen:
ok also nur

Delphi-Quelltext
1:
printdialog1.execute;                    

oder wie?

Das würde nur den Dialog aufrufen, aber sonst nichts machen.


Delphi-Quelltext
1:
2:
if PrintDialog1.Execute then // Execute ist eine Funktion, die True zurückgibt, falls auf OK geklickt wurde
  RichEdit1.Print('Diagnose');


user profile iconwurstuk hat folgendes geschrieben Zum zitierten Posting springen:
Und kann mir vllt jemand sagen wie ich schortcuts machen kann oder wie die heißen?
also zum Speichern dann Strg+S oder so^^

Füge ein PopupMenü oder MainMenü hinzu (falls du die noch nicht hast), und setze die Eigenschaft ShortCut. Für's Drucken wird gewöhnlich [delhpi]Strg+P[/delphi] verwendet.


wurstuk - Mo 13.10.08 22:56

Haha das mit den Shortcuts ist ja einfach^^ Danke! :D

So mein Texteditor kann jetzt schon eine neue Seite erstellen, eine Seite laden, eine Seite speichern, Sicherheitsfragen stellen und bald auch eine Seite drucken :D Es wird!^^


wurstuk - Di 14.10.08 15:19

Ich hab jetzt nochmal ne frage, ich wollte ein Speichern Feld und ein speichern unter Feld machen und wenn mann schon einmal speichern unter gedrückt hat und dann speichern drückt speichert er dis in der selben Datei.
Dis klappt auch alles aber ich wollte auch das wenn mann noch nicht auf speichern unter gedrückt hat das sich dann der speichern Dialog öffnet und wenn mann dort dann speichert reicht es auch wenn mann dann auf speichern drückt und dann kommt halt kein Dialog sondern es speichert einfach^^ aber immer wenn ich dis mit dem 2 mal speichern mache muss ich immer wieder den speichern Dialog benutzen... was mach ich falsch?

hier ist mein quelltext:

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:
procedure TForm1.Speichern2Click(Sender: TObject);
begin
  try
    if  berg = True then
        richedit1.lines.SaveToFile (savedialog1.FileName);
        sicher := True;
  except
     knopf := Application.MessageBox('Fehler beim Speichern der Datei','Fehler',0+16);
     sicher := False;
     end;
  try
      if  SaveDialog1.Execute then
          richedit1.lines.SaveToFile (savedialog1.FileName);
          sicher := True;
          berg := True;// die Variable die geändert wenn man Speichert^^ mir ist einfach kein Name eingefallen^^
  except
         knopf := Application.MessageBox('Fehler beim Speichern der Datei','Fehler',0+16);
         sicher := False;

     end;
     end;

end.


P.S. ich hoffe er ist einigermaßen gut eingerückt^^


Delete - Di 14.10.08 15:35

Wenn Du den Speicher beim Speichern gespeichert hast, könntest Du bei erneutem Speichern ja den gespeicherten Speicher speichern. ^^ SCNR

Nee, im Ernst, ich würde mir ein privates Feld für den Dateinamen anlegen, beim Speichern befüllen und anschließend abfragen.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
type 
  TDeinForm = class(TForm)
  private
    FFilename: string;
  ...
  end;

...

procedure TDeinForm.SpeichernClick(Sender: TObject);
begin
  //Dateiname ist bereits vorhanden
  if Length(FFilename) > 0 then
    Richedit1.Lines.SaveToFile(FFilename)
  else
    if SaveDialog1.Execute then
      begin
        //Dateinamen merken
        FFilename := SaveDialog1.Filename;
        Richedit1.Lines.SaveToFile(FFilename);
      end;
end;


So in der Art.


wurstuk - Mi 15.10.08 15:29

hmmm aber weiß jemand wo bei mir der Fehler ist?


jaenicke - Mi 15.10.08 15:33

user profile iconwurstuk hat folgendes geschrieben Zum zitierten Posting springen:
hmmm aber weiß jemand wo bei mir der Fehler ist?
Naja, ich vermute deine Einrückung sollte so sein wie du denkst, dass der Code ausgeführt wird, das ist aber nicht so.
user profile iconwurstuk hat folgendes geschrieben Zum zitierten Posting springen:

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:
procedure TForm1.Speichern2Click(Sender: TObject);
begin
  try
    if  berg = True then
        richedit1.lines.SaveToFile (savedialog1.FileName);
        sicher := True;
  except
     knopf := Application.MessageBox('Fehler beim Speichern der Datei','Fehler',0+16);
     sicher := False;
     end;
  try
      if  SaveDialog1.Execute then
          richedit1.lines.SaveToFile (savedialog1.FileName);
          sicher := True;
          berg := True;// die Variable die geändert wenn man Speichert^^ mir ist einfach kein Name eingefallen^^
  except
         knopf := Application.MessageBox('Fehler beim Speichern der Datei','Fehler',0+16);
         sicher := False;

     end;
     end;

end.
Die korrekte Einrückung:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
procedure TForm1.Speichern2Click(Sender: TObject);
begin
  try
    if berg then // if berg = True then ist FALSCH
      richedit1.lines.SaveToFile (savedialog1.FileName);
    sicher := True;
  except
    knopf := Application.MessageBox('Fehler beim Speichern der Datei','Fehler',0+16);
    sicher := False;
  end;
  try
    if SaveDialog1.Execute then // der dialog wird immer angezeigt, der wird ja nicht nur angezeigt, wenn "not berg"
      richedit1.lines.SaveToFile (savedialog1.FileName);
    sicher := True; // wird immer gesetzt, ist nicht im if
    berg := True;// die Variable die geändert wenn man Speichert^^ mir ist einfach kein Name eingefallen^^
  except
    knopf := Application.MessageBox('Fehler beim Speichern der Datei','Fehler',0+16);
    sicher := False;
  end;
end;

end.


wurstuk - Mi 15.10.08 17:35

So das Problem wäre jetzt auch gelöst! :D

Aber ich hab noch eine frage, wie kann ich machen das wenn ich das Programm als Standard text öffnungs Programm eintrage dass dann auch der text angezeigt wird?


Delete - Mi 15.10.08 17:38

Schau Dir mal ParamStr() und ParamCount an.


wurstuk - Mi 15.10.08 21:19

hmmm das versteh ich nicht^^ sry aber ich mach noch nicht so lange Delphi ^^ könnte mir dis vllt nochmal einer erklären?

und kann mir vllt auch noch einer sagen wie ich einen font Dialog mache?


Delphi-Quelltext
1:
2:
3:
4:
5:
begin
if fontdialog1.execute then
...// und hier?
end;
end.


Yogu - Mi 15.10.08 21:34

user profile iconwurstuk hat folgendes geschrieben Zum zitierten Posting springen:
und kann mir vllt auch noch einer sagen wie ich einen font Dialog mache?


Eigentlich gilt in diesem Forum: Nur eine Frage pro Topic ...


Delphi-Quelltext
1:
2:
3:
4:
5:
// Aktuelle Font dem Font-Dialog zuweisen, damit die Eigenschaften schon drinstehen
FontDialog1.Font.Assign(RichEdit1.Font);

// FontDialog ausführen, und bei Erfolg (Rückgabe True) neue Font dem RichEdit zuweisen
if FontDialog1.Execute then RichEdit1.Font.Assign(FontDialog1.Font);


jaenicke - Mi 15.10.08 21:35

user profile iconwurstuk hat folgendes geschrieben Zum zitierten Posting springen:
hmmm das versteh ich nicht^^ sry aber ich mach noch nicht so lange Delphi ^^ könnte mir dis vllt nochmal einer erklären?
Suche bei Google PARAMSTR
Gleich das erste Ergebnis liefert dir ein Beispiel... :roll:

user profile iconwurstuk hat folgendes geschrieben Zum zitierten Posting springen:
und kann mir vllt auch noch einer sagen [...]
Neue Frage --> Neuer Thread


wurstuk - Mi 15.10.08 21:44

OK werde ich dann mal machen wusste bloß nicht ob ich nin neues Thema machen sollte weil ich in einem anderen Forum voll zusammen geschissen wurde das ich für jede frage einen neuen Thread aufgemacht habe^^