Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 1034
от 14.01.2008, 13:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 429, Экспертов: 61
В номере:Вопросов: 3, Ответов: 8

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>


Вопрос № 117496: Уважаемые эксперты пожалуйста помогите написать мне программу блокнот, используя компонент richedit. Заранее благодарен....
Вопрос № 117497: Уважаемые эксперты у меня вопрос. Почему richedit не работает с savedialog? Заранее благодарю...
Вопрос № 117588: Здравствуйте уважаемые эксперты. У меня вопрос в следующем. Создана программа. При запуске ее под Win98 выдается следующее сообщение: (под winXP все нормально) Файл fff.exe связан с отсутствующим компонентом NTDLL.DLL:NTOpenSelection. и прог...

Вопрос № 117.496
Уважаемые эксперты пожалуйста помогите написать мне программу блокнот, используя компонент richedit. Заранее благодарен.
Отправлен: 08.01.2008, 16:09
Вопрос задал: Alexander Alexandrovic (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Drbear
Здравствуйте, Alexander Alexandrovic!

Этот пример Вас спасет?
В проекте 2 формы: Form1 - основная, Form2 - о программе
на Form1: MainMenu, SaveDialog, OpenDialog, ColorDialog, FontDialog, FindDialog, ComboBox, RichEdit.
Остальное в приложении

Приложение:

Ответ отправил: Drbear (статус: 5-ый класс)
Ответ отправлен: 08.01.2008, 18:16
Оценка за ответ: 5
Комментарий оценки:
Спасибо

Отвечает: Genia007
Здравствуйте, Alexander Alexandrovic! Вот исходник на основе richedit, разбирайтесь.
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ImgList, ExtCtrls, ToolWin, ActnCtrls, ActnMenus, StdCtrls,
ComCtrls, ExtActns, XPStyleActnCtrls, ShellAPI, StdActns, ActnList,
ActnMan, RichEdit;
type
TMain = class(TForm)
ActionManager1: TActionManager;
ImageList1: TImageList;
FileSaveAs1: TFileSaveAs;
EditCut1: TEditCut;
EditCopy1: TEditCopy;
EditPaste1: TEditPaste;
EditSelectAll1: TEditSelectAll;
EditUndo1: TEditUndo;
EditDelete1: TEditDelete;
RichEditBold1: TRichEditBold;
RichEditItalic1: TRichEditItalic;
RichEditUnderline1: TRichEditUnderline;
RichEditStrikeOut1: TRichEditStrikeOut;
RichEditBullets1: TRichEditBullets;
RichEditAlignLeft1: TRichEditAlignLeft;
RichEditAlignRight1: TRichEditAlignRight;
RichEditAlignCenter1: TRichEditAlignCenter;
SearchFind1: TSearchFind;
SearchFindNext1: TSearchFindNext;
SearchReplace1: TSearchReplace;
SearchFindFirst1: TSearchFindFirst;
FontEdit1: TFontEdit;
FileOpen1: TFileOpen;
RichEdit1: TRichEdit;
ActionMainMenuBar1: TActionMainMenuBar;
ActionToolBar1: TActionToolBar;
ActionToolBar2: TActionToolBar;
Printdoc: TAction;
FileExit2: TFileExit;
StatusBar1: TStatusBar;
Newdoc: TAction;
ComboBox1: TComboBox;
Edit1: TEdit;
UpDown1: TUpDown;
Colfont: TAction;
ColorDialog1: TColorDialog;
About: TAction;
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 ComboBox1Change(Sender: TObject);
procedure Edit1Change(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 AboutExecute(Sender: TObject);
private
{ Private declarations }
FUpdating: Boolean;
function CurrText: TTextAttributes;
procedure GetFontNames;
procedure UpdateCursorPos;
procedure SetModified(Value: Boolean);
public
{ Public declarations }
end;

var
Main: TMain;

implementation

uses Unit2;

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

{$R *.dfm}

function EnumFontsProc(var LogFont: TLogFont; var TextMetric: TTextMetric;
FontType: Integer; Data: Pointer): Integer; stdcall;
begin
TStrings(Data).Add(LogFont.lfFaceName);
Result := 1;
end;

procedure TMain.GetFontNames;
var
DC: HDC;
begin
DC := GetDC(0);
EnumFonts(DC, nil, @EnumFontsProc, Pointer(ComboBox1.Items));
ReleaseDC(0, DC);
ComboBox1.Sorted := True;
end;

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;
GetFontNames;
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.ComboBox1Change(Sender: TObject);
begin
if FUpdating then Exit;
CurrText.Name := ComboBox1.Items[Combobox1.ItemIndex];
end;

procedure TMain.Edit1Change(Sender: TObject);
begin
if FUpdating then Exit;
CurrText.Size := StrToInt(Edit1.Text);
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);
ComboBox1.Text := RichEdit1.SelAttributes.Name;
Edit1.Text := IntToStr(RichEdit1.SelAttributes.Size);
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.AboutExecute(Sender: TObject);
begin
Application.CreateForm(TAboutBox, AboutBox);
end;

end.

Ответ отправил: Genia007 (статус: 3-ий класс)
Ответ отправлен: 08.01.2008, 20:55
Оценка за ответ: 5
Комментарий оценки:
Большое спасибо за помощь! Вы мне очень омогли.

Отвечает: Louken
Здравствуйте, Alexander Alexandrovic!

Люди, что Вы мучаетесь, у Вас эта программа давно уже есть.
Зайдите в каталог, где установлена Delphi, там найдите каталог Demos, а там RichEdit. Вот оно, это почти WordPad.
Удачи Вам.

Приложение:

Ответ отправил: Louken (статус: Студент)
Ответ отправлен: 08.01.2008, 23:45
Оценка за ответ: 5
Комментарий оценки:
Дело в том, что у меня Delphi 2006, но всё равно за совет спасибо


Вопрос № 117.497
Уважаемые эксперты у меня вопрос. Почему richedit не работает с savedialog? Заранее благодарю
Отправлен: 08.01.2008, 16:11
Вопрос задал: Alexander Alexandrovic (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Raptor3
Здравствуйте, Alexander Alexandrovic!

Крайне странный вопрос - а как по вашему ричедит должен работать с savedialog???

SaveDialog - это просто вызываемый диалог для выбора папки сохранения или файла

Убрано исправление.
-----
∙ Отредактировал: sir henry (Академик)
∙ Дата редактирования: 10.01.2008, 19:40

Приложение:

---------
Программист - это человек который решает проблему, о которой вы не знаете, способом который вы не понимаете

Ответ отправил: Raptor3 (статус: 4-ый класс)
Ответ отправлен: 08.01.2008, 16:33
Оценка за ответ: 5
Комментарий оценки:
Большое спасибо

Отвечает: Genia007
Здравствуйте, Alexander Alexandrovic! Должен работать попробуйте следующий код:
procedure TMain.SaveDialogCanClose(Sender: TObject;
var CanClose: Boolean);
begin
RichEdit1.Lines.SaveToFile(SaveDialog1.Dialog.FileName+'.rtf');
end;
Ответ отправил: Genia007 (статус: 3-ий класс)
Ответ отправлен: 08.01.2008, 21:01
Оценка за ответ: 5
Комментарий оценки:
Спасибо


Вопрос № 117.588
Здравствуйте уважаемые эксперты. У меня вопрос в следующем.
Создана программа. При запуске ее под Win98 выдается следующее сообщение: (под winXP все нормально)
Файл fff.exe связан с отсутствующим компонентом NTDLL.DLL:NTOpenSelection. и программа не запускается - что можно сделать чтоб подцепить эту DLL (анализировать версию windows - не предлагать, т.к. призапуске ее под другой версией Win95 - выдается сообщение об отсутствии user32.dll:EnumDisplayDivices )
Отправлен: 09.01.2008, 10:31
Вопрос задала: Кильевич Наталья Ульяновна (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 6)

Отвечает: Виктор Пырлик
Здравствуйте, Кильевич Наталья Ульяновна!

Всё очень просто, в программе используются функции зависимые от платформы.
Даже, если вызов идет из библиотеки, которая есть в обоих ОС (9х и NT) то, в 9х урезано может быть до безобразия (стоят просто заглушки).
Следовательно - если это ваша программа, избегайте функций работающих только под NT – всегда можно решить задачу множеством способов. Если это стороння - то, тут ничего не поделаешь, т.к. эти библиотеки системные и вы не можете их "прикрутить" - зависят в конечно счете от ядра.


---------
Если ничего не помогло - надо читать инструкцию
Ответ отправил: Виктор Пырлик (статус: Специалист)
Ответ отправлен: 09.01.2008, 10:50
Оценка за ответ: 5
Комментарий оценки:
Спасибо за быстрый ответ.Жаль что нельзя каким то обазом подцепить DLL - т.к. искать решение для другой версии Win - довольно хлопотно. И что самое интересное - даже найдя это решение а вставив в программу проверку на версию Win - обходя решение для WinXP - все равно выдается это сообщение.

Отвечает: Drbear
Здравствуйте, Кильевич Наталья Ульяновна!

Зависимые библитеки можно таскать вместе с приложением и хранить их в одном каталоге с exe-файлом. Или включить их в проект "Projekt --> Add to projekt".
Но лучше искать обходные пути, и по минимуму использовать библиотеки, зависимые от версии ОС.
Ответ отправил: Drbear (статус: 5-ый класс)
Ответ отправлен: 09.01.2008, 12:23
Оценка за ответ: 4
Комментарий оценки:
Спасибо за ответ, но помещение этой системной dll (ее версии в WinXP) в каталог программы ничего не дало-т.к система берет в свою "родную" dll - а эта родная dll (c этим именем уже загружена в память) - лб этом говорит тот факт - если попробовать зарегистрировать в системе "новую" DLL

Отвечает: Зиновьев Дмитрий Владимирович
Здравствуйте, Кильевич Наталья Ульяновна!
Не знаю, устроит ли Вас данный вариант, но попробую предложить:
В папку с программой ложите необходимые dll. Так как программа будет сначала искать dll в папке запуска, то она сама и подцепится.
Ответ отправил: Зиновьев Дмитрий Владимирович (статус: 9-ый класс)
Ответ отправлен: 09.01.2008, 13:51
Оценка за ответ: 4
Комментарий оценки:
Спасибо за ответ, но помещение этой системной dll (ее версии в WinXP) в каталог программы ничего не дало-т.к система берет в свою "родную" dll - а эта родная dll (c этим именем уже загружена в память) - лб этом говорит тот факт - если попробовать зарегистрировать в системе "новую" DLL


Вы имеете возможность оценить этот выпуск рассылки.
Нам очень важно Ваше мнение!
Оценить этот выпуск рассылки >>

Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.69 от 06.01.2008
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное