|
Вопрос # 1 673/ вопрос решён / |
|
Доброго времени суток, уважаемые эксперты!У меня к Вам
следующий вопрос.Мне нужно что бы при клике кнопки и ctrl кнопку можно было связать с открытием определённого файла,ну то есть задать ей путь.А при следующем включении программы она должна быть уже связана с этим файлом.Путь я как и другие настройки собираюсь хранить в ini-файле.Да и ещё если файл будет удалён выдавать сообщение о несуществующем файле.А если надо будет перенастроить путь то тот же клик и ctrl.Очень прошу помочь с кодом.
|
Вопрос задал: 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 (статус: Посетитель), 11 июня 2008, 09:46 [#1]:
Мне не надо загружать файлы в Memo,просто их открыть, у них может быть разное расширение,могут быть и медиа файлы
|
|
Вадим К (статус: Академик), 11 июня 2008, 22:27 [#2]:
Я для примера. А как вы там напишите - ваше дело.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
GAZ (статус: Посетитель), 13 июня 2008, 14:33 [#3]:
min@y™
Спасибо большое за пример единственное объясните для чего нужен XPManifest. Я с ним не разу не сталкиванся и вообще не знаю его назначение.
|
|
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™ (статус: Доктор наук), 17 июня 2008, 08:18 [#6]:
2 Вадим К:
Естественно, я всё это знаю, просто писать лень было.
То, что несовсем корректно, это да, прошу прощения. Я имел в виду, что он нужен для придания компонентам вида Windows XP (конкретной темы) именно в windows XP/2003.
Ещё можно было добавить, что манифест можно положить рядом с экзешником - отдельным файлом.
Цитата:
И уберите наконец свой аморальный аватар! Смотреть противно.
Чем не угодил мой аватар? Я им 8 лет уже пользуюсь. Всего лишь набор пикселов...
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
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™ (статус: Доктор наук), 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™ (статус: Доктор наук), 19 июня 2008, 08:22 [#11]:
Цитата:
Вот как о сути аватарки говорит википедия...
Библию, камасутру и википедию писали люди, у КАЖДОГО из которых есть своё субъективное мнение.
Цитата:
Мне искренне жаль вас, что у вас такая низкая самооценка
Я не поддамся на эту провокацию и не буду продолжать этот оффтопик. Надоело и жалко траффик.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
31 января 2011, 19:31: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|