Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 673

/ вопрос решён /

Доброго времени суток, уважаемые эксперты!У меня к Вам
следующий вопрос.Мне нужно что бы при клике кнопки и ctrl кнопку можно было связать с открытием определённого файла,ну то есть задать ей путь.А при следующем включении программы она должна быть уже связана с этим файлом.Путь я как и другие настройки собираюсь хранить в ini-файле.Да и ещё если файл будет удалён выдавать сообщение о несуществующем файле.А если надо будет перенастроить путь то тот же клик и ctrl.Очень прошу помочь с кодом.

GAZ Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: GAZ (статус: Посетитель)
Вопрос отправлен: 11 июня 2008, 08:42
Состояние вопроса: решён, ответов: 2.

Ответ #1. Отвечает эксперт: min@y™

Элементарно, Ватсон!
Я написал тут тебе примерчик, в котором (для примера, опять же) имя файла хранится в свойсве Hint той самой кнопки. Можно для удобства написать свой класс, унаследованный от TButton, в котором будет свойство FileName, сохранение/загрузка и готовая реакция на Ctrl+click, но у меня времени нету пока. Но если надо - обращайся.
К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 11 июня 2008, 09:20
Оценка за ответ: 5

Ответ #2. Отвечает эксперт: Вадим К

Здравствуйте, GAZ!
Судя с вашого вопроса, вы в курсе, как работать с ини файлами, поэтому эту часть затрагивать не буду.
Проверить, есть ли файл просто - есть такая функция FileExists
Применяется так

var myfile:string;
begin
//...
if not FileExists(myFile) then ShowMessage('Файла нет!');
Ну и попутно скажу о функции DirectoryExists, которая проверяет наличие заданой директории.

Теперь о первой половинке вопроса. Она сформулирована несколько размыто. Я так понимаю, вы хотите, что бы если просто нажали кнопку - выполнялось определённое действие, а если при нажатии кнопки был нажат Ctrl, то выполнить "привязывания к файлу".
var myFile:string;
 
//Функция проверяет состояние клавиши Ctrl в данный момент и возвращает true, если она нажата.
//заменяя vk_Control на vk_Shift, получаем функцию для проверки нажатия Shift. Для Alt - vk_Menu.
function CtrlDown : Boolean;
var
  State : TKeyboardState;
begin
  GetKeyboardState(State);
  Result := ((State[vk_Control] And 128) <> 0);
end;
 
procedure TMyForm.Button1Click(Sender:TObject);
begin
  if CtrlDown or not FileExists(myFile) then 
    begin
      if OpenDialog1.execute
        then myFile := OpenDialog1.filename;
    end
  else
    begin
      //Ctrl не нажат и файл есть, можно выполнять какое-нибуть действие. Например загрузить текст в мемо
      Memo1.Lines.loadfromfile(myfile);
    end;
end;

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 11 июня 2008, 09:35
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 11; последнее сообщение — 19 июня 2008, 08:22; участников в обсуждении: 3.
GAZ

