Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Delphi (до версии 2009) - часть 6

Автор: Frodo_Torbins
Дата сообщения: 01.02.2011 10:03
DokPZ
При инициализации объектов Class1 передайте им ссылку на экземпляр Class2.
Автор: ShIvADeSt
Дата сообщения: 01.02.2011 10:39
delover

Цитата:
Давайте я Вам подарю лицензию на Delphi 7.0 у меня их почему-то две. Ребята давайте потихоньку 60 забудем.

Угу, забудем как мертворожденную Я до сих пор на 5 версии с фиксами последними работаю. И мне ее пока что хватает (ибо это уже давно не основная специальность, а для моих нужд Дельфи 5 за глаза).
Автор: DokPZ
Дата сообщения: 01.02.2011 12:54

Цитата:
DokPZ
При инициализации объектов Class1 передайте им ссылку на экземпляр Class2.

А надо в описании Class1 как либо ссылаться на Class2?
Можно пример какой нибудь, как это работает?
Заранее спасибо.
Автор: Frodo_Torbins
Дата сообщения: 01.02.2011 13:07
DokPZ

Код: //сначала создаем контейнер
Container := TClass2.Create;
//теперь создаем дочерний элемент и инициализируем его
ChildItem1 := TClass1.Create;
ChildItem1.Cont := Container;
//последние две операции можно заменить одной
//если использовать конструктор с параметром:
ChildItem2 := TClass1.Create(Container);
//теперь можно добавлять элемент в контейнер
Container.Add(ChildItem1);
Автор: delover
Дата сообщения: 01.02.2011 13:17
ShIvADeSt
А XPManifest мы ручками к d5 прикручиваем? Помоему если в ресурс прикрутить то прога на d5 вообще не работает. Я понимаю что в деревнях компики в основном на XP работают, но это временно...

Добавлено:
В d6 мне не нравится графическая библиотека - она не поддерживает стандартные системные цвета. Это уже система и это уже классика, только полностью пропаченная d6 позволяет компилировать нормальную программу, но то что откомпиленно вовсе не нормально бывает.
Автор: ShIvADeSt
Дата сообщения: 02.02.2011 03:16
delover

Цитата:
А XPManifest мы ручками к d5 прикручиваем? Помоему если в ресурс прикрутить то прога на d5 вообще не работает.

Все замечательно работает (про ресурс), плюс один компонент ставим и все отлично.
Автор: Maks150988
Дата сообщения: 02.02.2011 23:26
ShIvADeSt
А что за компонент? Я вообще извлек из ресурсов uTorrent этот xml файл. Там как раз все что нужно для комфортной работы.
Автор: ShIvADeSt
Дата сообщения: 03.02.2011 02:44
Maks150988

Цитата:
А что за компонент? Я вообще извлек из ресурсов uTorrent этот xml файл. Там как раз все что нужно для комфортной работы.

Theme Manager от Soft Gems. Он хучит отрисовку основных контролов и отрисовывает их если надо функциями темы. Когда я просто юзал манифест, то были проблемы с лейблами и еще чем (тулбар точно в их числе). Разговор естессно про VCL, на АПИ можно самому все рисовать.
Автор: Sergey_Demchuk
Дата сообщения: 03.02.2011 12:09
Ка бы то покрасивее сделать?


