Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Delphy(3 вопросов), программистские прибанбассы 
:(
    Опции темы
korsar143
Дата 12.7.2008, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 12.7.2008

Репутация: нет
Всего: нет



кто знает как компоненту main menu настраивать графику ,цвет , фон , размер шрифта кнопок ?
этот же размер к button шрифт поменять можно, а фон нельзя ?

и ещё вопрос:как открыть диалоговое окно похожее на то которое возникает, когда для окна,появившегося после нажатия свойства Picture для компонента image, в инспекторе объектов нажать load?
в моём случае диалоговое окно только для указания пути к фаилу
 
и ещё вопрос:WinExec тогда как ей указывать правильно параметры.
в моём случае я хочу запускать ей фаилы exe ,а mp3 обычным проигрывателем, которые будут находится соответственно в каталоговом фаиле с программой. соответествеенно пути extractfilepath(paramstr(0))+

ShellExecute (Form1.Handle,nil,'intro.mp3',nil,nil,SW_RESTORE);
вот пример её работы , т. е запуск мп3 фаила, но в этом варианте я не могу изначально указать что запускать. т.е запуск определяется кодом.

ShellExecute (Form1.Handle,nil,STR,nil,nil,SW_RESTORE); где STR:String ругается

[Fatal Error] Project1.dpr(6): Could not compile used unit 'Unit1.pas'
[Error] Unit1.pas(108): Incompatible types: 'Char' and 'PAnsiChar'

очень жду ответов опытных программистов

 smile 
PM MAIL   Вверх
Alkash
Дата 12.7.2008, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


коллекционер жизни
**


Профиль
Группа: Участник
Сообщений: 516
Регистрация: 5.7.2004
Где: /

Репутация: нет
Всего: нет



1 вопрос - 1 тема. И вопросы более конкретизировать.


--------------------
Подпись >> /dev/null
PM MAIL ICQ MSN   Вверх
Riply
Дата 12.7.2008, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

Репутация: 21
Всего: 32



Цитата(korsar143 @  12.7.2008,  18:03 Найти цитируемый пост)
очень жду ответов опытных программистов


А не очень опытным можно ?  smile 

Для начала, узнать как правильно пишется имя среды.
Далее, поиском (например, на этом форуме) найти какие книги советуют начинающим.
Внимательно прочитать их.
Если вопросы не исчезнут, то переформулировать их в свете новых знаний и задать снова.

Это сообщение отредактировал(а) Riply - 12.7.2008, 21:34
PM MAIL   Вверх
Letov
Дата 13.7.2008, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 321
Регистрация: 22.2.2007
Где: Санкт-Петербург

Репутация: нет
Всего: 4



Цитата(korsar143 @  12.7.2008,  19:03 Найти цитируемый пост)
и ещё вопрос:как открыть диалоговое окно похожее на то которое возникает, когда для окна,появившегося после нажатия свойства Picture для компонента image, в инспекторе объектов нажать load?в моём случае диалоговое окно только для указания пути к фаилу


Стандартный компонент TOpenPictureDialog со вкладки Dialogs.


Цитата(korsar143 @  12.7.2008,  19:03 Найти цитируемый пост)
ShellExecute (Form1.Handle,nil,'intro.mp3',nil,nil,SW_RESTORE);вот пример её работы , т. е запуск мп3 фаила, но в этом варианте я не могу изначально указать что запускать. т.е запуск определяется кодом.ShellExecute (Form1.Handle,nil,STR,nil,nil,SW_RESTORE); где STR:String ругается


Правильно ругается. Там должен быть не string, а PAnsiChar.
Попробуй так
Код
ShellExecute (Form1.Handle,nil,PAnsiChar(STR),nil,nil,SW_RESTORE);


Вот еще материал по ShellExecute и WinExec из DRKB
Код

Устройство Windows. Процессы, потоки и функции ShellExecute и WinExec. Часть 1.
    По просьбам общественности и была написана эта статья.
Действительно невозможно профессионально разрабатывать многопоточные программы,
не зная, что такое процессы, потоки, нити и синхронизация (надеюсь посвятить этому одну из следующих статей) и, 
не представляя, как они работают. В статье за основу взята операционная система Windows 2000.
Так же в этой статье будут подробно рассмотрены различные методы запуска новых процессов (программ).
    Главным обстоятельством является то, что почти все современные ОС многозадачны.
ОС Windows 2000 не является исключением, в ней может работать одновременно несколько программ. 
Любая программы имеет, по крайней мере, одним программным потоком, 
который в свою очередь может создавать еще несколько потоков и т.д.
Но, не смотря на то, что ОС, называется "многозадачной" в конкретный момент времени
выполняется только один поток. что вы не замечаете, как ОС переключается между потоками.
Не стоит забывать, что, распределяя процессорное время, операционная система Windows,
имеет дело именно с потоками, а не с процессами, которым эти потоки принадлежат.
    Запуская программу в Windows, вы создаете процесс.
И в этом нет ничего удивительного, потому что в других операционных системах происходит почти то же самое.
Однако все же процесс в Windows, например, отличается от процесса в Unix.
А все дело в том, что в Windows процесс владеет открытыми файлами, оперативной памятью и другими ресурсами. 
Для каждого процесса (программы) Windows выделяет виртуальное адресное пространство объемом 2 Гб.
Для адресации этого пространства используются обычные 32-битные указатели,
которые представляют собой числа от 0 до 2 Г. Но процесс в Windows не исполняется.
Исполняется программный поток. Поток - это последовательность машинных команд, которые Windows
воспринимает, как единое целое (набор регистров процессора).
Поток обладает указателем на команду, которая в данный момент выполняется,
и указателем на стек где хранятся локальные переменные потока.
Так в чем же разница спросите вы, между процессом и потоком, если запущенная программа имеет только один, 
программный поток то разницы практически никакой. Однако поток может создавать другие потоки.
А те потоки могут создавать еще потоки. Два процесса ни могут иметь общие ресурсы,
если не используют специальные механизмы межпроцессорного взаимодействия.
В противоположность этому все потоки, которые принадлежат одному процессу,
имею доступ ко всем ресурсам этого процесса.
    Зачем процессу несколько потоков? Потоки могут выполнять какие-то действия параллельно 
основной программе (в фоновом режиме). Потоки удобно применять, если нежелательна
блокировка основной программы определенной функцией. Например, в то время, как поток
осуществляет сложные математические вычисления, в главной программе происходит подготовка 
следующего задания и ввод параметров.
    Если вам нужно запустить новую программу, вам нужно создать новый процесс.
Для этой цели служит системный вызов CreateProcess.
Однако использование этого вызова не очень удобно, потому что приходится задавать множество аргументов,
однако в некоторых случаях без него не обойтись. 
Если же вам надо просто запустить программу или открыть файл, 
то для этого подходят мене сложные вызовы.
    Легче всего использовать WinExec. Однако Microsoft не рекомендует его использование, 
а предлагает пользоваться CreateProcess.
Но для выполнения тех или иных задач он вполне подходит. 
Почему же нежелателен вызов WinExec дело все в том, что фактически он содержит обращение
к еще одному устаревшему системному вызову LoadModule, который обращается к CreateProcess
со значениями аргументов по умолчанию. При обращении к WinExec необходимо задать полный путь 
к программе или имя EXE файла, расположенного в пути поиска, а также способ
отображения программы (константы SW_HIDE, SW_SHOW и т.д. см. Таблица 2). 
    Если вызов функции произошел успешно, то WinExec вернет дескриптор новой
программы (который не может быть меньше 32, т.е. если WinExec возвращает число меньше 32, 
то вызов привел к ошибке, коды ошибок см. Таблица 1). 

Таблица 1.

0 Системе не хватает ресурсов. 
ERROR_BAD_FORMAT Некорректный EXE файл (не Win32 EXE файл или EXE файл поврежден). 
ERROR_FILE_NOT_FOUND Указанный файл не найден. 
ERROR_PATH_NOT_FOUND Указанный путь не найден.  

    Еще один простой вызов это - ShellExecute. Этот вызов во многом напоминает WinExec,
однако он поддерживает обработку типов файлов, зарегистрированных в Windows. 
Например, если вы с помощью ShellExecute вы попробуете запустить файл с расширением .BMP,
то буде запущена программа Paint или любая другая, которая использует для просмотра графических файлов.
В качестве аргументов ShellExecute принимает дескриптор окна (если есть необходимость в сообщениях об ошибках), 
строку, такую как open (открыть), print (напечатать) и explore (исследовать), можно в качестве этой строки передать NULL, 
тогда файл указанный вами будет открыт (open). Так же ShellExecute необходимо сообщить имя файла и любые параметры
командной строки (чаще всего NULL), и оставшиеся два аргумента это текущий каталог и константа функции
ShowWindow (как и в WinExec см. Таблица 2). 

Таблица 2.

 

SW_HIDE Окно в скрытом режиме. 
SW_MAXIMIZE Окно максимального размера 
SW_MINIMIZE Окно находится в свернутом виде, активируется следующее верхнее окно в Z последовательности. 
SW_RESTORE Активирует и показывает окно. Если окно свернуто или развернуто, Windows восстанавливает его
к первоначальному размеру и позиции. Приложение должно определить этот флаг при восстановлении свернутого окна. 
SW_SHOW Активирует окно и выводит его в текущих размерах и позиции. 
SW_SHOWMAXIMIZED Активирует и показывает окно в развернутом виде. 
SW_SHOWMINIMIZED Активирует и показывает окно в свернутом виде. 
SW_SHOWMINNOACTIVE Отображает окно в свернутом виде. Активное окно остается активным. 
SW_SHOWNA Отображает окно в текущем состоянии. Активное окно остается активным. 
SW_SHOWNORMAL Активирует и показывает окно. Если окно свернуто или развернуто,
Windows восстанавливает его к первоначальному размеру и позиции.
Приложение должно определить этот флаг при показе окна в первый раз.  

    Значение, которое возвращает ShellExecute такое же, как и у WinExec. Функцию ShellExecute можно использовать,
например, для открытия корневого каталога диска С: 

ShellExecute(hWnd, 'open', 'c:\', nil, nil, SW_SHOWNORMAL);

    Вы можете заменить строку "open" на "explore" и в качестве третьего параметра указать любой каталог,
в этом случае указанная вами папка откроется в Проводнике (Explorer).
    Так же существует системный вызов ShellExecuteEx, который фактически является полным аналогом
ShellExecute, однако в качестве аргумента он принимает указатель на структуру, поля которой во многом
совпадают с аргументами ShellExecute. Кроме этого после завершения своей работы ShellExecuteEx помещает
в одно из полей этой структуры дескриптор запущенной программы.
    Применение этих вызовов довольно просто. Пример программы использующей WinExec и ShellExecute 
приведен в листинге 1. 

Листинг 1.

Code: 
Код

uses ShellAPI;
…
var
h: hwnd;
begin
// Используем ShellExecute
if ShellExecute(h, 'open', 'readme.txt', nil, nil, SW_SHOW) < 32 then
   begin
     ShowMessage('Немогу выполнить ShellExecute !')
   end;
// Используем WinExec
if WinExec('Notepad c:\config.sys', SW_SHOW) < 32 then
   begin
     ShowMessage('Немогу выполнить WinExec !')
   end;
end; 


©Drkb::02145



Вот ответы на некоторые вопросы.
Но, я полностью согласен с Riply, 
Цитата(Riply @  12.7.2008,  22:33 Найти цитируемый пост)
Далее, поиском (например, на этом форуме) найти какие книги советуют начинающим.Внимательно прочитать их.Если вопросы не исчезнут, то переформулировать их в свете новых знаний и задать снова.

Да, есть и справочные системы, например DRKB. Там есть много полезной информации.


--------------------
Не бывает плохих языков программирования. Бывают плохие программисты...

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0465 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.