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

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


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


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

Выпуск № 078
от 27.09.2002, 19:00

Администратор:
Имя: Калашников О.А.
URL: Информационный ресурс
ICQ: 68951340
Россия, Москва
О рассылке:
Задано вопросов: 197
Отправлено ответов: 331
Активность: 168.0 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

Артём Шегеда
Статус: Профессиональный
Общий рейтинг: 117.51
URL: Пристанище неодинокого программиста
[Подробней >>]
Ekaterina
Статус: Начальный
Общий рейтинг: 127.27
[Подробней >>]
Pablo
Статус: Профессиональный
Общий рейтинг: 132.03
URL: Моя страничка
[Подробней >>]
 
Necro
Статус: Доверительный
Общий рейтинг: 112.41
[Подробней >>]
Idle Sign
Статус: Начальный
Общий рейтинг: 133.33
[Подробней >>]
Jadd
Статус: Опытный
Общий рейтинг: 153.84
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 193. Господа эксперты, подскажите, как вызвать api(оболочку) сканера из своей программы?... (ответов: 1)
Вопрос № 194. Здрасьте, эксперты, такой вопрос: Как отловить Handle кнопки "Пуск", и "поизвращатьс... (ответов: 5)

Вопросов: 2, ответов: 6


 Вопрос № 193

Господа эксперты, подскажите, как вызвать api(оболочку) сканера из своей программы?



Вопрос отправлен: 22.09.2002, 23:32
Отправитель: Alex

[Следующий вопрос >>] [Список вопросов]

Отвечает Артём Шегеда

Здравствуйте, Alex!

Надеюсь, эта ссылка поможет...
http://www.swissdelphicenter.ch/torry/showcode.php?id=971
Здесь говорится, что нужно установить Imaging из стандартной поставки Windows98, а потом в Delphi импортировать ActiveX-контрол "Kodak Image Scan Control".

Ответ отправлен: 24.09.2002, 13:29
Отправитель: Артём Шегеда


 Вопрос № 194

Здрасьте, эксперты, такой вопрос:
Как отловить Handle кнопки "Пуск", и "поизвращаться" над ней?



Вопрос отправлен: 24.09.2002, 18:58
Отправитель: Andy

[Следующий вопрос >>] [Список вопросов]

Отвечает Ekaterina

Приветствую Вас, Andy!
Чтобы получить Handle кнопки Пуск сделайте следующее:
Wnd := FindWindow('Shell_TrayWnd', nil);//"TaskBar"
Wnd := FindWindowEx(Wnd, HWND(0),'Button', nil);//"Start"
А вот пример, как "поизвращаться" над ней: ;))
unit Main;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls,ShellAPI;
const
MAX_BUFFER = 6;
type
TForm1 = class(TForm)
Button1: TButton;
Timer1: TTimer;
Button2: TButton;
Image1: TImage;
Edit1: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Button3: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button3Click(Sender: TObject);
private
HW : HWND;
DC : HDC;
R : TRect;
FNumber : integer;
Buffer : array[1..MAX_BUFFER] of TBitmap;
TrayIcon : TNotifyIconData;
procedure CreateFrames;
procedure DestroyFrames;
procedure BuildFrames;
procedure NotifyIcon(var Msg : TMessage);message WM_USER + 100;
procedure OnMinimizeEvt(Sender : TObject);
end;
var
Form1: TForm1;
implementation
uses Math;
{$R *.DFM}
// Создаём буфер для спрайтов
procedure TForm1.CreateFrames;
var i : integer;
begin
for i:=1 to MAX_BUFFER do
begin
Buffer[i] := TBitmap.Create;
Buffer[i].Height := R.Bottom-R.Top;
Buffer[i].Width := R.Right-R.Left;
Buffer[i].Canvas.Brush.Color := clBtnFace;
Buffer[i].Canvas.Pen.Color := clBtnFace;
Buffer[i].Canvas.Rectangle(0,0,Buffer[i].Width,Buffer[i].Height);
end;
end;
procedure TForm1.DestroyFrames;
var i : integer;
begin
for i:=1 to MAX_BUFFER do
begin
Buffer[i].Destroy;
end;
end;
// Подготавливает сегменты/спрайты для анимации
procedure TForm1.BuildFrames;
var i,j,k,H,W : integer;
Y : double;
begin
H := R.Bottom-R.Top;
W := R.Right-R.Left;
Image1.Width := W;
Image1.Height:= H;
for i := 1 to MAX_BUFFER-1 do
//Буфер[MAX_BUFFER] используется для хранения оригинального битмапа
for j:= 1 to W do
for k:=1 to H do
begin
Y := 2*Sin((j*360/W)*(pi/180)-20*i);
Buffer[i].Canvas.Pixels[j,k-Round(Y)]:= Buffer[6].Canvas.Pixels[j,k];
end;
end;
procedure TForm1.OnMinimizeEvt(Sender : TObject);
begin
ShowWindow(Application.Handle,SW_HIDE);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
HW := FindWindowEx(FindWindow('Shell_TrayWnd',nil),0,'Button',nil);
GetWindowRect(HW,R);
DC := GetWindowDC(HW);
CreateFrames;
FNumber :=1;
TrayIcon.cbSize := SizeOf(TrayIcon);
TrayIcon.Wnd := Form1.Handle;
TrayIcon.uID := 100;
TrayIcon.uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
TrayIcon.uCallbackMessage := WM_USER + 100;
TrayIcon.hIcon := Application.Icon.Handle;
Shell_NotifyIcon(NIM_ADD,@TrayIcon);
Application.OnMinimize := OnMinimizeEvt;
end;
// Уведомляем обработчик
procedure TForm1.NotifyIcon(var Msg : TMessage);
begin
case Msg.LParam of
WM_LBUTTONDBLCLK :
begin
ShowWindow(Application.Handle,SW_SHOW);
Application.Restore;
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
//Получаем изображение оригинальной кнопки, чтобы потом использовать его
//когда анимация завершится
BitBlt(Buffer[MAX_BUFFER].Canvas.Handle,0,0,R.Right-R.Left,R.Bottom-R.Top,
DC,0,0,SRCCOPY);
BuildFrames;
Image1.Canvas.Draw(0,0,Buffer[MAX_BUFFER]);
Button2.Enabled := true;
if Edit1.Text <> '' then
Timer1.Interval := StrToInt(Edit1.Text)
else
begin
Timer1.Interval := 100;
Edit1.Text := '100';
end;
end;
// Освобождение ресурсов
procedure TForm1.FormDestroy(Sender: TObject);
begin
Timer1.Enabled := false;
BitBlt(DC,0,0,R.Right-R.Left,R.Bottom-R.Top, Buffer[MAX_BUFFER].Canvas.Handle,0,0,SRCCOPY);
ReleaseDC(HW,DC);
DestroyFrames; // не забудьте сделать это !!!
Shell_NotifyIcon(NIM_DELETE,@TrayIcon);
end;
// Анимация начинается здесь
procedure TForm1.Timer1Timer(Sender: TObject);
begin
BitBlt(DC,0,0,R.Right-R.Left,R.Bottom-R.Top, Buffer[FNumber].Canvas.Handle,0,0,SRCCOPY);
Inc(FNumber);
if (FNumber > MAX_BUFFER-1) then FNumber := 1;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Timer1.Enabled := not Timer1.Enabled;
if not Timer1.Enabled then
begin
BitBlt(DC,0,0,R.Right-R.Left,R.Bottom-R.Top, Buffer[MAX_BUFFER].Canvas.Handle,0,0,SRCCOPY);
Button2.Caption := '&Animate';
Button1.Enabled := true;
end
else
begin
Button2.Caption := '&Stop';
Button1.Enabled := false;
end;
end;
// Обеспечиваем ввод числовых значений
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9']) and (Key <> Chr(VK_BACK)) then
Key := #0;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caNone;
Application.Minimize;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
PostMessage(Form1.Handle,WM_DESTROY,0,0);
Application.Terminate;
end;
end.
Источник: http://www.sources.ru/delphi/