Код: var AktDay,AktMonth,AktYear: String;
Temp, IntDay, IntMonth, IntYear, HexDay, Maska, HexDataDay : String;
REG : TRegistry;
Buf: array[0..255] of Char;
Temping: Char;
...
IntDay:=IntToBin('27',8)
....
HexDataDay:= BinToHex (IntDay);
FillChar(Buf, SizeOf(Buf), 0);
reg:=TRegistry.Create;
reg.RootKey:=HKEY_LOCAL_MACHINE;
reg.OpenKey('SYSTEM\CurrentControlSet\Data', false);
REG.ReadBinaryData('Data', Buf, SizeOf(Buf));
ii:=1;
for ii:=1 to 255 do begin
if ((Buf[ii]=#$00) and (Buf[ii+1]=#$00) and (Buf[ii+2]=#$FA)) then Buf[ii+3]:=HexDataDay;
//buf[7]:=#$E9;
end;
Автор: delover
Дата сообщения: 03.02.2011 14:56
Sergey_Demchuk
А чем не устраивает

Код: [no]procedure TRegistry.WriteDateTime(const Name: string; Value: TDateTime);
begin
PutData(Name, @Value, SizeOf(TDateTime), rdBinary);
end;[/no]
Автор: Frodo_Torbins
Дата сообщения: 03.02.2011 15:07
Sergey_Demchuk
Возможно и можно покрасивее, но нужно знать формат данных в реестре.
Автор: JohnSilver182
Дата сообщения: 03.02.2011 20:41
Написал код для получения данных от консольных приложений

ВНЕЗАПНО : под Win 7 x64 висне цикл


Код: repeat
WaitReason:= WaitForSingleObject( ProcessInfo.hProcess,100);
//Application.ProcessMessages;
//WriteLn( WaitReason);
until(WaitReason <> WAIT_TIMEOUT);
Автор: Sergey_Demchuk
Дата сообщения: 03.02.2011 20:54

Цитата:
reg.RootKey:=HKEY_LOCAL_MACHINE;
reg.OpenKey('SYSTEM\CurrentControlSet\Data', false);
Не особо хороший тон. Во первых это что дата лицензии на всю машину и всех пользователей? Опять не понимаю.

Ну это я так, не всю ветку написал, там еще подключи есть.

Суть программы в двухсловах
В реестре в некоей ветке есть значение REG_BINARY типа ...00,d3,b6,95,15,20,00,0a,00,11....
В этом месте b6,95,15 записаны Дата,Месяц и Год.
Мне надо их изменить на дату, отстоящую от сегодняшнего дня на 50 дней вперед.
Для этого я получаю Дату и перевожу ее в текстовый формат

Код: DateSeparator := '.';
Temp:=DateToStr(Date+55);
AktDay:= Copy (Temp, 1, Pos('.',Temp)-1);
Автор: Frodo_Torbins
Дата сообщения: 03.02.2011 22:59
Sergey_Demchuk
Без конвертации в строки можно обойтись.
[more=К примеру так]
Код: uses DateUtils; //это следующей строкой после implementation

...
var
TmpDate: TDate;
...
begin
...
if ((Buf[ii]=#$00) and (Buf[ii+1]=#$d3)) then
begin
//переводим значения байт в дату
//как я понял, сначала у вас идет месяц, потом год, а потом день
//еще нужно подумать сколько прибавлять к году
TmpDate := EncodeDate(2000 + Ord(Buf[ii+3]), Ord(Buf[ii+2]), Ord(Buf[ii+4]));
//прибавляем 50 дней с учетом разного количества дней в месяцах и високосных годов
TmpDate := IncDay(TmpDate, 50);
//записываем все назад в буфер
Buf[ii+3] := AnsiChar(Chr(YearOf(TmpDate) - 2000));
Buf[ii+2] := AnsiChar(Chr(MonthOf(TmpDate)));
Buf[ii+4] := AnsiChar(Chr(DayOf(TmpDate)));
end;
...
Автор: GRom V
Дата сообщения: 05.02.2011 02:18
Мне нужно чтоб после 23:00 комп выключался...
Как сделать?
Автор: emo
Дата сообщения: 05.02.2011 06:50
GRom V
смотри функцию ExitWindowsEx
Автор: Frodo_Torbins
Дата сообщения: 05.02.2011 10:55
GRom V
Настроить стандартный планировщик.
Автор: GRom V
Дата сообщения: 05.02.2011 12:05
Frodo_Torbins

Цитата:
GRom V
Настроить стандартный планировщик.

Нужна именно прога, которая если больше 23:00 будет вырубать комп
Автор: Frodo_Torbins
Дата сообщения: 05.02.2011 12:35
GRom V
Стандартный планировщик уже встроен в винду. Причем в висте и семерке всегда гарантированно включен. Зачем вам еще отдельная прога, у юзера слишком много оперативки?
Но если уж очень нужно, то используйте обычный таймер. При запуске расчитываете сколько осталось времени до одинадцати и выставляете нужный интервал.
Автор: JohnSilver182
Дата сообщения: 05.02.2011 22:05
JohnSilver182
Меня никто не любит
Автор: emo
Дата сообщения: 05.02.2011 22:22
GRom V

Цитата:
Нужна именно прога...

Если нужна отдельная прога, причем тогда эта тема?
Или вы сами хотите написать?
Используйте таймер, проверяйте время, вызывайте ExitWindowsEx.
Всего несколько строчек кода.
Автор: ShIvADeSt
Дата сообщения: 07.02.2011 00:27
Frodo_Torbins

Цитата:
Но если уж очень нужно, то используйте обычный таймер. При запуске расчитываете сколько осталось времени до одинадцати и выставляете нужный интервал.

интервал можно сделать на каждые 10 секунд или минуту и проверять в событии сколько сейчас времени. Если время пришло, то ExitWindowsEx.
Автор: Frodo_Torbins
Дата сообщения: 07.02.2011 09:36
ShIvADeSt
Владельцы ноутбуков скажут вам "спасибо" за разряженную батарею. Просыпание процессора каждые n секунд является довольно большой нагрузкой на нее.
Автор: JohnSilver182
Дата сообщения: 07.02.2011 11:08
Народ а PAnsichar в D7 и D2010 по разному работают 8 vs 16 бит ???
Автор: psa1974
Дата сообщения: 07.02.2011 11:26
JohnSilver182

Цитата:
Народ а PAnsichar в D7 и D2010 по разному работают 8 vs 16 бит ???

PСhar - по разному. А PAnsichar - одинаково. В обоих случаях PAnsichar - это указатель на строку однобайтных символов. Сам указатель по сути - это Integer и его размерность не менялась.
Автор: ShIvADeSt
Дата сообщения: 07.02.2011 12:21
Frodo_Torbins

Цитата:
Владельцы ноутбуков скажут вам "спасибо" за разряженную батарею. Просыпание процессора каждые n секунд является довольно большой нагрузкой на нее.

Про них я не думал, почти весь мой софт работает на стационарах
Автор: Sergey_Demchuk
Дата сообщения: 08.02.2011 07:45

Код: Buf: array[0..255] of Byte;
...
FillMemory(@Buf, SizeOf(Buf), 0);
if ((Buf[ii]=$00) and (Buf[ii+1]=$d3)) then ...
Автор: JohnSilver182
Дата сообщения: 08.02.2011 08:08
psa1974
Просто странно , Exe которое скомпилированно на D7+winXp , работает ОЧЕНЬ странно под Win 7 x64 ( см мой вопрос: Написал код для получения данных от консольных приложений )

А точнее, где есть указатели + вызов API функций.

Автор: greenpc
Дата сообщения: 08.02.2011 09:34
D7 нет ошибок
Автор: Frodo_Torbins
Дата сообщения: 08.02.2011 10:08
Sergey_Demchuk
Что именно вам пишет компилятор? И какая у вас версия делфей? Данный код отлично компилируется на DelphiXE.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374

Предыдущая тема: MPO File


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.