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

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

Автор: Eternal_Shield
Дата сообщения: 19.05.2012 21:06
Gnom3
Есть подозрение, что WTSRegisterSessionNotification поможет вам. Зарегистрируйте окно и ловите WM_WTSSESSION_CHANGE сообщение. Думаю, что lParam в этом сообщении будет равен WTS_SESSION_LOCK при нажатии Ctrl+Alt+Del. Вроде как должно решить вашу проблему.
Автор: Gnom3
Дата сообщения: 19.05.2012 21:51
Eternal_Shield, огромное спасибо
Рано обрадовался...
WM_WTSSESSION_CHANGE с lParam равным WTS_SESSION_LOCK действительно проходит при подаче заявки на смену пользователя. На ХР. На семерке этого сообщения не проходит ни с каким lParam вообще. вопрос пока открыт. тотальный мониторинг сообщений, после отсечения сообщений, которые точно не участвуют в "недовыходе" из системы - дает нуль. Хуки дают реакцию антивируса, да и предубеждения у меня к глобальным хукам, а локальный так-же не дал результата.

P.S. Нашел WTSUnRegisterSessionNotificationEx, на семерке сообщение WM_WTSSESSION_CHANGE проходит. Но только если на экране, который после комбинации клавиш Ctrl+Alt+Del нажать кнопку "Сменить пароль" или "Сменить Пользователя"

Беда, блин, с этой семеркой. и это с учетом того, что пользователей ХР все меньше и меньше, а задачки от мелкомягких в новых системах - все сложнее и сложнее..

В общем, кому интересно решение этой задачи - относительно надежно получилось так:
Код: aEvent := OpenEvent(SYNCHRONIZE, False, 'WinSta0_DesktopSwitch');
if aEvent <> 0 then
begin
try
if WaitForSingleObject(aEvent, 10000) = WAIT_OBJECT_0 then
// тут наше действие
finally
CloseHandle(aEvent);
end;
end;
Автор: Ichigo2
Дата сообщения: 22.05.2012 14:58
Всем привет.
Какие есть настройки показа Baloon ToolTip? Я хочу чтобы они сами не исчезали и выводились сразу, без задержек.
Автор: GRom V
Дата сообщения: 24.05.2012 02:11
Сума сойти..... На компе стоит антивирь NOD

procedure TForm1.Button1Click(Sender: TObject);
var
strIP: String;
F:textfile;
s:string;
begin
AssignFile(F,'c:\log.txt');
Rewrite(F);
Writeln(F,strIP);CloseFile(F);
end;

На это - орет как потерпевший... - я в шоке.... этаж стандартная запись в файл!???
Автор: exteris
Дата сообщения: 24.05.2012 08:58
GRom V
Много лет стоит NOD. Ничего подобного не происходит.


Добавлено:
Как ругается, кстати?
Автор: salexn1
Дата сообщения: 24.05.2012 10:24
GRom V
А у вас вирус не Induc случайно?
Автор: GRom V
Дата сообщения: 24.05.2012 13:37
exteris

Цитата:
Много лет стоит NOD. Ничего подобного не происходит.


Создаю новый проект, кидаю кнопку с этим кодом - больше не чего!
Кричит - вирус - конкретно название не помню.

salexn1

Цитата:
А у вас вирус не Induc случайно?


Эт че?
Автор: salexn1
Дата сообщения: 24.05.2012 13:42
GRom V
Читаем и вкуриваем
hххp://www.thg.ru/technews/20090821_204400.html
hххp://www.gunsmoker.ru/2009/08/viruswin32induca.html

ну и гугле в помощь
Автор: GRom V
Дата сообщения: 24.05.2012 14:07
salexn1
СпасиБки огромное - оказался он самый!!! Во гад... )
Подлечился )
Автор: alex1334
Дата сообщения: 29.05.2012 00:30
В файле winnt.h
имеется структура

