Вопрос № 105314: Добрый день!
Помогите разобраться с проблемой. Не могу получить в виде строки параметр из реестра: RegPath := 'HARDWAREDESCRIPTIONSystem'; rootkey := HKEY_LOCAL_MACHINE; 'SystemBiosVersion' Нашел подходящую процедуру (см. приложение), но при п...Вопрос № 105360: Здравствуйте,уважаемые эксперты!
Как заставить мою программу сворачиваться в трей? Я использую стандартный компонент TTrayicon, собственно, нужно, чтобы при сворачивании окна убиралась кнопка с панели задач. Как это сделать?...Вопрос № 105371: Добрый день, уважаемые эксперты.
Подскажите, пожалуйста, фрагмент дельфийского кода, позволяющего откыть определенный файл с помощью какой-либо программы.
Например, файл music1.mp3 с помощью WinAmp или page1.html с помощью Intrnet Explrer. Во...
Вопрос № 105.314
Добрый день!
Помогите разобраться с проблемой. Не могу получить в виде строки параметр из реестра: RegPath := 'HARDWAREDESCRIPTIONSystem'; rootkey := HKEY_LOCAL_MACHINE; 'SystemBiosVersion' Нашел подходящую процедуру (см. приложение), но при попытке вывести информации выходит ошибка: Invalid Data type For 'SystemBoardVersion'
Приложение:
Отправлен: 13.10.2007, 15:53
Вопрос задал: Alex446 (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Gh0stik
Здравствуйте, Alex446!
Да действительно, ошибка имеет место быть. Я немного переделал код Вашей функции и все сразу заработало (произведенные изменения выделены цветом):
function ReadMultirowKey(reg: TRegistry; Key: string): TStrings;
{const bufsize = 100;} // у нас зарание не извесен размер структуры, поэтому не следут задавать его в константах, да и строка у нас в принципе то ограничена 255 символами.
var
i,bufsize: integer;
s1: string;
sl: TStringList; bin: array[0..255] of char;
begin
try
result := nil;
sl := nil;
sl := TStringList.Create;
if not Assigned(reg) then
raise Exception.Create('TRegistry object not assigned.');
// FillChar(bin, bufsize, #0); - эту конструкцию заменил другой, смотрите следующую строку. bufsize:=reg.GetDataSize(Key);
reg.ReadBinaryData(Key, bin, bufsize); i := 0;
s1 := '';
while i < bufsize do
begin
if ord(bin[i]) >= 32 then
s1 := s1 + bin[i]
else
begin
if Length(s1) > 0 then
begin
sl.Add(s1);
s1 := '';
end;
end;
inc(i);
end;
result := sl;
except
sl.Free;
raise;
end;
end;
Good Luck!!!
Приложение:
--------- Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Профессор) Украина, Славянск Организация: Славянский государственный педагогический университет (Кафедра алгебры) ICQ: 289363162 ---- Ответ отправлен: 13.10.2007, 17:27 Оценка за ответ: 5 Комментарий оценки: Спасибо, все действительно нормально заработало. Просто у программы не хватало размера буфера в 100 байт. Стоило его увеличить и все сразу нормально заработало. И строка bufsize:=reg.GetDataSize(Key);
определяет необходимый размер, это конечно более правильно, чем просто задать размер буфера в 100 байт.
Вопрос № 105.360
Здравствуйте,уважаемые эксперты!
Как заставить мою программу сворачиваться в трей? Я использую стандартный компонент TTrayicon, собственно, нужно, чтобы при сворачивании окна убиралась кнопка с панели задач. Как это сделать?
Отправлен: 13.10.2007, 22:28
Вопрос задал: Megalamer (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 1)
В событии, например, TForm1.FormShow(Sender: TObject) пишем строку:
ShowWindow(Application.Handle, SW_Hide);
Удачи.
--------- Carpe diem!
Ответ отправил: Проходящий Мимо (статус: 9-ый класс)
Ответ отправлен: 15.10.2007, 09:50 Оценка за ответ: 2 Комментарий оценки: Даже не знаю. Кнопка будет убираться когда окно покажется, надо наооборот
необходимо обрабатывать сообщение, когда окно деактивируется.
procedure TForm1.FormDeactivate(Sender: TObject);
begin
showwindow(application.Handle,0);
end;
Тогда кнопка исчезает. и появляется при восстановлении окна.
procedure TForm1.TrayIcon1Click(Sender: TObject);
var r:trect;
begin
if not IsWindowVisible(Form1.Handle) then begin
showwindow(application.Handle,SW_RESTORE);
windows.GetWindowRect(bingochat.Handle,r);
setwindowpos(bingochat.Handle,HWND_TOP,r.TopLeft.X,r.TopLeft.Y,0,0,swp_nosize or SWP_SHOWWINDOW or SWP_NOSENDCHANGING);
application.BringToFront;
bingochat.Repaint;
end;end;
Восстанавливаем окно на прежнее место.
Но здесь есть существенный недостаток, если окно деактивизируется без сворачивания, то кнопка тоже исчезает.
Необходимо найти АЛГОРИТМ обработки событий.
Вопрос № 105.371
Добрый день, уважаемые эксперты.
Подскажите, пожалуйста, фрагмент дельфийского кода, позволяющего откыть определенный файл с помощью какой-либо программы.
Например, файл music1.mp3 с помощью WinAmp или page1.html с помощью Intrnet Explrer. Возможны ли какие-либо программы по умолчанию, изначально понятные системе для файлов с определенным расширением.
Заранее благодарен.
----
С уважением, Владимир.
Для данных действий Вам поможет ShellExecute(). Вот строки используя которые Вы сможите запустить выше перечисленные приложения: ...
ShellExecute(Handle,nil,'C:Program FilesInternet ExplorerIEXPLORE.EXE','c:page1.html',nil,SW_SHOWNORMAL); //запускаем Internet Explorer в качестве параметра у него выступает нужный файл
// ShellExecute(Handle,nil,'C:Program FilesWinampwinamp.exe','c:AudioA-HA.mp3',nil,SW_SHOWNORMAL); //аналогично для WinAmp-a
...
Только не забудте подключить модуть ShellApi (uses shellApi).
Замечание: Для корректной работы необходимо указывать ПОЛНЫЕ именя файлов и программ (полный путь к программе или файлу с указанием каталога расположения).
Good Luck!!!
--------- Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Профессор) Украина, Славянск Организация: Славянский государственный педагогический университет (Кафедра алгебры) ICQ: 289363162 ---- Ответ отправлен: 14.10.2007, 01:16 Оценка за ответ: 5
Отвечает: Владик
Здравствуйте, Аверьянов Владимир!
//Запускаеться проигрователь по умолчанию и проигровает аудио файл
ShellExecute(Handle,'open','Путь к аудио файлу',nil,nil,SW_RESTORE);
Ответ отправил: Владик (статус: 1-ый класс)
Ответ отправлен: 14.10.2007, 08:39
Отвечает: PM_pilot
Здравствуйте, Аверьянов Владимир!
Для этих целей используется функция ShellExecute например так:
Shellexecute(handle, 'Open', 'Rundll32.exe', 'shell32.dll,Control_RunDLL TIMEDATE.CPL', Pchar(Getsystemdir), 0); - пример взят здесь - www.drkb.ru
Ответ отправил: PM_pilot (статус: 1-ый класс)
Ответ отправлен: 15.10.2007, 18:10 Оценка за ответ: 5