Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.03.2009, 19:47
Nicoligen Nicoligen вне форума
Прохожий
 
Регистрация: 19.10.2008
Сообщения: 10
Репутация: 10
По умолчанию пишу текстовик помогите с открытием

День добрый.

Пишу текстовый редактор наподобие виндосовского notepad.exe

у меня на форме: mainmenu1, opendialog1, savedialog1, memo1.
простейшие функции: открыть-редактировать сохранить.

вопрос: как сделать так, чтобы когда я скомпилирую файл (mynotepad.exe) открывал текстовые документы на лету?
В смысле, тыкаю на 123.txt правой кнопкой- открыть с помощью - mynotepad.exe - содержимое должно подгружаться в memo1, как так сделать?

заранее спасибо.
Ответить с цитированием
  #2  
Старый 07.03.2009, 20:41
Аватар для Karsh
Karsh Karsh вне форума
Активный
 
Регистрация: 22.09.2007
Адрес: SPb
Сообщения: 228
Версия Delphi: 7, 2009, XE2
Репутация: 70
По умолчанию

Параметры запуска приложения можно "извлечь" с помощью функции ParamStr(Index: Integer): string.
Код:
ParamStr(0) - возвращает путь приложения
ParamStr(1) - возвращает первый параметр
Реализовать ваш случай можно так:
Код:
Memo1.Lines.LoadFromFile(ParamStr(1));
Есть еще функция ParamCount: Integer, которая возвращает кол-во параметров.
Соединив эти 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  
Старый 07.03.2009, 23:06
Nicoligen Nicoligen вне форума
Прохожий
 
Регистрация: 19.10.2008
Сообщения: 10
Репутация: 10
По умолчанию

Karsh , я что-то похожее пробовал.

вариант первый:
я пишу так:
Код:
  
If ParamCount > 0 then
    Memo1.Lines.LoadFromFile(ParamStr(1));
никаких ошибок, в делфе всё запускается, всё компилируется, экзешник сам по себе если запускать - никаких ошибок, а если текстовик открыть этим экзешником - ничего не произойдёт (программа запуститься, содержимое текстовика не отобразиться в мемо1)

вариант второй:
я пишу то же самое только без " If ParamCount > 0 then"
получается так - при запуске в делфе - выдаёт ошибку cannot open file "". the system can not find file path specified. Компиляция однако, проходит успешно. Если запустить экзешник - та же ошибка. А если открыть текстовик с помощью экзешника - то содержимоей текстовика отобразиться в мемо1 как надо.
Ответить с цитированием
  #4  
Старый 07.03.2009, 23:22
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,088
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

А у тебя случаем путь не с пробелами? Если да, то надо брать его в двойны кавычки. И указвать полный путь...
Ответить с цитированием
  #5  
Старый 07.03.2009, 23:59
Аватар для Karsh
Karsh Karsh вне форума
Активный
 
Регистрация: 22.09.2007
Адрес: SPb
Сообщения: 228
Версия Delphi: 7, 2009, XE2
Репутация: 70
По умолчанию

попробуйте тогда так:
Код:
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  
Старый 11.03.2009, 18:04
Nicoligen Nicoligen вне форума
Прохожий
 
Регистрация: 19.10.2008
Сообщения: 10
Репутация: 10
По умолчанию

ошибка была моя в том что я по чьему-то совету задал в начала переменную paramcount:integer зачем-то.
теперь всё работает.

у меня есть ещё пара вопросов, сопутствующих:

-как сделать так, чтобы при открытии файла (из проги или с помощью неё) form.caption менялся на имя файла?
-как отслеживать нажатия клавиш и делать опр. действия (ну, типа там ctrl+o открыть итд)?
Ответить с цитированием
  #7  
Старый 11.03.2009, 18:08
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,088
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

1. Там, где открываешь файл, тебе надо сделать следующее:
- Сохранить полное имя файла в какой-нить переменной. Потребуется потом для сохранения.
- В свойство caption формы вывести имя файла. Типа Caption := 'MyNotepad '+ExtractFileName(FFileName);, где FFileName - имя переменной, где сохранен полное имя файла.
2. с помощью хот-кеев, задаваемых либо в меню (в свойстве ShortСut), либо с помощью Action'ов - см. компонент ActionList.
Ответить с цитированием
  #8  
Старый 11.03.2009, 20:21
Nicoligen Nicoligen вне форума
Прохожий
 
Регистрация: 19.10.2008
Сообщения: 10
Репутация: 10
По умолчанию

lmikle, на счёт первого - спасибо, так и сделал
если открывается файл программой на лету то exstractfilename делаю из paramstr(1) а когда открываю из проги то из опендиалога.

А вот по поводу хот-кеев не понял - не понял , в каком меню в каком свойстве где это?
Ответить с цитированием
  #9  
Старый 11.03.2009, 21:05
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,088
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

На форме есть меню? Компонент TMainMenu?
У него есть итемы (TMenuItem), представляющие конкретный пункт меню. Вот у него есть свойство ShortCut. вот там и указываются горячие клавиши.
Ответить с цитированием
  #10  
Старый 12.03.2009, 20:10
Nicoligen Nicoligen вне форума
Прохожий
 
Регистрация: 19.10.2008
Сообщения: 10
Репутация: 10
По умолчанию

а, точно, нашёл. а куда он записывает эти данные что он оtслеживает ? в коде -то нигде нету информации об этом

кстати, как отследить нажатие кнопок окошка - свернуть, на весь экран, закрыть?

Последний раз редактировалось Nicoligen, 12.03.2009 в 20:39.
Ответить с цитированием
  #11  
Старый 12.03.2009, 22:02
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Для того чего куда неявное записывается перейдите в дизайнер формы и нажмите Alt+F12 переключитесь из дизайна формы в редактирование формы.
Отследить можно, если обработать событие этой формы OnResize и проверять в нем свойство формы WindowState
Ответить с цитированием
  #12  
Старый 12.03.2009, 22:51
Аватар для Karsh
Karsh Karsh вне форума
Активный
 
Регистрация: 22.09.2007
Адрес: SPb
Сообщения: 228
Версия Delphi: 7, 2009, XE2
Репутация: 70
По умолчанию

можно так:
Код:
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 метра.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:53.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025