Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.12.2009, 14:06   #11
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
Все равно не пойму,как описать это код?
поищите по форуму создание консольных приложений и классов внутри них, тысячу раз приводились примеры. В данном случае ответ на ваш вопрос дан и проблема уже в создании консольного приложения или сервиса (примеры создания которого тоже приводились).
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 03.12.2009, 14:18   #12
Baaandit
Заблокирован
 
Регистрация: 10.11.2009
Сообщений: 99
По умолчанию

Ясно, спасибо за код. Да я знаю как создавать консольные приложения. Щас буду еще разбираться.
Baaandit вне форума Ответить с цитированием
Старый 03.12.2009, 15:16   #13
Baaandit
Заблокирован
 
Регистрация: 10.11.2009
Сообщений: 99
По умолчанию

Все таки еще есть вопросы.Вот такой код оформил-вроде запускается, ну и не работает.

rogram Project1;

uses
Windows, Messages, Classes;

const
DBT_DeviceArrival = $8000;
DBT_DeviceRemoveComplete = $8004;
DBTF_Media = $0001;
DBT_DevTyp_Volume = $0002;

type
TF = class
protected
FWnd: HWnd;
constructor Create;
procedure WndProc(var Msg:TMessage); message WM_DeviceChange;
end;

constructor TF.Create;
begin
inherited Create;
FWnd := AllocateHWnd(WndProc);
end;

type
PDevBroadcastHdr = ^TDevBroadcastHdr;
TDevBroadcastHdr = packed record
dbcd_size: DWORD;
dbcd_devicetype: DWORD;
dbcd_reserved: DWORD;
end;

type
PDevBroadcastVolume = ^TDevBroadcastVolume;
TDevBroadcastVolume = packed record
dbcv_size: DWORD;
dbcv_devicetype: DWORD;
dbcv_reserved: DWORD;
dbcv_unitmask: DWORD;
dbcv_flags: Word;
end;


procedure panelzadach;
var msg:tmsg;
begin
while GetMessage( Msg,0, 0, 0) do
begin
TranslateMessage(msg);
DispatchMessage(msg);
end;
end;

function GetDrive(pDBVol: PDevBroadcastVolume): string;
var
i: Byte;
Maske: DWORD;
begin
Maske := pDBVol^.dbcv_unitmask;
for i := 0 to 25 do
begin
if (Maske and 1) = 1 then
Result := Char(i + Ord('A')) + ':';
Maske := Maske shr 1;
end;
end;
procedure tf.WndProc(var Msg:TMessage);
var drive:string;
begin
case Msg.wparam of
DBT_DEVICEARRIVAL: if PDevBroadcastHdr(Msg.lParam)^.dbcd_ devicetype = DBT_DevTyp_Volume then begin
Drive :=GetDrive(PDevBroadcastVolume(Msg. lParam));
// showmessage(drive);
end
// else Result:=DefWindowProc(FWnd,Msg,wPar am,lParam);-Здешь ошибку выдает
end;
end;
{$R *.res}
begin
panelzadach;
end.

Посмотрите что не так?

Последний раз редактировалось Baaandit; 03.12.2009 в 15:50.
Baaandit вне форума Ответить с цитированием
Старый 03.12.2009, 16:22   #14
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

в правильном направлении движетесь, но класс забыли вызвать и еще кой-чего:
Код:
type
 TF = class
 protected
  FWnd: HWnd;
  constructor Create;
  destructor Destroy;
  procedure WndProcc(var Msg:TMessage); message WM_DeviceChange;
end;

PDevBroadcastHdr = ^TDevBroadcastHdr;
 TDevBroadcastHdr = packed record
 dbcd_size: DWORD;
 dbcd_devicetype: DWORD;
 dbcd_reserved: DWORD;
end;

 PDevBroadcastVolume = ^TDevBroadcastVolume;
 TDevBroadcastVolume = packed record
 dbcv_size: DWORD;
 dbcv_devicetype: DWORD;
 dbcv_reserved: DWORD;
 dbcv_unitmask: DWORD;
 dbcv_flags: Word;
end;

const
  WinTitle = 'TKtorrent';

  DBT_DeviceArrival = $8000;
  DBT_DeviceRemoveComplete = $8004;
  DBTF_Media = $0001;
  DBT_DevTyp_Volume = $0002;

var
  FWnd: HWnd;
  Handle: HWND;
  WinClass: TWndClass;
  Msg: tmsg;
  t: tf;

constructor TF.Create;
begin
 inherited Create;
 FWnd:= AllocateHWnd(WndProcc);
end;
destructor TF.Destroy;
begin
 inherited;
 deAllocateHWnd(fWnd)
end;

procedure tf.WndProcc(var Msg:TMessage);
begin
 if Msg.wparam = DBT_DEVICEARRIVAL then
  if PDevBroadcastHdr(Msg.lParam)^.dbcd_devicetype = DBT_DevTyp_Volume then 
   messagebox(handle, pchar(GetDrive(PDevBroadcastVolume(Msg. lParam))),'',0)
end;

////////////////////////////// необязательно
function WndProc(hnd, wmsg, wparam, lparam: integer): integer; stdcall;
begin
 case wmsg of
  WM_DESTROY: begin
               PostQuitMessage(0);

              end;
  else Result:= DefWindowProc(hnd, wmsg, wparam, lparam);
 end
end;

procedure CreateMySelf;
begin
 with WinClass do begin
  lpszClassName:= WinTitle;
  lpfnWndProc  := @WndProc;
  cbClsExtra   := 0;
  cbWndExtra   := 0;
  hInstance    := hInstance
 end;

 windows.RegisterClass(WinClass);
 Handle:= CreateWindowEx(WS_EX_WINDOWEDGE, WinTitle, 'API', WS_MINIMIZE,
 integer(CW_USEDEFAULT), integer(CW_USEDEFAULT), 0, 0, 0, 0, hInstance, nil)
end;
//////////////////////////////

begin
 CreateMySelf;

 t:= tf.Create;

 try while GetMessage(Msg, 0, 0, 0) do begin
  TranslateMessage(Msg);
  DispatchMessage(Msg)
 end finally t.destroy end

end.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 03.12.2009 в 16:27.
raxp вне форума Ответить с цитированием
Старый 03.12.2009, 16:44   #15
Baaandit
Заблокирован
 
Регистрация: 10.11.2009
Сообщений: 99
По умолчанию

Все работает.Еще раз спасибо.

Последний раз редактировалось Baaandit; 03.12.2009 в 16:53.
Baaandit вне форума Ответить с цитированием
Старый 03.12.2009, 17:05   #16
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

всегда поможем, чем cможем
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Флешка не форматировается! РаТи Компьютерное железо 3 03.11.2009 14:37
Флешка Sparky Компьютерное железо 6 05.10.2009 11:57
Поломалась флешка Arigato Компьютерное железо 12 25.05.2009 11:09
Можно ли своей функцей менять цвет ячейки в которую эта фу-я вставлена? maeglah Microsoft Office Excel 3 21.04.2009 05:23
Флешка delphin100 Операционные системы общие вопросы 10 08.01.2008 20:03