Консультация № 173946
03.11.2009, 18:32
0.00 руб.
0 6 1
Добрый вечер уважаемые эксперты!
Прошу вас помочь в написани программы!
Разработать приложение "Текстовый редактор" по типу стандартного редактора "Блокнот" с использованием компонента ActionList и дополнительно обеспечить реализацию перечисленных ниже функций:
а) с помощью действий, задаваемых в ActionList, добавить в меню раздел, позволяющий работать с выравниванием текста (по правому, левому краям, и по центру).
б) добавить компонент PopupMenu и задать в данном меню действия, отображенные в разделе "Правка" MainMenu.
в) задать "горячие клавиши" для действий, перечисленных в ActionList.
г) с помощью действий, задаваемых в ActionList, добавить в меню раздел, позволяющий работать со стилем текста.
и если не затруднит написать небольшие коментарии к процедурам!!

Заранее огромное спасибо!!!!

Обсуждение

Неизвестный
03.11.2009, 18:49
общий
а)
По центру: Editor.Paragraph.Alignment:=taCenter
По левому краю: Editor.Paragraph.Alignment:=taLeftJustify
По правому: Editor.Paragraph.Alignment:=taRightJustify
Маркер:
if PostavMarker.Checked = False then
begin
Editor.Paragraph.Numbering := TNumberingStyle(nsBullet);
PostavMarker.Checked := True;
end
else
begin
Editor.Paragraph.Numbering := TNumberingStyle(nsNone);
PostavMarker.Checked := False;
end;

б) добавляешь компонент PopupMenu, вписываешь все пункты меню "Правка". Затем присваиваешь обработчик меню "Правка" однократного клика.... тяжел это описать...проще показать скрином, но у меня не установлена Delphi
в) горячие клавиши ставятся в соответствующем поле В "Инспекторе объектов". Название того поля сейчас не помню, давно уже программы не пишу :). Ищи сам, там в списке просто выбираешь нужное сочетание клавиш
г) не понятно, что за "стили текста", шрифт что ли как менять? Для этого тоже есть компонент специальный, на вкладке System кажется он находится:
Полужирный:
if Poluzirniy.Checked = False then
begin
Editor.SelAttributes.Style := Editor.SelAttributes.Style + [fsBold];
Poluzirniy.Checked := True;
end
else
begin
Editor.SelAttributes.Style := Editor.SelAttributes.Style - [fsBold];
Poluzirniy.Checked := False;
end;

Курсив:
if Kursiv.Checked = False then
begin
Editor.SelAttributes.Style := Editor.SelAttributes.Style + [fsitalic];
Kursiv.Checked := True;
end
else
begin
Editor.SelAttributes.Style := Editor.SelAttributes.Style - [fsitalic];
Kursiv.Checked := False;
end;

Подчёркнутый:
if Podcherk.Checked = False then
begin
Editor.SelAttributes.Style := Editor.SelAttributes.Style + [fsUnderLine];
Podcherk.Checked := True;
end
else
begin
Editor.SelAttributes.Style := Editor.SelAttributes.Style - [fsUnderLine];
Podcherk.Checked := False;
end;

Зачёркнутый:
if Zacherk.Checked = False then
begin
Editor.SelAttributes.Style := Editor.SelAttributes.Style + [fsStrikeOut];
Zacherk.Checked := True;
end
else
begin
Editor.SelAttributes.Style := Editor.SelAttributes.Style - [fsStrikeOut];
Zacherk.Checked := False;
end;
давно
Профессионал
153662
1070
03.11.2009, 20:22
общий
это ответ
Здравствуйте, Андреев Дмитрий Фёдорович.
Вот посмотрите, что у меня получилось:
Код:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ImgList, ExtCtrls, StdCtrls, ComCtrls, ActnList,
RichEdit, Menus, StdActns, ExtActns;
type
TMain = class(TForm)
ImageList1: TImageList;
RichEdit1: TRichEdit;
StatusBar1: TStatusBar;
ColorDialog1: TColorDialog;
ActionList1: TActionList;
EditCut1: TEditCut;
EditCopy1: TEditCopy;
EditPaste1: TEditPaste;
EditSelectAll1: TEditSelectAll;
EditUndo1: TEditUndo;
EditDelete1: TEditDelete;
SearchFind1: TSearchFind;
SearchFindNext1: TSearchFindNext;
SearchReplace1: TSearchReplace;
SearchFindFirst1: TSearchFindFirst;
RichEditBold1: TRichEditBold;
RichEditItalic1: TRichEditItalic;
RichEditUnderline1: TRichEditUnderline;
RichEditStrikeOut1: TRichEditStrikeOut;
RichEditBullets1: TRichEditBullets;
RichEditAlignLeft1: TRichEditAlignLeft;
RichEditAlignRight1: TRichEditAlignRight;
RichEditAlignCenter1: TRichEditAlignCenter;
FontEdit1: TFontEdit;
Newdoc: TAction;
FileOpen1: TFileOpen;
FileSaveAs1: TFileSaveAs;
FileExit1: TFileExit;
Printdoc: TAction;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N6: TMenuItem;
N5: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
Exit1: TMenuItem;
N9: TMenuItem;
N10: TMenuItem;
N11: TMenuItem;
N12: TMenuItem;
N13: TMenuItem;
N17: TMenuItem;
N18: TMenuItem;
N19: TMenuItem;
N20: TMenuItem;
N22: TMenuItem;
N23: TMenuItem;
N24: TMenuItem;
N25: TMenuItem;
N14: TMenuItem;
N15: TMenuItem;
N16: TMenuItem;
N21: TMenuItem;
N26: TMenuItem;
Colfont: TAction;
N27: TMenuItem;
PopupMenu1: TPopupMenu;
N28: TMenuItem;
N29: TMenuItem;
N30: TMenuItem;
N31: TMenuItem;
N32: TMenuItem;
N33: TMenuItem;
N34: TMenuItem;
N35: TMenuItem;
N36: TMenuItem;
N37: TMenuItem;
N38: TMenuItem;
N39: TMenuItem;
N40: TMenuItem;
N41: TMenuItem;
N42: TMenuItem;
N43: TMenuItem;
N44: TMenuItem;
procedure FileOpen1OpenDialogCanClose(Sender: TObject;
var CanClose: Boolean);
procedure FileSaveAs1SaveDialogCanClose(Sender: TObject;
var CanClose: Boolean);
procedure FontEdit1Accept(Sender: TObject);
procedure PrintdocExecute(Sender: TObject);
procedure NewdocExecute(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure ShowHint(Sender: TObject);
procedure RichEditChange(Sender: TObject);
procedure RichEdit1SelectionChange(Sender: TObject);
procedure ColfontExecute(Sender: TObject);
procedure SearchFind1FindDialogClose(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
FUpdating: Boolean;
function CurrText: TTextAttributes;
procedure UpdateCursorPos;
procedure SetModified(Value: Boolean);
public
{ Public declarations }
end;

var
Main: TMain;

implementation

resourcestring
sColRowInfo = 'Line: %3d Col: %3d';
sModified = 'Modified';
sUntitled = 'Untitled';

{$R *.dfm}

function TMain.CurrText: TTextAttributes; // Применение атрибутов к тексту
begin
if RichEdit1.SelLength > 0 then Result := RichEdit1.SelAttributes
else Result := RichEdit1.DefAttributes;
end;

procedure SetFileName(const FileName: String); // Установка имени файла
var FFileName: string;
begin
FFileName := FileName;
Main.Caption := Format('%s - %s', [ExtractFileName(FileName), Application.Title]);
end;

procedure TMain.FormCreate(Sender: TObject); // Создаём форму
begin
Application.OnHint := ShowHint;
FileOpen1.Dialog.InitialDir := ExtractFilePath(ParamStr(0));
FileSaveAs1.Dialog.InitialDir := FileOpen1.Dialog.InitialDir;
end;

procedure TMain.FileOpen1OpenDialogCanClose(Sender: TObject; // Загружаем файл
var CanClose: Boolean);
begin
RichEdit1.Lines.LoadFromFile(FileOpen1.Dialog.FileName);
SetFileName(FileOpen1.Dialog.FileName);
end;

procedure TMain.FileSaveAs1SaveDialogCanClose(Sender: TObject;
var CanClose: Boolean); // Сохраняем файл
begin
RichEdit1.Lines.SaveToFile(FileSaveAs1.Dialog.FileName+'.rtf');
end;

procedure TMain.FontEdit1Accept(Sender: TObject); // Выбрали шрифт
begin
RichEdit1.Font:= FontEdit1.Dialog.Font;
end;

procedure TMain.PrintdocExecute(Sender: TObject); // Распечатываем текст
begin
RichEdit1.Print('');
end;

procedure TMain.NewdocExecute(Sender: TObject); // Создали новый документ
begin
RichEdit1.Lines.Clear;
SetFileName(sUntitled);
end;

procedure TMain.ShowHint(Sender: TObject); // Показ информации в статус баре
begin
if Length(Application.Hint) > 0 then
begin
StatusBar1.SimplePanel := True;
StatusBar1.SimpleText := Application.Hint;
end
else StatusBar1.SimplePanel := False;
end;

procedure TMain.FormShow(Sender: TObject); // Перед показом формы сделать
begin
UpdateCursorPos;
RichEditChange(nil);
RichEdit1.SetFocus;
end;

procedure TMain.UpdateCursorPos; // Обновление позиции курсора
var
CharPos: TPoint;
begin
CharPos.Y := SendMessage(RichEdit1.Handle, EM_EXLINEFROMCHAR, 0,
RichEdit1.SelStart);
CharPos.X := (RichEdit1.SelStart -
SendMessage(RichEdit1.Handle, EM_LINEINDEX, CharPos.Y, 0));
Inc(CharPos.Y);
Inc(CharPos.X);
StatusBar1.Panels[0].Text := Format(sColRowInfo, [CharPos.Y, CharPos.X]);
end;

procedure TMain.RichEditChange(Sender: TObject); // При изменениях в ричэдите делаем
begin
SetModified(RichEdit1.Modified);
end;

procedure TMain.SetModified(Value: Boolean); // Установка модификации
begin
if Value then StatusBar1.Panels[1].Text := sModified
else StatusBar1.Panels[1].Text := '';
end;

procedure TMain.RichEdit1SelectionChange(Sender: TObject); // При выборе текста делаем
begin
UpdateCursorPos;
end;

procedure TMain.ColfontExecute(Sender: TObject); // Выбор цвета шрифта
begin
If not ColorDialog1.Execute then exit
else begin
if FUpdating then Exit;
CurrText.Color:=ColorDialog1.Color;
end;
end;

procedure TMain.SearchFind1FindDialogClose(Sender: TObject); // Закрытие диалога поиска
begin
Richedit1.SetFocus;
end;

procedure TMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caFree;
end;

end.
Проект создан на базе стандартного компонента RichEdit.
Прикрепленные файлы:
5
спасибо!
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

Неизвестный
03.11.2009, 21:12
общий
большое спасибо!
но вот в коментариях можно немного поточнее написать, что именно делается...
давно
Профессионал
153662
1070
03.11.2009, 21:34
общий
Код:
function TMain.CurrText: TTextAttributes; // Применение атрибутов к тексту
begin
if RichEdit1.SelLength > 0 then Result := RichEdit1.SelAttributes // Если в RichEdit выделен текст присвоить атрибуты
else Result := RichEdit1.DefAttributes;
end;

procedure SetFileName(const FileName: String); // Установка имени файла
begin
Main.Caption := Format('%s - %s', [ExtractFileName(FileName), Application.Title]); // Присвоение заголовку окна текущее имя файла
end;

procedure TMain.FormCreate(Sender: TObject); // Создаём форму
begin
Application.OnHint := ShowHint; // Разрешение отображение подсказок
FileOpen1.Dialog.InitialDir := ExtractFilePath(ParamStr(0)); // Присвоение начальной папки для диалогов открытия и сохранения файлов
FileSaveAs1.Dialog.InitialDir := FileOpen1.Dialog.InitialDir;
end;

procedure TMain.FileOpen1OpenDialogCanClose(Sender: TObject; // Загружаем файл
var CanClose: Boolean);
begin
RichEdit1.Lines.LoadFromFile(FileOpen1.Dialog.FileName); // Загружаем файл в RichEdit
SetFileName(FileOpen1.Dialog.FileName); // Присваиваем имя открытого файла в заголовке окна приложения
end;

procedure TMain.FileSaveAs1SaveDialogCanClose(Sender: TObject;
var CanClose: Boolean); // Сохраняем файл
begin
RichEdit1.Lines.SaveToFile(FileSaveAs1.Dialog.FileName+'.rtf'); // Сохранили содержимое RichEdit в файл
end;

procedure TMain.FontEdit1Accept(Sender: TObject); // Выбрали шрифт
begin
RichEdit1.Font:= FontEdit1.Dialog.Font; // Присвоили шрифту RichEdit выбранный шрифт
end;

procedure TMain.PrintdocExecute(Sender: TObject); // Распечатываем текст
begin
RichEdit1.Print('');
end;

procedure TMain.NewdocExecute(Sender: TObject); // Создали новый документ
begin
RichEdit1.Lines.Clear; // Отчистили RichEdit
SetFileName(sUntitled); // Присвоили заголовку окна название файла неизвестный
end;

procedure TMain.ShowHint(Sender: TObject); // Показ информации в статус баре
begin
if Length(Application.Hint) > 0 then // Если длина подсказки больше нуля выводим подсказку в статусбар
begin
StatusBar1.SimplePanel := True;
StatusBar1.SimpleText := Application.Hint;
end
else StatusBar1.SimplePanel := False;
end;

procedure TMain.FormShow(Sender: TObject); // Перед показом формы сделать
begin
UpdateCursorPos; // Обновили позицию курсора
RichEditChange(nil); // Установили изменения в RichEdit на ноль
RichEdit1.SetFocus; // Фокус ввода в RichEdit
end;

procedure TMain.UpdateCursorPos; // Обновление позиции курсора
var
CharPos: TPoint;
begin
CharPos.Y := SendMessage(RichEdit1.Handle, EM_EXLINEFROMCHAR, 0,
RichEdit1.SelStart); // Получили позицию курсора
CharPos.X := (RichEdit1.SelStart -
SendMessage(RichEdit1.Handle, EM_LINEINDEX, CharPos.Y, 0)); // Послали сообщение в RichEdit
Inc(CharPos.Y);
Inc(CharPos.X);
StatusBar1.Panels[0].Text := Format(sColRowInfo, [CharPos.Y, CharPos.X]); // Отобразили положение курсора в статусбаре
end;

procedure TMain.RichEditChange(Sender: TObject); // При изменениях в ричэдите делаем
begin
SetModified(RichEdit1.Modified); // Установить модификацию в RichEdit
end;

procedure TMain.SetModified(Value: Boolean); // Установка модификации
begin
if Value then StatusBar1.Panels[1].Text := sModified
else StatusBar1.Panels[1].Text := '';
end;

procedure TMain.RichEdit1SelectionChange(Sender: TObject); // При выборе текста обновляем позицию курсора
begin
UpdateCursorPos;
end;

procedure TMain.ColfontExecute(Sender: TObject); // Выбор цвета шрифта
begin
If not ColorDialog1.Execute then exit // Если диалог выбора цвета не открылся вышли из процедуры
else begin
if FUpdating then Exit;
CurrText.Color:=ColorDialog1.Color; // Присвоили цвет тексту
end;
end;

procedure TMain.SearchFind1FindDialogClose(Sender: TObject); // Закрытие диалога поиска
begin
Richedit1.SetFocus; // Фокус ввода в RichEdit
end;

procedure TMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caFree; // Освободили ресурсы занимаемые программой в памяти
end;
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

Неизвестный
03.11.2009, 21:34
общий
[q=235545][/q]

Так, а там собственно и не чего описыватьты если англ знаешь, то бери просто читай функции
Например последнее разберём:

если Zacherk(имя функциональной кнопки которая делает текст зачёркнутым).отметка равно ложь(т.е. включена) то
Editor(имя RichEdit) выбор атрибута, стиль присвоить Editor(имя RichEdit) выбор атрибута, стиль зачёркнутый // т.е. в редакторе RichEdit которому присвоено имя Editor выделенному тексту присвоить стиль зачёркнутыйвсё легко и просто.

Кстати, знаком // ставится комментарий на одну строчку, а {} комментарий из нескольких строк. Это так, чисто для твоего развития, ты я вижу начинающийчтобы знал как тебе ставит самому комментарии прямо в исходнике.

удачи!
Неизвестный
03.11.2009, 21:39
общий
ещё раз большое спасибо!!!
Форма ответа