![]() |
|
|
Регистрация | << Правила форума >> | 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; Начинающий программист уверен, что в 1 килобайте 1000 байт.
Законченный программист уверен, что в 1 километре 1024 метра. Последний раз редактировалось 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; Начинающий программист уверен, что в 1 килобайте 1000 байт.
Законченный программист уверен, что в 1 километре 1024 метра. |
#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. Начинающий программист уверен, что в 1 килобайте 1000 байт.
Законченный программист уверен, что в 1 километре 1024 метра. |