Ответ отправлен: 25.09.2002, 09:03
Отправитель: Ekaterina


Отвечает Pablo

Приветствую Вас, Andy!
Тебе нада получить хендл рабочего стола, потом получить хедл кнопки старт, а вообще в инете гдето я видел исходник получения доступа к кнопке пуск. Поищи на www.sources.ru.

Ответ отправлен: 25.09.2002, 07:53
Отправитель: Pablo


Отвечает Necro

Приветствую Вас, Andy!
В W98 было так:
StartButton := FindWindowEx (FindWindow('Shell_TrayWnd', nil), 0,'Button', nil);
А дальше делай, что хочешь. Можешь, например, картинку поменять.

Приложение:

Ответ отправлен: 24.09.2002, 19:14
Отправитель: Necro


Отвечает Idle Sign

Добрый день, Andy!
"ловим" кнопку:
FindWindowEx(FindWindow('Shell_TrayWnd',nil),0,'Button',nil)
извращаемся (в данном случае запрещаем):
EnableWindow(handle,false);

Ответ отправлен: 24.09.2002, 19:29
Отправитель: Idle Sign


Отвечает Jadd

Приветствую Вас, Andy!
Вот тебе кусок процы, которая прячет кнопку:
var
ClassName: array[0..255] of char;
Wnd, Child :HWnd;
begin
Wnd := Windows.FindWindow('Shell_TrayWnd', '');
if Wnd <> 0 then
begin
Child := GetWindow(Wnd, CW_CHILD);
repeat
GetClassName(Child, ClassName, 255);
if StrPas(ClassName) = 'Button' then
begin
ShowWindow(Child, SW_HIDE);
Break;
end else
Child:=GetWindow(Wnd, GW_HWNDNEXT);
until Child = 0
end;
end;
Дальше по аналогии.

Ответ отправлен: 24.09.2002, 20:31
Отправитель: Jadd



Форма отправки вопроса

Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook" и "Microsoft Outlook Express". В программе The Bat! подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте, что в некоторых браузерах могут стоять запреты на открытие других окон, а также "чрезмерное" кэширование данных, при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

© 2002 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


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


Получить ответов:


 Выбор рассылки

Программисту
Assembler (39)
C / C++ (29)
Perl (7)
Delphi (16)
Pascal (23)
Basic / VBA (12)
Java / JavaScript (10)
PHP (6)
MySQL / MSSQL (9)
Пользователю
Windows 95/98/Me (40)
Windows NT/2000/XP (31)
"Железо" (35)
Поиск информации (15)
Администратору
Windows NT/2000/XP (16)
Linux / Unix (18)
Юристу
Гражданское право (8)
Семейное право (4)
Трудовое право (6)
КоАП (5)

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




Яндекс цитирования

© 2002 Россия, Москва. Авторское право: RusFAQ.ru

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное