RusFAQ.ru: Программирование на Delphi
Информационный Канал Subscribe.Ru |
/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi
Выпуск № 167
от 30.06.2005, 00:20
Администратор: | Калашников О.А. |
В номере: | Вопросов: 10, Ответов: 40 |
Вопрос № 22572: Приветствую. Столкнулся с нехорошей вещью. Надо получить снимок экрана. Все вроде бы просто… Делаешь GetDC(HWND_DESKTOP), а потом через BitBlt копируешь в Bitmap. Вот теперь есть НО!!! Если в WinXP есть окна с установленной прозрачностью, то они не к...
Вопрос № 22573: Здраствуйте. У меня простой вопрос, как сделать чтобы програма автоматически запускалась при запуске windows'a то есть записалась бы в startup? Заранее спасибо....
Вопрос № 22574: Здраствуйте эксперты! Вот тут в чем фишка. Есть на форме лабель и кнопка. По нажатию на кнопку кэпшем метки должна меняется ну например на 'ДУМАЮ'. После чего кнопка исчезает. Через какое-то время кэпшен метки становится ну например "УРА" и...
Вопрос № 22587: Добрый день! 1. Как объявить свойства, которое может использоваться для разрешенияили запрета_импорта_каких-либо_данных_в_компонент. 2. Иерархия методов перемещаемых геометрических фигур. 3.Из текстового файла_считать_попарно_вещественные...
Вопрос № 22589: Как подключить к своей программе персонажа-ассистента из Microsoft Office и сделать его говорящей энциклопедией, наподобие как это реализовано в Magic Goody?...
Вопрос № 22591: Я пишу игру. Мне нужно: чтобы через DirectX игра переходила в полноэкранный режим с разрешением 800 на 600...
Вопрос № 22593: Здраствуй народ. Работаю под W2000 в Delphi 7. Вопрос таков: как мне узнать в что прописано в винеде в настройке "Языки и стандарты", в частности меня интересует "Разделитель целой и дробной части числа". Если в других виндах реше...
Вопрос № 22606: Привет всем! Можно ли как-то определить, установлены ли пакеты обновлений SP1/SP2 в Windows или нет?...
Вопрос № 22618: Здраствуйте уважаемые Эксперты, я только учусь програмированию и возник вопрос: я скачал компонент TDFAniCursor и как мне сделать чтобы я мог им пользоватся - скопировать его куда илм еще что??? Заранее спасибо....
Вопрос № 22620: Добрый вечер. Подскажите с помощью какого компонента создается таблица вида: Товары/Кол-во/Перевозка/Приемка/Наценка Товары буду всегда постоянные С возможностью как в Excel автовыпадающий список Нажал к примеру "+&...
Вопрос № 22.572 |
Приветствую. Столкнулся с нехорошей вещью. Надо получить снимок экрана. Все вроде бы просто… Делаешь GetDC(HWND_DESKTOP), а потом через BitBlt копируешь в Bitmap. Вот теперь есть НО!!! Если в WinXP есть окна с установленной прозрачностью, то они не копируются. А надо, чтобы копировались. Когда нажимаешь PrintScreen, то копируются и все окна с прозрачностью. HyperSnap-DX Version 5.61.00 тоже копирует все, что надо со всеми прозрачными окнами. А как, программно, не портя содержимое Clipboard. Подскажите, как
это можно реализовать. Заранее благодарю. |
Отправлен: 24.06.2005, 00:19 Вопрос задал: Прищепа Александр Владимирович (статус: Посетитель) Всего ответов отправлено: 2 |
Отвечает: Gin Здравствуйте, Александр Владимирович! Вопрос в это направление уже был, но непомю номер. Посмотрите в приложении статья, взмжно поможет. С Уважением, Gin. Приложение: |
Ответ отправил: Gin (статус: 10-ый класс) Отправлен: 24.06.2005, 08:42 Оценка за ответ: 2 Комментарий оценки: Не поможет, те же яйца, только сбоку и много лишнего кода... |
Отвечает: sir henry Здравствуйте, Прищепа Александр Владимирович! Попробуйте функцию, которая приведена в приложении. Взято с сайта DelphiWorld, сам не испытывал. :) Приложение: |
Ответ отправил: sir henry (статус: Профессор) Отправлен: 24.06.2005, 12:47 Оценка за ответ: 2 Комментарий оценки: Абсолютно тот-же вариант, что и я предлагал, только больше кода. Вот, что я из нее сделал, результат одинаковый: прозрачных окон нет. procedure TForm1.GrabScreen; var DeskTopDC: HDc; begin DeskTopDC := GetWindowDC(GetDeskTopWindow); StretchBlt(Canvas.Handle,0,0,ClientWidth,ClientHeight,DeskTopDC,0,0,Screen.Width,Screen.Height,SRCCOPY); ReleaseDC(GetDeskTopWindow, DeskTopDC); end; |
Вопрос № 22.573 |
Здраствуйте. У меня простой вопрос, как сделать чтобы програма автоматически запускалась при запуске windows'a то есть записалась бы в startup? Заранее спасибо. |
Отправлен: 24.06.2005, 00:30 Вопрос задал: Staskin (статус: Посетитель) Всего ответов отправлено: 10 |
Отвечает: John Freeman Здравствуйте, Staskin! Как ни странно - писать её туда самому через что хочешь, самый простой способ - TRegistry . ключ HKLM\Software\Microsoft\Windows\CurrentVersion\Run Новый строковой параметр, имя - любой, значений - application.exename или paramstr(0); --------- Я ведь не злопамятный... я записываю. |
Ответ отправил: John Freeman (статус: Профессор) Отправлен: 24.06.2005, 00:50 Оценка за ответ: 4 |
Отвечает: Malish Здравствуйте, Staskin! Для того, чтобы добавить программу в автозапуск, нам необходимо будет добавить некоторые записи в соответствующий раздел реестра. var reg: TRegistry; begin reg := TRegistry.Create; reg.RootKey := HKEY_LOCAL_MACHINE; reg.LazyWrite := false; reg.OpenKey('SoftwareMicrosoftWindowsCurrentVersionRun', false); reg.WriteString('My program', Application.ExeName); {вместо My Program можно и что-нибудь другое вставить} reg.CloseKey; reg.free; end; |
Ответ отправил: Malish (статус: Студент) Отправлен: 24.06.2005, 00:58 Оценка за ответ: 5 |
Отвечает: nimoid Здравствуйте, Staskin! Либо добавляй ярлык в автозапуск, либо прописывай путь к проге в ключе реестра HKLMSoftwareMicrosoftWindowsCurrentVersionRun |
Ответ отправил: nimoid (статус: 3-ий класс) Отправлен: 24.06.2005, 00:59 Оценка за ответ: 4 |
Отвечает: Gin Здравствуйте, Staskin! Это можно сделать несколькими способами, но наиболее оптимальный - занесение файла в автозапуск реестра, который находится по следующему адресу: HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRun uses Registry; procedure TForm1.FormCreate(Sender: TObject); var // Переменная реестра h: TRegistry; begin h := TRegistry.Create; with h do begin RootKey := HKEY_LOCAL_MACHINE; OpenKey('SoftwareMicrosoftWindowsCurrentVersionRun', true); WriteString('DelphiWorldApp', 'C:Application.exe'); CloseKey; Free; end; end; С Уважением, Gin. |
Ответ отправил: Gin (статус: 10-ый класс) Отправлен: 24.06.2005, 08:43 |
Отвечает: Denisss Здравствуйте, Staskin! Из одного своего модуля выдрал функцию, позволяющую добавлять программу в автозапуск Windows® (см. приложение) Приложение: |
Ответ отправил: Denisss (статус: 7-ой класс) Отправлен: 24.06.2005, 09:21 Оценка за ответ: 5 |
Отвечает: Ерёмин Андрей Здравствуйте, Staskin! Вот элементарная функция добавления программы в автозагрузку через реестр. Пример вызова: AddToWindowsAutoStart('notepad','C:Windows otepad.exe'); Приложение: |
Ответ отправил: Ерёмин Андрей (статус: 10-ый класс) Отправлен: 24.06.2005, 09:28 Оценка за ответ: 5 |
Отвечает: Voituk Alexander Здравствуйте, Staskin! Прописать ее в реестр в этот ключ HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun и прога будет запускаться каждый раз. А если прописать сюда, то запуститься только один раз. HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRunOnce |
Ответ отправил: Voituk Alexander (статус: 8-ой класс) Отправлен: 24.06.2005, 11:33 |
Отвечает: sir henry Здравствуйте, Staskin! - Поместить ярлык программы в папку "StartUp"("Автозагрузка") - Поместить строку запуска программы в реестр в: HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRun Это несколько разные по своему поведению вещи. Первый пункт предназначен, в основном, для того, чтобы программа запускалась под каким-либо определенным пользователем, либо происходил запуск программы с открытием какого-либо ее окна. Второй пункт, в основном, предназначен для запуска программ без графического интерфейса. Хотя никто не возбраняет Вам засунуть туда что угодно. :) Однако это нецелесообразно с точки зрения безопасности системы и делать это лучше не надо (по крайней мере, пока Вы не начали писать какие-нибудь утилиты для ОС, без которых, как Вы считаете, ей каюк придет). |
Ответ отправил: sir henry (статус: Профессор) Отправлен: 24.06.2005, 13:05 Оценка за ответ: 4 |
Отвечает: Jadd Здравствуйте, Staskin! Здесь был уже такой вопрос. Я отвечал на него. Поищи среди вопросов. --------- Если в сердце дверь закрыта, нужно в печень постучаться |
Ответ отправил: Jadd (статус: Студент) Отправлен: 24.06.2005, 22:44 |
Отвечает: Delphin Здравствуйте, Staskin! Записать в автозагрузку можно сделав запись в ключе: HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRun Приложение: |
Ответ отправил: Delphin (статус: 6-ой класс) Отправлен: 28.06.2005, 17:52 |
Вопрос № 22.574 |
Здраствуйте эксперты! Вот тут в чем фишка. Есть на форме лабель и кнопка. По нажатию на кнопку кэпшем метки должна меняется ну например на 'ДУМАЮ'. После чего кнопка исчезает. Через какое-то время кэпшен метки становится ну например "УРА" и кнопка появляется. Использую sleep(1000). Но происходит следующее: по нажатию на кнопку лабель пропадает, а через время появляется и кнопка и лабель с надписью "УРА". Это баг? Или я глючю? Или это связанно со sleep??? Используя таймер все идет как надо.
Кстати пропадает и Shape на котором лабель.
Приложение: |
Отправлен: 24.06.2005, 00:40 Вопрос задал: svsrus (статус: Посетитель) Всего ответов отправлено: 8 |
Отвечает: John Freeman Здравствуйте, svsrus! Да, всё верно, sleep замораживает текущий поток, у формы вообще говоря в VCL один поток, поэтому за этот sleep не перерисовывается просто, а не перерисовывается потому, что ждёт возврата из button1click У таймера вообще говоря не совсем, но свой поток, поэтому такого не происходит, можешь сделать так сам через SetTimer... --------- Я ведь не злопамятный... я записываю. |
Ответ отправил: John Freeman (статус: Профессор) Отправлен: 24.06.2005, 00:53 Оценка за ответ: 5 Комментарий оценки: Спасибо за оперативность. А нет ли в Дельфях 7 аналога Delay? Помню вроде в 3 или 4 Делфи такое было, но вроде какой-то модуль надо было подключать |
Отвечает: nimoid Здравствуйте, svsrus! procedure TForm1.Button1Click(Sender: TObject); begin Label1.Caption:='Думаю....'; Button1.Visible:=False; Application.ProcessMessages(); Sleep(1000); Label1.Caption:='УРА додумался'; Button1.Visible:=True; end; |
Ответ отправил: nimoid (статус: 3-ий класс) Отправлен: 24.06.2005, 00:55 Оценка за ответ: 5 Комментарий оценки: Просто спасибо!!! Выручил!!! |
Отвечает: Malish Здравствуйте, svsrus! Исправь на такое Label1.Caption:='Думаю....'; Button1.Visible:=False; Label1.Update; //!!!!!!!!!!!!!!!!!!!!!!!!!!! Sleep(3000); Label1.Caption:='УРА додумался'; Button1.Visible:=True; |
Ответ отправил: Malish (статус: Студент) Отправлен: 24.06.2005, 01:04 |
Отвечает: Denisss Здравствуйте, svsrus! Как Вы уже поняли, при использовании Sleep, форма просто не обрабатывает событие переотрисовки. Но(!) увидел одну небольшую мелочь, в отмеченном Вами сообщении: дело в том, что там встретился следующий код: Application.ProcessMessages(); Sleep(1000); а теперь, если пользователь в течении этой секунды будет перемещать форму по экрану, то все на форме исчезнет. Не знающий пользователь будет очень этому рад, ибо он(!) нашел баг в программе и потом, довольный собой побежит к программисту про это рассказывать. Иначе говоря, Вам либо придется использовать несколько вставок (например: Application.ProcessMessages; Sleep(200); Application.ProcessMessages; Sleep(200); ... ), либо использовать таймер, с которым, как Вы написали, все работает без проблем. |
Ответ отправил: Denisss (статус: 7-ой класс) Отправлен: 24.06.2005, 09:00 |
Отвечает: Ерёмин Андрей Здравствуйте, svsrus! После каждых подобных операций следует вызывать Application.ProcessMessages. Это "заставит" приложение выполнить все требуемые действия, которые стоят в очереди в данный момент. Если этого не делать, требуемый эффект не удастся. В приложение изменённый код. Приложение: |
Ответ отправил: Ерёмин Андрей (статус: 10-ый класс) Отправлен: 24.06.2005, 09:28 |
Отвечает: Voituk Alexander Здравствуйте, svsrus! Так не получиться. От того, что ты присвоил свойству Visible:=false, это не значит, что кнопка исчезнет. Чтобы она исчезла ножно обработать очередь событий. Для этого нужно перед Sleep вызвать функцию Application.ProcessMessages; И все буде ОК. |
Ответ отправил: Voituk Alexander (статус: 8-ой класс) Отправлен: 24.06.2005, 11:27 |
Отвечает: sir henry Здравствуйте, svsrus! Это, конечно, особенность Sleep(). :) Если Вы посмотрите хелп по этой функции, то прочтете там как она работает. :) Коротенько: Sleep() приводит к замиранию ТЕКУЩЕГО потока (т.е. потока в котором выполняется Ваша программа) на указаное кол-во милисекунд. Поэтому используйте лучше Timer. |
Ответ отправил: sir henry (статус: Профессор) Отправлен: 24.06.2005, 13:10 |
Отвечает: Delphin Здравствуйте, svsrus! Вставь в код Application.ProcessMessages(); И все будет ОК. Sleep(); - Замораживает поток программу на Х мс. --------- Обращаться в ICQ: 77778851 или E-Mail: delphinster@gmail.com |
Ответ отправил: Delphin (статус: 6-ой класс) Отправлен: 28.06.2005, 17:53 |
Вопрос № 22.587 |
Добрый день! 1. Как объявить свойства, которое может использоваться для разрешенияили запрета_импорта_каких-либо_данных_в_компонент. 2. Иерархия методов перемещаемых геометрических фигур. 3.Из текстового файла_считать_попарно_вещественные_числа_и_записать_их_в_результирующий_файл_комплексных_чисел_(с_расширением_dat) 4. Создать утилиту для переименования- копирования выбранного файла_обеспечить_сохранение_атрибутов_файлов). 5. Создать_утилиту_для_изменения_даты_создания_выбранного_файла. Спасибо. Александр |
Отправлен: 24.06.2005, 12:51 Вопрос задал: Пономарь Александр Николаевич (статус: Посетитель) Всего ответов отправлено: 3 |
Отвечает: sir henry Здравствуйте, Пономарь Александр Николаевич! Опять стада сессионных двоишников повалили, пытающихся переложить выполнение заданной преподом задачи на чужие плечи. Даже просьбы нет никакой, просто карточку перекатал и все... |
Ответ отправил: sir henry (статус: Профессор) Отправлен: 24.06.2005, 13:18 |
Отвечает: nimoid Здравствуйте, Пономарь Александр Николаевич! Настоящие_программисты_никогда_не_пользуются_пробелом! Это русфак, а не решебники по задачам. |
Ответ отправил: nimoid (статус: 3-ий класс) Отправлен: 24.06.2005, 13:22 |
Отвечает: Ерёмин Андрей Здравствуйте, Пономарь Александр Николаевич! Код в приложении. Для установки даты создания файла использовать функцию SetFileCreation. Приложение: |
Ответ отправил: Ерёмин Андрей (статус: 10-ый класс) Отправлен: 24.06.2005, 16:18 |
Вопрос № 22.589 |
Как подключить к своей программе персонажа-ассистента из Microsoft Office и сделать его говорящей энциклопедией, наподобие как это реализовано в Magic Goody? |
Отправлен: 24.06.2005, 13:36 Вопрос задала: Shizuku Tsukishima (статус: 3-ий класс) Всего ответов отправлено: 3 |
Отвечает: Ерёмин Андрей Здравствуйте, Shizuku Tsukishima! Смотрите вопрос №22541 на RusFAQ.ru - эта же тема. --------- Жизнь - игра, в которой нет setup'а... |
Ответ отправил: Ерёмин Андрей (статус: 10-ый класс) Отправлен: 24.06.2005, 18:20 |
Отвечает: Gin Здравствуйте, Shizuku Tsukishima! Вот здесь то Вас интересует: Говорящие агенты Microsoft - http://www.softkey.info/reviews/review1146.php С Уважением, Gin. |
Ответ отправил: Gin (статус: 10-ый класс) Отправлен: 28.06.2005, 16:15 |
Отвечает: Delphin Здравствуйте, Shizuku Tsukishima! Вопрос №22541 лень глянуть? --------- Обращаться в ICQ: 77778851 или E-Mail: delphinster@gmail.com |
Ответ отправил: Delphin (статус: 6-ой класс) Отправлен: 28.06.2005, 17:54 |
Вопрос № 22.591 |
Я пишу игру. Мне нужно: чтобы через DirectX игра переходила в полноэкранный режим с разрешением 800 на 600 |
Отправлен: 24.06.2005, 14:04 Вопрос задал: Sassoft (статус: Посетитель) Всего ответов отправлено: 4 |
Отвечает: sir henry Здравствуйте, Sassoft! Попробуйте так:(DX8) //Full Screen d3dpp.Windowed = FALSE; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.FullScreen_RefreshRateInHz =100; d3dpp.FullScreen_PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; d3dpp.BackBufferWidth = 800; d3dpp.BackBufferHeight = 600; d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8; d3dpp.EnableAutoDepthStencil = true; d3dpp.AutoDepthStencilFormat = D3DFMT_D16; (Взято с сайта www.gamedev.ru) |
Ответ отправил: sir henry (статус: Профессор) Отправлен: 24.06.2005, 14:37 Оценка за ответ: 4 Комментарий оценки: Что такое d3dpp? |
Отвечает: Denisss Здравствуйте, Sassoft! Вы задали вопрос про DrirectX и даже не знаете, что такое d3dpp (шутка)! Как так можно! d3dpp - это объект класса T3DPRESENT_PARAMETERS. А вообще, рекомендую Вам почитать книгу Михаила Краснова DirectX. Графика в проектах Delphi. Книгу можно найти как в бумажном варианте, так и в электронном. В книге достаточно подробно описываются приемы работы с DX(8). Так же там находится CD-ROM cо всеми примерами из книги и необходимым ПО. Примечание: прежде, чем приступать к программированию DX, надо бы его хотя бы немного изучить. |
Ответ отправил: Denisss (статус: 7-ой класс) Отправлен: 24.06.2005, 15:53 Оценка за ответ: 5 Комментарий оценки: Ладно,я понял почитаю. как тогда без DirectX можно перевести в полноэкранку и зменить расширение 800 на 600? |
Отвечает: Gin Здравствуйте, Sassoft! Аналогичный вопрос уже был чуть ранее. Простейший (почти детский) пример уже давал. Здесь псложнее: interface uses Windows, Messages, SysUtils, Classes, Controls, Forms, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } procedure WMGetMinMaxInfo(var msg: TWMGetMinMaxInfo); message WM_GETMINMAXINFO; public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.WMGetMinMaxInfo(var msg: TWMGetMinMaxInfo); begin inherited; with msg.MinMaxInfo^.ptMaxTrackSize do begin X := GetDeviceCaps( Canvas.handle, HORZRES ) + (Width - ClientWidth); Y := GetDeviceCaps( Canvas.handle, VERTRES ) + (Height - ClientHeight ); end; end; procedure TForm1.Button1Click(Sender: TObject); const Rect: TRect = (Left: 0; Top: 0; Right: 0; Bottom: 0); FullScreen: Boolean = False; // Разворачиваем на весь экран begin FullScreen := not FullScreen; if FullScreen then begin Rect := BoundsRect; SetBounds( Left - ClientOrigin.X, Top - ClientOrigin.Y, GetDeviceCaps( Canvas.handle, HORZRES ) + (Width - ClientWidth), GetDeviceCaps( Canvas.handle, VERTRES ) + (Height - ClientHeight )); end else BoundsRect := Rect; end; procedure TForm1.Button2Click(Sender: TObject); begin Close; end; end. С Уважением, Gin. |
Ответ отправил: Gin (статус: 10-ый класс) Отправлен: 24.06.2005, 16:51 |
Отвечает: Ерёмин Андрей Здравствуйте, Sassoft! Если речь идёт о DelphiX, то у компонента DxDraw есть свойство полноэкранного режима - Fullscreen и соответствующие свойства установки размеров экрана. --------- Жизнь - игра, в которой нет setup'а... |
Ответ отправил: Ерёмин Андрей (статус: 10-ый класс) Отправлен: 24.06.2005, 18:19 |
Вопрос № 22.593 |
Здраствуй народ. Работаю под W2000 в Delphi 7. Вопрос таков: как мне узнать в что прописано в винеде в настройке "Языки и стандарты", в частности меня интересует "Разделитель целой и дробной части числа". Если в других виндах решение этого вопроса отличается, прошу указать. |
Отправлен: 24.06.2005, 14:13 Вопрос задал: Карасев Алексей Александрович (статус: Посетитель) Всего ответов отправлено: 2 |
Отвечает: sir henry Здравствуйте, Карасев Алексей Александрович! В модуле SysUtils есть переменная DecimalSeparator типа char - вот это оно самое и есть. Действительно для всех виндов. |
Ответ отправил: sir henry (статус: Профессор) Отправлен: 24.06.2005, 14:50 |
Отвечает: Jadd Здравствуйте, Карасев Алексей Александрович! Ищи в MSDN описание функции GetLocaleInfo. Там очень много всяких параметров, так что смотри их описание. --------- Если в сердце дверь закрыта, нужно в печень постучаться |
Ответ отправил: Jadd (статус: Студент) Отправлен: 24.06.2005, 22:41 |
Вопрос № 22.606 |
Привет всем! Можно ли как-то определить, установлены ли пакеты обновлений SP1/SP2 в Windows или нет? |
Отправлен: 24.06.2005, 18:41 Вопрос задал: Ерёмин Андрей (статус: 10-ый класс) Всего ответов отправлено: 2 |
Отвечает: VBA Здравствуйте, Ерёмин Андрей! Используем API функцию GetVersionEx. В VersionInfo.szCSDVersion содержится строка ServicePack 1 или ServicePack 2 (если он установлен). Var VersionInfo:OSVERSIONINFO; Begin VersionInfo.dwOSVersionInfoSize:=SizeOf(VersionInfo); GetVersionEx(VersionInfo); Version:=IntToStr(VersionInfo.dwMajorVersion)+'.'+IntToStr(VersionInfo.dwMinorVersion)+' (Build '+IntToStr(VersionInfo.dwBuildNumber)+') '+VersionInfo.szCSDVersion; End; --------- Неправ вечно юзер, ибо прав всегда Админ! |
Ответ отправил: VBA (статус: 5-ый класс) Отправлен: 25.06.2005, 17:22 Оценка за ответ: 5 Комментарий оценки: Спасибо, работает. |
Отвечает: Gin Здравствуйте, Андрей! Я немного добавил к Вашему вопросу: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Edit5: TEdit; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} function RegQueryStr(RootKey: HKEY; Key, Name: string; Success: PBoolean = nil): string; var Handle: HKEY; Res: LongInt; DataType, DataSize: DWORD; begin if Assigned(Success) then Success^ := False; Res := RegOpenKeyEx(RootKey, PChar(Key), 0, KEY_QUERY_VALUE, Handle); if Res <> ERROR_SUCCESS then Exit; Res := RegQueryValueEx(Handle, PChar(Name), nil, @DataType, nil, @DataSize); if (Res <> ERROR_SUCCESS) or (DataType <> REG_SZ) then begin RegCloseKey(Handle); Exit; end; SetString(Result, nil, DataSize - 1); Res := RegQueryValueEx(Handle, PChar(Name), nil, @DataType, PByte(@Result[1]), @DataSize); if Assigned(Success) then Success^ := Res = ERROR_SUCCESS; RegCloseKey(Handle); end; procedure TForm1.Button1Click(Sender: TObject); begin edit1.Text := RegQueryStr(HKEY_LOCAL_MACHINE, 'SOFTWAREMicrosoftWindows NTCurrentVersion', 'BuildLab'); edit2.Text := RegQueryStr(HKEY_LOCAL_MACHINE, 'SOFTWAREMicrosoftWindows NTCurrentVersion', 'CSDVersion'); edit3.Text := RegQueryStr(HKEY_LOCAL_MACHINE, 'SOFTWAREMicrosoftWindows NTCurrentVersion', 'CurrentBuild'); edit4.Text := RegQueryStr(HKEY_LOCAL_MACHINE, 'SOFTWAREMicrosoftWindows NTCurrentVersion', 'CurrentBuildNumber'); edit5.Text := RegQueryStr(HKEY_LOCAL_MACHINE, 'SOFTWAREMicrosoftWindows NTCurrentVersion', 'CurrentVersion'); end; end. С Уваженим, Gin. |
Ответ отправил: Gin (статус: 10-ый класс) Отправлен: 25.06.2005, 18:56 Оценка за ответ: 5 Комментарий оценки: Большое спасибо! Именно то, что нужно! |
Вопрос № 22.618 |
Здраствуйте уважаемые Эксперты, я только учусь програмированию и возник вопрос: я скачал компонент TDFAniCursor и как мне сделать чтобы я мог им пользоватся - скопировать его куда илм еще что??? Заранее спасибо. |
Отправлен: 24.06.2005, 22:23 Вопрос задал: Staskin (статус: Посетитель) Всего ответов отправлено: 4 |
Отвечает: Gin Здравствуйте, Staskin! По установке компанентов уже были ответы. Если Вам ни один не подошел пожалуйста опубликуйте cодержимое файла реадми вместе с вопросом. Дело в том, что Вы не указали какя версия Delphi установлена у Вас и не известно для каких версий компанент TDFAniCursor. С Уважением, Gin. |
Ответ отправил: Gin (статус: 10-ый класс) Отправлен: 24.06.2005, 23:48 Оценка за ответ: 4 |
Отвечает: Ерёмин Андрей Здравствуйте, Staskin! Увы, помочь не могу, так как не располагаю этим компонентом. Если бы Вы в своём вопросе указали ссылочку, откуда его скачать - с радостью бы помог. Если напишете в комментарие ссылку - постараюсь помочь. --------- Жизнь - игра, в которой нет setup'а... |
Ответ отправил: Ерёмин Андрей (статус: 10-ый класс) Отправлен: 25.06.2005, 08:20 |
Отвечает: VBA Здравствуйте, Staskin! В меню Tools ->Envirnment Options->Library->Library Path добавляешь путь к исходникам компонета. Если есть файл с расширением DPK, то открываешь его в Delphi нажимаешь кнопку Compile, а затем Install (если откомпилировалось все без ошибок). В результате компонент будет установлен. Если такого файла нет, то выбираешь меню Component->Install Component. В unit File Name указываешь имя файла исходника компонента, в Package File Name указываешь имя пакета, в котором будет "сохранен" твой компонент. Жмешь ОК и копилируешь пакет как в предыдущем случае. --------- Неправ вечно юзер, ибо прав всегда Админ! |
Ответ отправил: VBA (статус: 5-ый класс) Отправлен: 25.06.2005, 17:34 Оценка за ответ: 5 |
Отвечает: sir henry Здравствуйте, Staskin! А в файл install.txt не судьба было заглянуть? :) Там все подробно написано. Если проблемы с чтением, тогда, конечно, другое дело. Но все равно надо учиться читать. :) Цитирую из файла install.txt: Установка ======= 0. Скопировать файлы в ..lib - или другую по Вашему выбору 1. Открыть Delphi 4, 5, 6 2. В меню выбрать: "COMPONENT - INSTALL COMPONENT" 3. Выбрать DFAniCursorReg.pas и DFAniCursor.pas 4. Установить в первуй строке файла DFAniCursorReg.pas Вашу версию Дельфи {$DEFINE DELPHI5} 5. Скомпилировать и установить Как использовать ========== 1. Положить компонент TDFAniCursor на Вашу форму 2. Кликнуть по "..." в свойстве AniCursorFile 3. Выбрать анимированый курсор, например в ..WindowsCursors Курсор будет занесен в файл формы. 4. Использовать: DFAniCursor1.SetAniCursor(15); Screen.Cursor := 15; // Вернуть обратно по умолчанию Screen.Cursor := crDefault; |
Ответ отправил: sir henry (статус: Профессор) Отправлен: 27.06.2005, 06:04 Оценка за ответ: 5 |
Вопрос № 22.620 |
Добрый вечер. Подскажите с помощью какого компонента создается таблица вида: Товары/Кол-во/Перевозка/Приемка/Наценка Товары буду всегда постоянные С возможностью как в Excel автовыпадающий список Нажал к примеру "+" напротив "Ручки" и внузи выпали названия ручек. С Уважением, Алексей |
Отправлен: 24.06.2005, 23:15 Вопрос задал: Алексей (статус: Посетитель) Всего ответов отправлено: 2 |
Отвечает: Jadd Здравствуйте, Алексей! дык не компонент тут,а тулза. Database Desktop называется. Там и делаешь. Затем бурушь TADOTable или TTable и хватаешь таблицу. А, забыл в той же тулзе делаешь alias на свою таблицу, а в TTable дергаешь этот самый alias. --------- Если в сердце дверь закрыта, нужно в печень постучаться |
Ответ отправил: Jadd (статус: Студент) Отправлен: 25.06.2005, 22:01 |
Отвечает: sir henry Здравствуйте, Алексей! Вам нужно отображение таблицы на форме или сама таблица? Если отображение, то с помощью TDBGrid. Чтобы сделать выпадающий список необходимо у столбца, где этот список должен быть, установить свойство Buttonstyle="cbsAuto." Свойство PickList этого столбца должно содержать список значений для выпадающего списка. Если Вы что-то другое имели в виду, то напишите конкретно, а то может у Вас и таблицы то нет, а я Вам даю уже последний этап - отображение данных. :) --------------------- Есть хорошая книжка - "Программирование баз данных в Delphi", автор Фаронов. Мне она помогает почти в 100% случаев. |
Ответ отправил: sir henry (статус: Профессор) Отправлен: 27.06.2005, 06:17 Оценка за ответ: 4 |
© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.
Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки:
comp.soft.prog.delphiplus
Отписаться
Вспомнить пароль
В избранное | ||