Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.07.2010, 09:57   #1
Drax
Пользователь
 
Регистрация: 28.07.2010
Сообщений: 19
Печаль Помогите с текстовым файликом

Помогите с программкой на Delphi пожалуйста, надо чтоб при нажатии на кнопку (поле, картинку) запускалась программа, при нажатии на кнопку (поле, картинку) прога брала путь запускаемой программки из текстового файлика и из определенной строки, и еще чтоб на кнопке (поле, картинке) была иконка запускаемой программки.
Drax вне форума Ответить с цитированием
Старый 28.07.2010, 10:01   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
прога брала путь запускаемой программки из текстового файлика
Лучше всего хранить список программ в INI файле. При запуске твоей, считывать этот список, получать по нему иконку программ и отрисовывать их на кнопках.
Сам то пытался что-то сделать?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.07.2010, 10:03   #3
Drax
Пользователь
 
Регистрация: 28.07.2010
Сообщений: 19
По умолчанию

Да я начинающий, да побывал , даже не знаю с кокой стороны подойти. Как сделать кнопку, форму я знаю, а вот что касается кода не знаю

Никто не знает, нет умельцев подсказать?

Последний раз редактировалось Stilet; 28.07.2010 в 10:34.
Drax вне форума Ответить с цитированием
Старый 28.07.2010, 10:34   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Начни с этих:
http://www.programmersforum.ru/showthread.php?t=14551
http://www.az-design.ru/index.shtml?...dSectionValues
http://z-oleg.com/delphi/reestr3.htm

Кстати. В хелпе Делфи тоже пример есть на этот метод

Разберись сначала с INI файлами, научись просто читать, а потом уж и будешь учится картинки вытягивать из экзешников - тоже не сложно.

Цитата:
нет умельцев подсказать?
Чтож такой нетерпеливый то?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.07.2010, 10:45   #5
Drax
Пользователь
 
Регистрация: 28.07.2010
Сообщений: 19
По умолчанию

Да, терпения нет, спасибо за инфу, посмотрю счас

мм, (( если честно я ничего не понял из прочитанного, зачем мне создавать ini и потом его стирать, если он будит уже создан и не удаляем. если не затруднит Вас напишите просто пример открытия программки при нажатии на кнопку с ini файлом, а то я уже давно бьюсь с этим делом

Последний раз редактировалось Stilet; 28.07.2010 в 14:43.
Drax вне форума Ответить с цитированием
Старый 28.07.2010, 13:42   #6
Impuls1989
Форумчанин
 
Аватар для Impuls1989
 
Регистрация: 16.08.2008
Сообщений: 276
По умолчанию

Код:
uses StdCtrls, ShellApi;
....
procedure TForm1.Button1Click(Sender: TObject);
var ini:TIniFile;
     s:TStrings;
     fn:string;
     i:integer;
begin
  ini:=TIniFile.Create('c:\123.ini');
  s:=TStringList.Create;
  ini.WriteString('FileName','v1','c:\Windows\notepad.exe');
  ini.WriteString('FileName','v2','c:\Windows\System32\calc.exe');
  ini.WriteString('FileName','v2','c:\Windows\System32\cmd.exe');
  ini.ReadSection('FileName',s);
  for i:=0 to s.Count-1 do
  begin
    fn:=ini.ReadString('FileName',s.Strings[i],'');
    if (fn<>'') then
      ShellExecute(Handle, 'open',PChar(fn), nil, nil, SW_SHOWNORMAL);
  end;
  ini.Free;
end;
По нажатии на кнопку откроется: блокнот, калькулятор и командная строка. Соответственно репертуар программ можно изменять хоть до бесконечности (в разумных пределах конечно)))
То, что выделено красным, записывает в ini файл данные о путях к программам. Эти строки нужно либо перенести в другую функцию, либо убрать вообще и записывать данные в файл в ручную...
Если что-то не понятно: спрашивайте.
Искусственный интеллект - фигня по сравнению с естественной глупостью
Impuls1989 вне форума Ответить с цитированием
Старый 28.07.2010, 13:59   #7
Drax
Пользователь
 
Регистрация: 28.07.2010
Сообщений: 19
По умолчанию

Огромное спасибо!!!сейчас буду смотреть.

Все работает нормально, буду еще благодарен если покажете как отображать на кнопке иконку запускаемой программы

Последний раз редактировалось Stilet; 28.07.2010 в 17:04.
Drax вне форума Ответить с цитированием
Старый 28.07.2010, 19:29   #8
Impuls1989
Форумчанин
 
Аватар для Impuls1989
 
Регистрация: 16.08.2008
Сообщений: 276
По умолчанию

Думаю такой способ Вас устроит:
Кидаете на форму кнопку BitBtn (вкладка AddItional) и в обработчике OnClick пишете код:
Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
var Icon: TIcon;
     IconHandle:HICON;
begin
    Icon := TIcon.Create;
    IconHandle:=ExtractIcon(MainInstance,PChar('C:\Windows\notepad.exe'),0);
    Icon.Handle:=IconHandle;
    BitBtn1.Glyph.Width:=Icon.Width;
    BitBtn1.Glyph.Height:=Icon.Height;
    BitBtn1.Glyph.Canvas.Draw(0,0,Icon);
    Icon.Free;
