Обсуждение Программирование на Delphi/Pascal

H

Hero Ezh

Как узнать время из дельфи строкой желательно по типу чч:мм:дд:мм:гггг?
 
Награды
7
Там эта функция описывается так:
Вместо "executable file contains the resource" мне нужно использовать RES, а как не пойму
Наверное тогда изучать на примере компиляторов ресурсов чем просто ресурс отличается от экзешника или библиотеки с вкомпилированным в него/неё ресурсом. Изучаем формат PE, RES. Сходу так я не нашел как средствами ОС грузить RES файл в отличие от DLL или EXE.
 

Ku-Klux-Klan

Ословед
Нашел текст процедуры, которая определяет подключен ли компьютер к сети или нет.

procedure TForm1.Button1Click(Sender: TObject);
begin
if GetSystemMetrics(SM_NETWORK) and $01 = $01 then
ShowMessage('Computer is attached to a network!')
else
ShowMessage('Computer is not attached to a network!');
end;

1) какое-то странное условие if. Насколько я понял функция GetSystemMetrics с передаваемым параметром SM_NETWORK возвращает целое число, младший бит которого равен 1, если сеть есть, и 0 если сеть отсутствует.
2) у меня почему-то всегда сеть включена. :) Что нужно сделать, чтобы сеть была выключена?
 
Награды
7
1) какое-то странное условие if. Насколько я понял функция GetSystemMetrics с передаваемым параметром SM_NETWORK возвращает целое число, младший бит которого равен 1, если сеть есть, и 0 если сеть отсутствует.
Ничего странного. Обычное дело.
2) у меня почему-то всегда сеть включена. :) Что нужно сделать, чтобы сеть была выключена?
Провод выдернуть? :)
 

Ku-Klux-Klan

Ословед
Ничего странного. Обычное дело.
Вот смотри, получается в условии так:
Если возворощаемое значение от функции и $01 равны $01, то сеть есть.

Почему бы тогда просто не написать
if GetSystemMetrics(SM_NETWORK) = $1 then


Провод выдернуть? :)

Вынимал, ничего, все также.
 

kazak74reg

Ословед
мене надо что бы DateTime Picker показавал только дни (если конечто можно так сделать) срочно пишу диплом
 
Награды
7
Вот смотри, получается в условии так:
Если возворощаемое значение от функции и $01 равны $01, то сеть есть.

Почему бы тогда просто не написать
if GetSystemMetrics(SM_NETWORK) = $1 then
Потому что если GetSystemMetrics возвращает битовую маску (а судя по примеру это так и есть, как оно на самом деле я не знаю, не читал документацию по этой функции), то кроме нулевого бита там могут быть ещё и другие выставлены. И тогда простое равенство не сработает.
Вынимал, ничего, все также.
Тады не знаю... читать MSDN надо.
 

Ku-Klux-Klan

Ословед
Потому что если GetSystemMetrics возвращает битовую маску (а судя по примеру это так и есть, как оно на самом деле я не знаю, не читал документацию по этой функции), то кроме нулевого бита там могут быть ещё и другие выставлены. И тогда простое равенство не сработает.

Так значти остальные биты кроме последнего могут быть не нулевые если можно так сказать. Ну я тогда все равное не понимаю логику этого условия. Зачем там стоят несколько условий? С твоих слов там идет сравнение битовой маски с $01. Что-то я не въезжаю. Можешь это примерчик, поподробнее объянить. Или сказать где посомтреть.
 
Награды
7
Так значти остальные биты кроме последнего могут быть не нулевые если можно так сказать. Ну я тогда все равное не понимаю логику этого условия. Зачем там стоят несколько условий? С твоих слов там идет сравнение битовой маски с $01. Что-то я не въезжаю. Можешь это примерчик, поподробнее объянить. Или сказать где посомтреть.

Допустим вернулось значение 67. Т.е. в бинарном формате: 1000011. Если мы выполним побитовое AND с $01 (0000001), то и получим 0000001 в случае если нулевой бит в 67 установлен:

