![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
День добрый.
Пишу текстовый редактор наподобие виндосовского notepad.exe у меня на форме: mainmenu1, opendialog1, savedialog1, memo1. простейшие функции: открыть-редактировать сохранить. вопрос: как сделать так, чтобы когда я скомпилирую файл (mynotepad.exe) открывал текстовые документы на лету? В смысле, тыкаю на 123.txt правой кнопкой- открыть с помощью - mynotepad.exe - содержимое должно подгружаться в memo1, как так сделать? заранее спасибо. |
|
#2
|
||||
|
||||
|
Параметры запуска приложения можно "извлечь" с помощью функции ParamStr(Index: Integer): string.
Код:
ParamStr(0) - возвращает путь приложения ParamStr(1) - возвращает первый параметр Код:
Memo1.Lines.LoadFromFile(ParamStr(1)); Соединив эти 2 функции получаем: Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
If ParamCount > 0 then
Memo1.Lines.LoadFromFile(ParamStr(1));
end;Последний раз редактировалось Karsh, 07.03.2009 в 20:46. |
|
#3
|
|||
|
|||
|
Karsh , я что-то похожее пробовал.
вариант первый: я пишу так: Код:
If ParamCount > 0 then
Memo1.Lines.LoadFromFile(ParamStr(1));вариант второй: я пишу то же самое только без " If ParamCount > 0 then" получается так - при запуске в делфе - выдаёт ошибку cannot open file "". the system can not find file path specified. Компиляция однако, проходит успешно. Если запустить экзешник - та же ошибка. А если открыть текстовик с помощью экзешника - то содержимоей текстовика отобразиться в мемо1 как надо. |
|
#4
|
|||
|
|||
|
А у тебя случаем путь не с пробелами? Если да, то надо брать его в двойны кавычки. И указвать полный путь...
|
|
#5
|
||||
|
||||
|
попробуйте тогда так:
Код:
procedure TForm1.FormCreate(Sender: TObject);
var
FileName: string;
begin
FileName:= ParamStr(1);
If FileExists(FileName) then
Memo1.Lines.LoadFromFile(FileName);
// можно указать ShowMessage для просмотра параметра
ShowMessage(FileName);
end; |
|
#6
|
|||
|
|||
|
ошибка была моя в том что я по чьему-то совету задал в начала переменную paramcount:integer зачем-то.
теперь всё работает. у меня есть ещё пара вопросов, сопутствующих: -как сделать так, чтобы при открытии файла (из проги или с помощью неё) form.caption менялся на имя файла? -как отслеживать нажатия клавиш и делать опр. действия (ну, типа там ctrl+o открыть итд)? |
|
#7
|
|||
|
|||
|
1. Там, где открываешь файл, тебе надо сделать следующее:
- Сохранить полное имя файла в какой-нить переменной. Потребуется потом для сохранения. - В свойство caption формы вывести имя файла. Типа Caption := 'MyNotepad '+ExtractFileName(FFileName);, где FFileName - имя переменной, где сохранен полное имя файла. 2. с помощью хот-кеев, задаваемых либо в меню (в свойстве ShortСut), либо с помощью Action'ов - см. компонент ActionList. |
|
#8
|
|||
|
|||
|
lmikle, на счёт первого - спасибо, так и сделал
если открывается файл программой на лету то exstractfilename делаю из paramstr(1) а когда открываю из проги то из опендиалога. А вот по поводу хот-кеев не понял - не понял , в каком меню в каком свойстве где это? |
|
#9
|
|||
|
|||
|
На форме есть меню? Компонент TMainMenu?
У него есть итемы (TMenuItem), представляющие конкретный пункт меню. Вот у него есть свойство ShortCut. вот там и указываются горячие клавиши. |
|
#10
|
|||
|
|||
|
а, точно, нашёл. а куда он записывает эти данные что он оtслеживает ? в коде -то нигде нету информации об этом
кстати, как отследить нажатие кнопок окошка - свернуть, на весь экран, закрыть? Последний раз редактировалось Nicoligen, 12.03.2009 в 20:39. |
|
#11
|
||||
|
||||
|
Для того чего куда неявное записывается перейдите в дизайнер формы и нажмите Alt+F12 переключитесь из дизайна формы в редактирование формы.
Отследить можно, если обработать событие этой формы OnResize и проверять в нем свойство формы WindowState |
|
#12
|
||||
|
||||
|
можно так:
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
procedure WndProc(var Message: TMessage); override;
procedure FormMinimize();
procedure FormMaximize();
procedure FormRestore();
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.WndProc(var Message: TMessage);
begin
inherited;
with Message do
case Msg of
WM_SYSCOMMAND: begin
if not (csDesigning in ComponentState) then
case WParam of
SC_MINIMIZE: FormMinimize;
SC_MAXIMIZE: FormMaximize;
SC_RESTORE: FormRestore;
end;
end;
end;
end;
procedure TForm1.FormMinimize();
begin
Application.Title:= 'MINIMIZE';
Caption:= Application.Title;
end;
procedure TForm1.FormMaximize();
begin
Application.Title:= 'MAXIMIZE';
Caption:= Application.Title;
end;
procedure TForm1.FormRestore();
begin
Application.Title:= 'RESTORE';
Caption:= Application.Title;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
If MessageDlg('Хотите закрыть окно?', mtConfirmation, [mbYes, mbNo], 0) = mrNo then
Action:= caNone;
end;
end.
|