Код:
#define IMAGE_SIZEOF_SHORT_NAME 8

typedef struct _IMAGE_SECTION_HEADER {
BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
union {
DWORD PhysicalAddress;
DWORD VirtualSize;
} Misc;
DWORD VirtualAddress;
DWORD SizeOfRawData;
DWORD PointerToRawData;
DWORD PointerToRelocations;
DWORD PointerToLinenumbers;
WORD NumberOfRelocations;
WORD NumberOfLinenumbers;
DWORD Characteristics;
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
Автор: akaGM
Дата сообщения: 29.05.2012 01:03
alex1334

1) во-первых можно сделать printf("%d\n", sizeof(IMAGE_SECTION_HEADER));

2) как ты думаешь, размер

union {
DWORD PhysicalAddress;
DWORD VirtualSize;
} Misc;

два дворда или один? если два -- тогда читай в книжках что такое юнион и разбирайся...
Автор: Simkara
Дата сообщения: 29.05.2012 12:24
В форме нарисовано множество линий, прямоугольников, кружочков и т.д. Через PaintBox. А так же вставлено несколько лейблов (Label).
Требуется, что бы при нажатии кнопки очистилась конкретная область (прямоугльная). Координаты области известны, например (x1,y1,x2,y2).
Как же очистить эту область от канвы и лейблов?
Желательно, что бы очищенная область была прозрачной.
Просьба показать эту процедуру в коде.
Автор: akaGM
Дата сообщения: 29.05.2012 15:20
Simkara
попробуй создай предварительно bitmap нужного размера, выставь цвет прозрачности и потом рисуй её где хочешь на канве через paintbox.canvas.draw(x, y, bitmap)
Автор: adasiko
Дата сообщения: 29.05.2012 15:41
Помогите с такой ситуацией.
Есть дамп базы данных в файле вида

Код: 1('1', 'Andrew', 'Andreev')
........................................
1('2', 'Ilia', 'Ileev')
1('3', 'Oleg', 'Olegeev')
2('1', 'Russia')
2('2', 'USA')
......................................
Автор: salexn1
Дата сообщения: 29.05.2012 16:20
adasiko
1) Заюзать DAC, ODAC или что-то, что напрямую работает с Ораклом
2)

Код:
Цикл чтения по файлу
begin
if текуший_номер_таблицы_изменился then
begin
// готовим запрос
ADOQuery1.SQL.text:='insert into нужная_таблица values (':par1', ':par2');
ADOQuery1.Parameters[0].type:=нужный тип;
ADOQuery1.Parameters[1].type:=нужный тип;
ADOQuery1.prepared:=true;
end;
// подставляем параметры
ADOQuery1.Parameters[0]:=бла-бла;
ADOQuery1.Parameters[1]:=бла-бла;
ADOQuery1.Exec;
end
Автор: A_V
Дата сообщения: 29.05.2012 16:31
adasiko
как вариант, заюзать ODAC, передать данные в процедуру на сервере через коллекцию объектов, потом проходить ее через FORALL и делать insert'ы
Автор: adasiko
Дата сообщения: 29.05.2012 17:31

Цитата:
заюзать DAC, ODAC

А это бесплатное? (проблема не в деньгах, а в бюрократии)

Цитата:
что-то напрямую работает с Ораклом

реализована и функция для загрузки всего это барахла через консольную утилиту дампа оракла exp (там конечно за считанные секунды делается). Но требуется и вдобавок и вариант вот с таким способом.
Просто меня удивило отсутствие разницы во времени между этими двумя вариантами кода (запрос как сплошная строка и запрос с prepared и с параметрами)
Автор: salexn1
Дата сообщения: 29.05.2012 17:59
adasiko
DAC, ODAC - не бесплатное

попробовать вместо ADOQuery использовать TADOCommand
Автор: ant0ni02004
Дата сообщения: 29.05.2012 20:35
adasiko

нужно завести и настроить столько TAdoQuery сколько таблиц (чтобы по нескольку раз не настраивать) перед чтением данных, потом только param.value:=... и execute




Добавлено:
salexn1

или TAdoCommand - но опять же настроить их всех перед загрузкой данных
Автор: adasiko
Дата сообщения: 30.05.2012 09:03
Все перебровал. Все равно скорость одинаковая Видать ограничения в последовательном выполнении в адо и больше из него не выжмешь
Автор: Kmich
Дата сообщения: 30.05.2012 09:43
adasiko
а если попробывать на оракл сами файлы закачать
а потом проделать сделать процедуру которая из временной таблицы сделает разбивку по всем таблицам на Oracle.
Если конечно сервер достатно скоростной и позволяет это сделать.

и еще бывает иногда скорость увеличивается при отключении индексов и тригеров, после импорта можно индексы создать поновому и тригеры активировать.
Автор: Frodo_Torbins
Дата сообщения: 30.05.2012 15:07
adasiko
Мне кажется, что у вас основные потери на обмен данными с сервером. Нужно как нибудь изловчится все одним пакетом отправить. Можно через транзакцию попробовать, а можно один длинющий запрос построить.
Автор: ant0ni02004
Дата сообщения: 30.05.2012 16:39
adasiko

а BeginTrans.... тут всё загружаем..... CommitTrans
Автор: alex1334
Дата сообщения: 30.05.2012 23:08
akaGM
За подсказку про union спасибо. В СИ я не пишу вообще, а в дельфи не доводилось встречаться с таким типом данных. К сожалению я нигде в настройках среды не нашел возможности чтобы компилятор Delphi понимал заголовачные файлы *.h вот и лепил я свои структуры.
Автор: akaGM
Дата сообщения: 30.05.2012 23:13
alex1334

Цитата:
а в дельфи не доводилось встречаться с таким типом данных


union {
DWORD PhysicalAddress;
DWORD VirtualSize;
} Misc;

Misc = record
case integer of
0: (PhysicalAddress: DWORD);
1: (VirtualSize: DWORD);
end;

writeln('sizeof(Misc) = ', sizeof(Misc));
out:
sizeof(Misc) = 4

ты и Дельфи фигово знаешь...
Автор: alex1334
Дата сообщения: 03.06.2012 22:59
akaGM SizeOf вас не спасет если в структуре вместо dword напишите word. Она вычислит размер в соответствии с тем типом который вы описали с ошибкой.
А поскольку данные то внешние то это неизбезно приведет к исключению или другой ошибке. Кстати delphi ругается на тип dword я использую cardinal.
Автор: akaGM
Дата сообщения: 03.06.2012 23:33
alex1334
а зачем меня спасать?
размер такой структуры (как и юнион в С) определяется наибольшим элементом...

ttt = packed record
case integer of
0: (PhysicalAddress: integer);
1: (VirtualSize: integer);
2: (bbb: byte);
3: (ccc: char);
4: (aaa: array[1..100] of integer);
end;

а для DWORD нужно юзать windows...
Автор: Grande
Дата сообщения: 07.06.2012 11:03
Что-то не пойму, в чем дело:


Код: procedure TfrmServer.FormActivate(Sender: TObject);
begin
frmFrame := TfrmFrame.Create(frmServer);
frmFrame.Parent := frmServer;
frmFrame.OnCreate := frmFrame.FormCreate;
end;

procedure TfrmFrame.FormCreate(Sender: TObject);
begin
ShowMessage('УРААААА!!!!!');
end;
Автор: exteris
Дата сообщения: 07.06.2012 12:17
Grande
Вы событие на создание формы(или фрейма) назначаете уже после его создания.
Автор: Grande
Дата сообщения: 07.06.2012 12:31

Цитата:
Вы событие на создание формы(или фрейма) назначаете уже после его создания.


Пробовал менять местами - Access Violation.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374

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


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