|
![]() |
Registriert seit: 15. Nov 2004
Hi,
ich wünsche ihnen viel Spaß beim Lesen und programmieren ![]() 1. Anmerkungen Da es mein erstes Tutorial ist bitte ich um Nachsicht und würde mich über Kritik fruen. In diesem Tutorial geht es nur darum, einen Texteditor zu programmieren, Word oder OpenOffice zu programmieren, wäre ein großer Schritt von diesem Tutorial entfernt. Dieses Tutorial wurde mit dem Tutorial-Editor entwickelt. Das Tutorial verwendet Komponenten von Delphi5 Professional. Es gibt am Ende des Tutorials einen Anhang. 2. Grundsatz Ind eisem Tutorial wird die Toolbar verwendet, wer nicht weiß wie man damit umgeht, sollte sich erst mal ein anderes Tutorial über die Toolbar durchlesen. 3. Die Programmierung Es werden folgende Komponenten verwendet: 1. MainMenu 2. ToolBar 3. RichEdit 4. StatusBar 5. ComboBox 6. SpinEdit 7. Open, SaveDialog Um ein Neues Dokument zu erstellen verwenden sie einfach ein MainMenuItem: RichEdit.clear; Öffnen:
Delphi-Quellcode:
Nun zum Speichern:
if op1.Execute then
RichEdit.Lines.LoadFromFile(op1.filename); Ich finde 2 MenuItems umständlich ("speichern", "speichern unter ..."), man könnte es doch in einem lösen!
Delphi-Quellcode:
Um den Drucken-Dialog aufzurufen verwenden sie einfach:
// FileExsists: exestiert die Datei schon?
if FileExists(save.filename) then edit.lines.savetofile(save.Filename) else begin if (save.Execute) then edit.Lines.SaveToFile(save.filename); end;
Delphi-Quellcode:
Eine Undo-Funktion (Rückgängig) wäre auch ganz praktisch, da sich der Benutzer ja auch vertippen könnte:
try
if print.Execute then begin RichEdit.Text := Text; // Die Vereinbarung ist wirklich nötig sonst kann Delphi keinen Dialog aufrufen RichEdit.Print ('Text'); end; except ShowMessage ('Kein Drucker verfügbar!'); end;
Delphi-Quellcode:
Jetzt kommen ziemlich einfache Teile, daher fasse ich alles zusammen:
with RichEdit do
if HandleAllocated then SendMessage(Handle, EM_UNDO, 0, 0); Ausschneiden (Strg + X) RichEdit.CutToClipboard; Kopieren (Strg + C) RichEdit.CopyToClipboard; Einfügen (Strg + V) RichEdit.PasteFromClipboard; Um die Toolbar auch noch zu programmieren, nehmen sie bei den OnClick Befehle einfach die Befehle aus dem MainMenu. In die Toolbar sollten sie Zusätzlich dem MainMenu noch folgendes einfügen: 1. FontName (ComboBox) 2. FontSize (ComboBox) 3. UpDown (SpinEdit) Um alle voorhandenen Schriftarten in FontName aufzulisten verwenden sie einfach
Delphi-Quellcode:
Fügen sie nun die Funktion CurrText ein:
procedure TForm1.FormCreate(Sender: TObject);
begin FontName.Items:= Screen.Fonts; end;
Delphi-Quellcode:
Damit man auch die angegebenen Schriftarten verwenden kann öffnen sie einfach die OnChange (FontName):
// Ist für die Bold, Italic, Underline, FontName, FontSize-Funktion wichtig
function TForm1.CurrText: TTextAttributes; begin if RichEdit.SelLength > 0 then Result := RichEdit.SelAttributes else Result := RichEdit.DefAttributes; end;
Delphi-Quellcode:
Dasselbe gilt für die größe:
// FUpdating ist eine Private Variable in Boolean
procedure TForm1.FontNameChange(Sender: TObject); begin if FUpdating then Exit; CurrText.Name := FontName.Items[FontName.ItemIndex]; end;
Delphi-Quellcode:
Bold, Italic, Underline habe ich schonmal erwähnt.
if FUpdating then Exit;
CurrText.Size := StrToInt(FontSize.Text);
Delphi-Quellcode:
Die Punkteaufzählung ist einigen Leuten wichtig!
// Bold, Italic, Underline
procedure TForm1.BoldButtonClick(Sender: TObject); begin if FUpdating then Exit; if BoldButton.Down then CurrText.Style := CurrText.Style + [fsBold] else CurrText.Style := CurrText.Style - [fsBold]; end; procedure TForm1.ItalicButtonClick(Sender: TObject); begin if FUpdating then Exit; if ItalicButton.Down then CurrText.Style := CurrText.Style + [fsItalic] else CurrText.Style := CurrText.Style - [fsItalic]; end; procedure TForm1.UnderlineButtonClick(Sender: TObject); begin if FUpdating then Exit; if UnderlineButton.Down then CurrText.Style := CurrText.Style + [fsUnderline] else CurrText.Style := CurrText.Style - [fsUnderline]; end;
Delphi-Quellcode:
Jetzt kommt ein wichtiger Teil: die Paragraphfunktion von RichEdit!
procedure TForm1.ToolButton18Click(Sender: TObject);
begin if FUpdating then Exit; edit.Paragraph.Numbering := TNumberingStyle(ToolButton18.Down); end;
Delphi-Quellcode:
Jetzt fehlt noch der letzte Schliff!
// SelectionChange, leftalign, rightalign, centeralign
procedure TForm1.editSelectionChange(Sender: TObject); begin case edit.Paragraph.Alignment of taLeftJustify: begin Toolbutton14.Down:=true; Toolbutton15.Down:=false; Toolbutton16.Down:=false; end; taCenter: begin Toolbutton15.Down:=true; Toolbutton14.Down:=false; Toolbutton16.Down:=false; end; taRightJustify: begin Toolbutton16.Down:=true; Toolbutton14.Down:=false; Toolbutton15.Down:=false; end; end; end; procedure TForm1.ToolButton14Click(Sender: TObject); begin ToolButton15.Down:= false; ToolButton16.Down:= false; edit.Paragraph.Alignment:=taLeftJustify; end; procedure TForm1.ToolButton15Click(Sender: TObject); begin ToolButton14.Down:= false; ToolButton16.Down:= false; edit.Paragraph.Alignment:=taCenter; end; procedure TForm1.ToolButton16Click(Sender: TObject); begin ToolButton14.Down:= false; ToolButton15.Down:= false; edit.Paragraph.Alignment:=taRightJustify; end; Wie finden sie die Farbauswahl? Um die Farbauswahl zu programmieren benötigen sie eine weitere ComboBox! 1. Color = ComboBox für die farbauswahl 2. In die ComboBox müssen sie die in GetColor vorkommenden Farben eintippen.
Delphi-Quellcode:
Nun nochmal der ganze Quellcode (die Komponenten haben hier einen anderen Namen):
function TForm1.GetColor(idx: Integer): TColor;
begin case idx of 0 : result := clBlack; 1 : result := clMaroon; 2 : result := clGreen; 3 : result := clOlive; 4 : result := clNavy; 5 : result := clPurple; 6 : result := clGray; 7 : result := clSilver; 8 : result := clRed; 9 : result := clLime; 10 : result := clYellow; 11 : result := clFuchsia; 12 : result := clAqua; 13 : result := clWhite; 14 : result := clScrollBar; 15 : result := clBackground; end; end; procedure TForm1.ColorChange(Sender: TObject); begin CurrText.Color := getcolor(Color.ItemIndex); end;
Delphi-Quellcode:
Das ist ein kleiner fertiger Texteditor.
unit sys;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Menus, ComCtrls, ToolWin, ImgList, StdCtrls; type TForm1 = class(TForm) MainMenu1: TMainMenu; Datei1: TMenuItem; NeuesDokument1: TMenuItem; Dokumentffnen1: TMenuItem; Speichern1: TMenuItem; N1: TMenuItem; Drucken1: TMenuItem; N2: TMenuItem; Beenden1: TMenuItem; ImageList1: TImageList; ToolBar1: TToolBar; ToolButton1: TToolButton; ToolButton2: TToolButton; ToolButton3: TToolButton; ToolButton4: TToolButton; ToolButton5: TToolButton; ToolButton6: TToolButton; ToolButton7: TToolButton; ToolButton8: TToolButton; ToolButton9: TToolButton; ToolButton10: TToolButton; edit: TRichEdit; StatusBar: TStatusBar; op1: TOpenDialog; save: TSaveDialog; print: TPrintDialog; font: TFontDialog; Bearbeiten1: TMenuItem; Rckgngig1: TMenuItem; N3: TMenuItem; Ausschneiden1: TMenuItem; Kopieren1: TMenuItem; Einfgen1: TMenuItem; FontName: TComboBox; BoldButton: TToolButton; UnderlineButton: TToolButton; ItalicButton: TToolButton; FontSize: TEdit; UpDown1: TUpDown; ToolButton11: TToolButton; ToolButton12: TToolButton; ToolButton13: TToolButton; ToolButton18: TToolButton; ToolButton19: TToolButton; Colors: TColorDialog; Color: TComboBox; ToolButton14: TToolButton; ToolButton15: TToolButton; ToolButton16: TToolButton; function GetColor(idx: Integer): TColor; procedure speichern; procedure Beenden1Click(Sender: TObject); procedure NeuesDokument1Click(Sender: TObject); procedure ToolButton1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure ToolButton2MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure ToolButton3MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure ToolButton4MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure ToolButton6MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure ToolButton7MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure ToolButton8MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure ToolButton9MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Dokumentffnen1Click(Sender: TObject); procedure Speichernunter1Click(Sender: TObject); procedure Speichern1Click(Sender: TObject); procedure Drucken1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Rckgngig1Click(Sender: TObject); procedure Ausschneiden1Click(Sender: TObject); procedure Kopieren1Click(Sender: TObject); procedure Einfgen1Click(Sender: TObject); procedure BoldButtonClick(Sender: TObject); procedure ItalicButtonClick(Sender: TObject); procedure UnderlineButtonClick(Sender: TObject); procedure FontNameChange(Sender: TObject); procedure ToolButton18Click(Sender: TObject); procedure FontSizeChange(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure ColorChange(Sender: TObject); procedure AlignButtonClick(Sender: TObject); procedure editSelectionChange(Sender: TObject); procedure ToolButton14Click(Sender: TObject); procedure ToolButton15Click(Sender: TObject); procedure ToolButton16Click(Sender: TObject); private { Private-Deklarationen } FUpdating: Boolean; function CurrText: TTextAttributes; public { Public-Deklarationen } end; var Form1: TForm1; col: TColor; implementation {$R *.DFM} function TForm1.GetColor(idx: Integer): TColor; begin case idx of 0 : result := clBlack; 1 : result := clMaroon; 2 : result := clGreen; 3 : result := clOlive; 4 : result := clNavy; 5 : result := clPurple; 6 : result := clGray; 7 : result := clSilver; 8 : result := clRed; 9 : result := clLime; 10 : result := clYellow; 11 : result := clFuchsia; 12 : result := clAqua; 13 : result := clWhite; 14 : result := clScrollBar; 15 : result := clBackground; end; end; function TForm1.CurrText: TTextAttributes; begin if edit.SelLength > 0 then Result := edit.SelAttributes else Result := edit.DefAttributes; end; procedure TForm1.Beenden1Click(Sender: TObject); begin form1.Close; end; procedure TForm1.speichern; begin if FileExists(save.filename) then edit.lines.savetofile(save.Filename) else begin if (save.Execute) then edit.Lines.SaveToFile(save.filename); end; end; procedure TForm1.NeuesDokument1Click(Sender: TObject); begin edit.clear; end; procedure TForm1.ToolButton1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin StatusBar.Panels[0].Text:= 'Neues Dokument erstellen'; end; procedure TForm1.ToolButton2MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin StatusBar.Panels[0].Text:= 'Dokument öffnen'; end; procedure TForm1.ToolButton3MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin StatusBar.Panels[0].Text:= 'Neues Dokument speichern'; end; procedure TForm1.ToolButton4MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin StatusBar.Panels[0].Text:= 'Dokument drucken'; end; procedure TForm1.ToolButton6MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin StatusBar.Panels[0].Text:= 'Ausschneiden'; end; procedure TForm1.ToolButton7MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin StatusBar.Panels[0].Text:= 'Kopieren'; end; procedure TForm1.ToolButton8MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin StatusBar.Panels[0].Text:= 'Einfügen'; end; procedure TForm1.ToolButton9MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin StatusBar.Panels[0].Text:= 'Rückgängig'; end; procedure TForm1.Dokumentffnen1Click(Sender: TObject); begin if op1.Execute then Edit.Lines.LoadFromFile(op1.filename); end; procedure TForm1.Speichernunter1Click(Sender: TObject); begin if save.Execute then edit.Lines.SaveToFile(save.filename); end; procedure TForm1.Speichern1Click(Sender: TObject); begin speichern; end; procedure TForm1.Drucken1Click(Sender: TObject); begin try if print.Execute then begin edit.Text := Text; edit.Print ('Text'); end; except ShowMessage ('Kein Drucker verfügbar!'); end; end; procedure TForm1.FormCreate(Sender: TObject); begin FontName.Items:= Screen.Fonts; FontName.Text:= 'Arial'; end; procedure TForm1.Rckgngig1Click(Sender: TObject); begin with edit do if HandleAllocated then SendMessage(Handle, EM_UNDO, 0, 0); end; procedure TForm1.Ausschneiden1Click(Sender: TObject); begin edit.CutToClipboard; end; procedure TForm1.Kopieren1Click(Sender: TObject); begin edit.CopyToClipboard; end; procedure TForm1.Einfgen1Click(Sender: TObject); begin edit.PasteFromClipboard; end; procedure TForm1.BoldButtonClick(Sender: TObject); begin if FUpdating then Exit; if BoldButton.Down then CurrText.Style := CurrText.Style + [fsBold] else CurrText.Style := CurrText.Style - [fsBold]; end; procedure TForm1.ItalicButtonClick(Sender: TObject); begin if FUpdating then Exit; if ItalicButton.Down then CurrText.Style := CurrText.Style + [fsItalic] else CurrText.Style := CurrText.Style - [fsItalic]; end; procedure TForm1.UnderlineButtonClick(Sender: TObject); begin if FUpdating then Exit; if UnderlineButton.Down then CurrText.Style := CurrText.Style + [fsUnderline] else CurrText.Style := CurrText.Style - [fsUnderline]; end; procedure TForm1.FontNameChange(Sender: TObject); begin if FUpdating then Exit; CurrText.Name := FontName.Items[FontName.ItemIndex]; end; procedure TForm1.ToolButton18Click(Sender: TObject); begin if FUpdating then Exit; edit.Paragraph.Numbering := TNumberingStyle(ToolButton18.Down); end; procedure TForm1.FontSizeChange(Sender: TObject); begin if FUpdating then Exit; CurrText.Size := StrToInt(FontSize.Text); end; procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin case MessageDlg('Änderungen speichern?',mtConfirmation, mbYesNoCancel, 0) OF mrYes : speichern; mrNo : CanClose := true; end; end; procedure TForm1.ColorChange(Sender: TObject); begin CurrText.Color := getcolor(Color.ItemIndex); end; procedure TForm1.AlignButtonClick(Sender: TObject); begin if FUpdating then Exit; edit.Paragraph.Alignment := TAlignment(TControl(Sender).Tag); end; procedure TForm1.editSelectionChange(Sender: TObject); begin case edit.Paragraph.Alignment of taLeftJustify: begin Toolbutton14.Down:=true; Toolbutton15.Down:=false; Toolbutton16.Down:=false; end; taCenter: begin Toolbutton15.Down:=true; Toolbutton14.Down:=false; Toolbutton16.Down:=false; end; taRightJustify: begin Toolbutton16.Down:=true; Toolbutton14.Down:=false; Toolbutton15.Down:=false; end; end; end; procedure TForm1.ToolButton14Click(Sender: TObject); begin ToolButton15.Down:= false; ToolButton16.Down:= false; edit.Paragraph.Alignment:=taLeftJustify; end; procedure TForm1.ToolButton15Click(Sender: TObject); begin ToolButton14.Down:= false; ToolButton16.Down:= false; edit.Paragraph.Alignment:=taCenter; end; procedure TForm1.ToolButton16Click(Sender: TObject); begin ToolButton14.Down:= false; ToolButton15.Down:= false; edit.Paragraph.Alignment:=taRightJustify; end; end. Noch der Anhang (Ich bin einfach mal großzügig und zipe alle Bilder etc.): |
Delphi XE Professional |
#2
Hi!
Vorweg: Warum noch ein Tutorial zu dem Thema? ![]() (Ich weiß, das ist von mir. Es soll jetzt hier aber keine Werbung sein, sondern ich frage mich nur, warum es 2 Tutorials zu diesem einen Thema geben soll) Inhaltlich: Mich überkam manchmal das Prinzip der "Copy&Paste-Anstachelung" Ich finde es fehlen an einigen Stellen erkläredene Worte. Ciao Frederic
Frederic Kerber
|
![]() |
|
#4
![]() Nun zum Speichern:
Ich finde 2 MenuItems umständlich ("speichern", "speichern unter ..."), man könnte es doch in einem lösen!
Delphi-Quellcode:
// FileExsists: exestiert die Datei schon?
if FileExists(save.filename) then edit.lines.savetofile(save.Filename) else begin if (save.Execute) then edit.Lines.SaveToFile(save.filename); end;
Leo S.
|
![]() |
Ansicht |
![]() |
![]() |
![]() |
ForumregelnEs ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus. Trackbacks are an
Pingbacks are an
Refbacks are aus
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
![]() |
![]() |