1000011
and
0000001
-------------
0000001

Если бы нас интересовал, скажем 5-ый бит, то мы бы сравнивали с 2 в 5-ой степени, т.е. 32.
1000011
and
0100000
-------------
0000000

Т.е. в результате единичными битами будут те которые в обоих операндах были равны 1. Кстати, когда выполняется сравнение с битовой маской содержащей ровно 1 единичный бит 1, 2, 4, 8, 16, 32 и т.п. можно проверять значение не на равенство маске, а на неравенство нулю. Т.е.:
Код:
[/COLOR][COLOR=Black]if[/COLOR][COLOR=Black] (GetSystemMetrics(SM_NETWORK)[/COLOR][COLOR=Black] and $01) <> [/COLOR][COLOR=Black]0 [/COLOR][COLOR=Black]then
[/COLOR]
Читать по темам "битовые операции" или "bitwise operations".
 

KL9YnEr

Ословед
Народ, возможно ли както в дельфи сделать так, чтобы при нажати на одну кнопку на панели были одно компоненты, а при нажатии на другую появились другие компоненты???
 

reboot

Ословед
Всем здрасте! У меня такая проблема:
Есть база данных, которая находится в папке base\ в папке с программой (BDE). В базе есть поле типа Graphic. На форме лежит компонент DBImage, который связан с этим полем. По нажатию на кнопку открывается диалог выбора картинки:

If OpenPictureDialog1.Execute then
begin
Table1.Edit;
DBImage1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
Table1.Post;
end;

Проблема в том, что на строчке Table1.Post; вылетает ошибка:

EDBEngineError with message 'Path not found'

В чём проблема? Вме остальные поля редактируются нормально.
 

reboot

Ословед
Это не на Post, это на LoadImage вылетает. Соответственно проверить что в действительности возвращает OpenPictureDialog1.F ileName.

OpenPictureDialog1.FileName возвращает правильное значение, дело всё таки в Table1.Post. Наверно надо было дописать сразу что в ошибке есть ещё вот это:
'Path not found.
Table: D:base\data.MB'
 
Награды
7
OpenPictureDialog1.FileName возвращает правильное значение, дело всё таки в Table1.Post. Наверно надо было дописать сразу что в ошибке есть ещё вот это:
Точно правильное? Безо всяких кавычек? Как вариант включить use debug DCUs, тогда провалишься прямо в то место VCL в котором возникает ошибка.
 

    reboot

    очки: 7
    Спасибо за помощь!

reboot

Ословед
Уффф.... разобрался!:victory:
Не стал ползти огородами. Подумал, что раз дело в 'Path not found', то самым простым решением будет напрямую задать этот Path.
Мож кому пригодится:
В OnShow формы дописал вот это:

s := GetCurrentDir + '\base\';
Table1.DatabaseName := s;
Table1.Active := true;

Всё заработало!

P.S. Обожаю функцию GetCurrentDir :shuffle:
 
Как реализовать работу с бд без установки на комп BDE? И стоит ли писать собственное подобие BDE, если не такого нет?
Нужна программно-независимая работа с базой.
 
Награды
7
Как реализовать работу с бд без установки на комп BDE? И стоит ли писать собственное подобие BDE, если не такого нет?
Поискать в интернете. Баз данных - туча начиная с MS Access и заканчивая Oracle, а BDE это всего лишь один из способов доступа к БД.
Нужна программно-независимая работа с базой.
Это что такое?
 
Как реализовать работу с бд без установки на комп BDE? И стоит ли писать собственное подобие BDE, если не такого нет?
Нужна программно-независимая работа с базой.
Куча всяких компонентов - от DACов до например:
http://sourceforge.net/projects/zeoslib/
Не нужно изобретать велосипеды, их уже придумали.
 

    <<MadNesS>>

    очки: 11
    Нет комментариев
Сверху