GAZ (статус: Посетитель), 11 июня 2008, 09:46 [#1]:

Мне не надо загружать файлы в Memo,просто их открыть, у них может быть разное расширение,могут быть и медиа файлы
Вадим К

Вадим К (статус: Академик), 11 июня 2008, 22:27 [#2]:

Я для примера. А как вы там напишите - ваше дело.
Галочка "подтверждения прочтения" - вселенское зло.
GAZ

GAZ (статус: Посетитель), 13 июня 2008, 14:33 [#3]:

min@y™
Спасибо большое за пример единственное объясните для чего нужен XPManifest. Я с ним не разу не сталкиванся и вообще не знаю его назначение.
min@y™

min@y™ (статус: Доктор наук), 16 июня 2008, 08:10 [#4]:

XPManifest нужен для придания компонентам вида Windows XP. Я его просто всегда кладу на главную форму, не задумываясь.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Вадим К

Вадим К (статус: Академик), 16 июня 2008, 18:07 [#5]:

to min@y™
Не совсем корректное объяснение. Этот копмпонент просто провоцирует Делфи, что бы она добавила юнит XPMan в список uses текущего юнита. А основной задачей этого юнита есть добавление в ресурсы манифеста. А при запуске приложения загрузчик приложений windows смотрит в этот манифест и подключает нужные библиотеки.
А что бы убедиться в глупости вашего высказывания, достаточно запустить это приложение на Win2000. Никакого XP вида не будет.

З.Ы. И уберите наконец свой аморальный аватар! Смотреть противно.
Галочка "подтверждения прочтения" - вселенское зло.
min@y™

min@y™ (статус: Доктор наук), 17 июня 2008, 08:18 [#6]:

2 Вадим К:
Естественно, я всё это знаю, просто писать лень было.
То, что несовсем корректно, это да, прошу прощения. Я имел в виду, что он нужен для придания компонентам вида Windows XP (конкретной темы) именно в windows XP/2003.
Ещё можно было добавить, что манифест можно положить рядом с экзешником - отдельным файлом.

Цитата:

И уберите наконец свой аморальный аватар! Смотреть противно.


Чем не угодил мой аватар? Я им 8 лет уже пользуюсь. Всего лишь набор пикселов...
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
GAZ

GAZ (статус: Посетитель), 17 июня 2008, 20:08 [#7]:

min@y™
...Ещё можно было добавить, что манифест можно положить рядом с экзешником - отдельным файлом.

Компонент рядом отдельным файлом это как?
Вадим К

Вадим К (статус: Академик), 18 июня 2008, 03:14 [#8]:

to min@y™
Я прекрасно могу прочитать там не очень красивое слово с 3 букв или у вас есть другие варианты прочтения, которые бы несли что то прекрасное, доброе?

to GAZ
Нет, компонент не надо ложить рядом с файлом. просто формируется текстовый файл с именем имяпроги.exe.manifest (поищите у себя в Program Files подобные файлы и откройте блокнотом. Реально внутри надо только в двух строках менять и всё.)
Галочка "подтверждения прочтения" - вселенское зло.
min@y™

min@y™ (статус: Доктор наук), 18 июня 2008, 08:26 [#9]:

Цитата:

...или у вас есть другие варианты прочтения, которые бы несли что то прекрасное, доброе?


ИМХО, аватар и не должен нести что-то прекрасное и доброе, ибо это просто идентификатор. Но мне мой аватар нравится, улыбает он.
Давайте закроем эту бесполезную дискуссию.

Цитата:

Нет, компонент не надо ложить рядом с файлом. просто формируется текстовый файл с именем имяпроги.exe.manifest (поищите у себя в Program Files подобные файлы и откройте блокнотом. Реально внутри надо только в двух строках менять и всё.)


Множество программ не имеют манифеста и выглядят в WIndows XP в классическом виде. Я даже когда-то написал прогу "Manifest maker" для создания файлов манифестов для таких программ.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Вадим К

Вадим К (статус: Академик), 18 июня 2008, 11:47 [#10]:

to min@y™:
Вот как о сути аватарки говорит википедия
"Может быть как фотографией, так и некой картинкой, которая отражает суть пользователя и помогает максимально правильно создать первое впечатление у собеседника."
Мне искренне жаль вас, что у вас такая низкая самооценка
Галочка "подтверждения прочтения" - вселенское зло.
min@y™

min@y™ (статус: Доктор наук), 19 июня 2008, 08:22 [#11]:

Цитата:

Вот как о сути аватарки говорит википедия...


Библию, камасутру и википедию писали люди, у КАЖДОГО из которых есть своё субъективное мнение.

Цитата:

Мне искренне жаль вас, что у вас такая низкая самооценка


Я не поддамся на эту провокацию и не буду продолжать этот оффтопик. Надоело и жалко траффик.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

31 января 2011, 19:31: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 16 ноября 2024, 22:56
Выполнено за 0.03 сек.