end;
Не забудьте подключить ShellApi:
Код:
uses ShellApi
Будьте осторожны с выбором размера кнопки... Если размеры иконки будут больше размеров кнопки (ну вы сами увидите)))
0 в функции ExtractIcon(MainInstance,PChar('C:\ Windows\notepad.exe'),0); означает то, что нужно извлекать 0-ую иконку (их может быть и несколько)
Кстати! Так можно доставать иконки не только из exe но и из dll
Искусственный интеллект - фигня по сравнению с естественной глупостью
Impuls1989 вне форума Ответить с цитированием
Старый 28.07.2010, 20:03   #9
Drax
Пользователь
 
Регистрация: 28.07.2010
Сообщений: 19
По умолчанию

Все классно, понятно, но последний вопросик, а как сделать так чтоб путь к иконки программы брался из ini, то есть соединить теперь эти два разных кода?))) пытаюсь это осмыслить, счас голова лопнит. Тоесть при открытии формы автоматом появлялась иконка приложения на кнопке, путь которого у меня заранее написан в ini файле, а уже потом при нажатии на кнопку открывалось, о как))

Последний раз редактировалось Drax; 28.07.2010 в 20:10.
Drax вне форума Ответить с цитированием
Старый 28.07.2010, 21:17   #10
Impuls1989
Форумчанин
 
Аватар для Impuls1989
 
Регистрация: 16.08.2008
Сообщений: 276
По умолчанию

Ну тут все элементарно. Перед использованием любого элемента (будь то кнопка, поле ввода или какой-нибудь экзотический компонент) его необходимо создать (выделить под него память, проинициализировать все переменные ну и далее всякая дребеденька...). За создание элемента отвечает метод Create. Тоже, если вы хотите удалить компонент: метод Destroy (освободить выделенную под него память...). К счастью не нужно вручную вызывать для каждого положенного на форму компонента Create и Destroy. Все это делает ваше приложение автоматически... Но все это типовые действия... А что делать, если нужно сделать то, что не было предусмотрено программистами Borland (проинициализировать переменную, прочитать/записать настройки и т.д.)? И тут приходит на помощь события... События - это процедуры, вызываемые при каких-либо событиях (нажатие на кнопку, создание формы, движение мышкой и т.д.). Не исключением является и форма приложения. В нем тоже есть десятка 3-4 разнообразных событий... В данном случае нас как раз и интересует событие OnCreate (т.е. событие, наступающее при создании формы).
Итак. Что из выше написанного надо вынести:
В событии OnCreate формы стоит написать такой код:
Код:
procedure TForm1.FormCreate(Sender: TObject);
var ini:TIniFile;
     s:TStrings;
procedure SetIcon(btn:TBitBtn; WayToExe:string);
var Icon: TIcon;
     IconHandle:HICON;
begin
    Icon := TIcon.Create;
    IconHandle:=ExtractIcon(MainInstance,PChar(WayToExe),0);
    Icon.Handle:=IconHandle; 
    with btn do
    begin
       Glyph.Width:=Icon.Width;
       Glyph.Height:=Icon.Height;
       Glyph.Canvas.Draw(0,0,Icon);
    end;
    Icon.Free;
end;
begin
    ini:=TIniFile.Create('c:\123.ini');
    s:=TStringList.Create;
    ini.ReadSection('FileName',s);

    fn:=ini.ReadString('FileName',s.Strings[0],'');
    if (fn<>'') then
      SetIcon(BitBtn1,fn);
    fn:=ini.ReadString('FileName',s.Strings[1],'');
    if (fn<>'') then
      SetIcon(BitBtn2,fn);
  s.free;
  ini.Free;
end;
Далее в обработчике OnClick каждой кнопки нужно прописать нечто на подобие этого:
Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
var ini:TIniFile;
     s:TStrings;
     fn:string;
begin
  ini:=TIniFile.Create('c:\123.ini');
  s:=TStringList.Create;
  ini.ReadSection('FileName',s);
  fn:=ini.ReadString('FileName',s.Strings[0],'');//s.Strings[0] - для первого файла; s.Strings[1] - для второго и т.д. в каждом обработчике кнопки свое число
    if (fn<>'') then
      ShellExecute(Handle, 'open',PChar(fn), nil, nil, SW_SHOWNORMAL);
  end;
  s.free;
  ini.Free;
end;
Вот как-то так... Все это можно было бы оптимизировать и сократить код, но лениво)))) Так что Вам придется прописать в каждой кнопке свой обработчик, хотя, если исхитриться, то можно пойти другим путем...

Так что либо так, либо делайте окно выбора нужного файла, и одну обрабатывающую кнопку, запускающую выбранное приложение...
Искусственный интеллект - фигня по сравнению с естественной глупостью

Последний раз редактировалось Impuls1989; 28.07.2010 в 21:21.
Impuls1989 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с текстовым файлом в Си Eovin Помощь студентам 0 19.05.2010 13:47
Поиск ключевого слова по текстовым файлам в заданной директории....помогите плиз N-tony Общие вопросы C/C++ 0 07.01.2010 14:46
Работа с текстовым файлом (delphi). Помогите доделать программу. Snord Помощь студентам 1 14.12.2007 14:10