Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.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');

Приложение:

---------
Жизнь - игра, в которой нет setup'а...

Ответ отправил: Ерёмин Андрей (статус: 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

Приложение:

---------
Обращаться в ICQ: 77778851 или E-Mail: delphinster@gmail.com

Ответ отправил: 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. Это "заставит" приложение выполнить все требуемые действия, которые стоят в очереди в данный момент. Если этого не делать, требуемый эффект не удастся. В приложение изменённый код.

Приложение:

---------
Жизнь - игра, в которой нет setup'а...

Ответ отправил: Ерёмин Андрей (статус: 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.

Приложение:

---------
Жизнь - игра, в которой нет setup'а...

Ответ отправил: Ерёмин Андрей (статус: 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


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.

Яндекс


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.delphiplus
Отписаться
Вспомнить пароль

В избранное