Forums.Avtograd.Ru: Вопросы По Delphi, Pascal - Forums.Avtograd.Ru

Перейти к содержимому

  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

Вопросы По Delphi, Pascal

#1 Пользователь офлайн   up

  • Старожил
  • PipPipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 193
  • Регистрация: 01 Ноябрь 07

Отправлено 01 Ноябрь 2007 - 13:22

Сабж :rolleyes:
0


  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

Другие ответы в этой теме

#61 Пользователь офлайн   glVertex

  • Новичок
  • Pip
  • Группа: Пользователи
  • Сообщений: 61
  • Регистрация: 03 Ноябрь 07

Отправлено 29 Ноябрь 2007 - 21:24

Просмотр сообщенияup (29.11.2007, 17:28):

Я звиняюсь. А справку по TImage почитать? Там дожно быть. На память чота RGBColor := Image.Pixel[x,y];


Писал бы я еслиб спарвку не прочел :)

Все функции по содержимому Image лежат в подклассе Canvas.
Искал и в Image и в Canvas и ниче ненашел.
Мож APIшку какую нибуть посоветуете, а мож я че нибуть просматрел.
0

#62 Пользователь офлайн   up

  • Старожил
  • PipPipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 193
  • Регистрация: 01 Ноябрь 07

Отправлено 29 Ноябрь 2007 - 21:47

ScanLine
0

#63 Пользователь офлайн   glVertex

  • Новичок
  • Pip
  • Группа: Пользователи
  • Сообщений: 61
  • Регистрация: 03 Ноябрь 07

Отправлено 29 Ноябрь 2007 - 22:11

спасибо
0

#64 Пользователь офлайн   Grast

  • Новичок
  • Pip
  • Группа: Пользователи
  • Сообщений: 39
  • Регистрация: 01 Ноябрь 07

Отправлено 03 Декабрь 2007 - 20:40

Вопрос:
есть 2а "комбо бокса" и эдит...
допустим в 1ой комбобоксе значения (А, B, C), во 2ом ( X, Y, Z)....
как задать числа этим значениям, т.е. А=2, В=4, С=1, Х=1, Y=2, Z=3....
все это для того чтобы потом божно было после выбора, например их сложить и вывести результат в эдите по нажатию на кнопку...
т.е. например комбобокс1 выбираем В, в комбобоксе2 выбираем Y.... допустим их складываем...ровно 4+2=6
0

#65 Пользователь офлайн   ANDREW

  • Новичок
  • Pip
  • Группа: Пользователи
  • Сообщений: 18
  • Регистрация: 02 Ноябрь 07

Отправлено 05 Декабрь 2007 - 13:01

Всем привет! У меня есть несколько вопросов по xml и работе с сайтом.
1. Как загрузить rss ленту и правильно её отобразить? (на примере http://treker.net.ru/rss.php_) она передает xml код, если нет то поправьте
2. Мне надо передать в поле логин/пароль данные, но из программы, т.е. две Tedit и одна Tbutton, передают, скажем на (http://treker.net.ru/) логин и пароль. Как это реализовать?
3. Как мне отрезать половину html файла? т.е. я хочу что бы загрузилась не вся страница, а только лишь её отдельный блок
0

#66 Пользователь офлайн   Exception

  • Активный пользователь
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 550
  • Регистрация: 01 Ноябрь 07

Отправлено 06 Декабрь 2007 - 10:48

Я вот одного не понимаю. Почему когда из программы вызываем файл справки CHM функцией ShellExecute, то если программа с манифестом, то файл справки показывается без манифеста - то есть со старым стандартным оформлением. Наблюдал во многих других программах которые вызывают свои файлы справок - там справка появляется с современным оформлением. И вот тут недавно наткнулся на функцию
function HtmlHelp(hwndCaller: THandle; pszFile: PChar; uCommand: Cardinal; dwData: DWord): THandle; stdcall; external 'hhctrl.ocx' name 'HtmlHelpA';

где достаточно написать
HtmlHelp(Handle, PChar('Help.chm'), 0, 0)

и файлы справки, вызываемые из программы, выглядят с современным стилем.
Кто знает что за белиберду приходится такую делать. Почему так...
0

#67 Пользователь офлайн   KORENHACK

  • Старожил
  • PipPipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 464
  • Регистрация: 01 Ноябрь 07

Отправлено 07 Декабрь 2007 - 09:55

Народ, подскажите пожалуйста как динамически создавать вкладки в браузере.
0

#68 Пользователь офлайн   Explorer

  • Активный пользователь
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 700
  • Регистрация: 09 Ноябрь 07

Отправлено 07 Декабрь 2007 - 18:30

Подскажите пожалуйста как центрировать диалог открытия файлов по центру экрана. В проект добавляю модуль CommDlg и использую примерно следующий код в WM_COMMAND:
	  1000 : begin
			   ofn.lStructSize := sizeof(ofn);
			   ofn.hWndOwner := dialog;
			   ofn.hInstance   := HInstance;
			   ofn.lpstrFilter := filterstring;
			   ofn.lpstrFile := filename;
			   ofn.nMaxFile :=  512;
			   ofn.lpstrTitle := 'Открыть требуемый файл...';
			   ofn.Flags := OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or OFN_LONGNAMES or
							OFN_EXPLORER or OFN_HIDEREADONLY;
			   if Getopenfilename(ofn) then
			   begin
				 if Getfileinfo(filename, hWnd) <> 0 then <действие>;
			   end;
			 end;

Если это делается с помощью хуков, дайте пример реализации. Буду благодарен. Спасибо.
0

#69 Пользователь офлайн   up

  • Старожил
  • PipPipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 193
  • Регистрация: 01 Ноябрь 07

Отправлено 07 Декабрь 2007 - 22:49

сохранение/загрузка позиции
unit MsgHookU;

interface

uses Windows, Messages, {SysLog,} SysUtils, JclRegistry, Classes, SaveDlgReplace,
  CompanyConst, ProgramConst, GlobalDataU{, KOL}, advApiHook;

function HookCallWndProc(Switch : Boolean): Boolean;
procedure CopyHookHandle;

implementation

var
  WinProcHook: HHOOK = 0;

{* Проверяет, является ли окно диалогом открытия/сохраения *}
function CheckIsOpenSaveDlg(AWhnd: HWND): boolean;
begin
//  Result := false;
//  Result := FindWindowEx(AWhnd, 0, 'SHELLDLL_DefView', nil)<>0;
//  if not Result then exit;
  Result := GetDlgItem(AWhnd, 1184)<>0; // PlacesBar
  if not Result then exit;
  Result := GetDlgItem(AWhnd, 1088)<>0; // ToolBar
  if not Result then exit;
  Result := GetDlgItem(AWhnd, 1137)<>0; // Комбобокс выбора папки
  if not Result then exit;
  Result := GetDlgItem(AWhnd, 0001)<>0; // Кнопка
end;

{* Сохранение позиции и размера диалога в реестр *}
procedure SaveDlgPosToReg(AWnd: HWND);
var
  WinRect: TRect;
begin
  GetWindowRect(AWnd, WinRect);
  RegCreateKey(HKEY_CURRENT_USER, sProgramRegRoot, '');
  RegWriteInteger(HKEY_CURRENT_USER, sProgramRegRoot, 'DlgPosLeft', WinRect.Left);
  RegWriteInteger(HKEY_CURRENT_USER, sProgramRegRoot, 'DlgPosTop', WinRect.Top);
  RegWriteInteger(HKEY_CURRENT_USER, sProgramRegRoot, 'DlgPosWidth', WinRect.Right-WinRect.Left);
  RegWriteInteger(HKEY_CURRENT_USER, sProgramRegRoot, 'DlgPosHeight', WinRect.Bottom-WinRect.Top);
end;

{* Загрузка из реестра позиции и размера диалога *}
procedure LoadDlgPosFrmReg(AWnd: HWND);
begin
  try
  SetWindowPos(AWnd, 0,
	RegReadInteger(HKEY_CURRENT_USER, sProgramRegRoot, 'DlgPosLeft'),
	RegReadInteger(HKEY_CURRENT_USER, sProgramRegRoot, 'DlgPosTop'),
	RegReadInteger(HKEY_CURRENT_USER, sProgramRegRoot, 'DlgPosWidth'),
	RegReadInteger(HKEY_CURRENT_USER, sProgramRegRoot, 'DlgPosHeight'),
	SWP_NOZORDER);
  except end;
end;

{* Функция хука оконной процедуры *}
function WindowMsgProc(code : integer; wParam : longint; lParam : longint) : longint; stdcall;
var
  Msg: PCWPStruct absolute Pointer(lParam);
begin
//  if WinProcHook=0 then Log(ProcessNameG+' fatal!!!');
  if code<0 then begin
	Result := CallNextHookEx(WinProcHook, Code, wParam, lParam);
	Exit;
  end;
  { флаг code определяет тип произошедшего события. }
  if code = HC_ACTION then
  begin
//	if SameText(ProcessNameG, 'notepad.exe') then begin
	  case Msg.message of
	  WM_SHOWWINDOW: if CheckIsOpenSaveDlg(Msg.hwnd) then LoadDlgPosFrmReg(Msg.hwnd);
	  WM_CLOSE, WM_DESTROY: if CheckIsOpenSaveDlg(Msg.hwnd) then SaveDlgPosToReg(Msg.hwnd);
	  end;
//	end;
  end;
  { Передаём сообщение дальше по цепочке hook-ов. }
  CallNextHookEx(WinProcHook, Code, wParam, lParam);
  Result := 0;
end;

{* Выгрузка экзепмпляров DLL из всех программ *}
procedure ForceHookUnload;
begin
  PostMessage(HWND_BROADCAST, WM_NULL, 0, 0);
end;

{* Процедура установки HOOK-а *}
function HookCallWndProc(Switch : Boolean): Boolean;
begin
  Result := false;

  if Switch then
  begin
	{ Устанавливаю HOOK, если он не установлен (switch=true). }
	StopThreads;
	GlobalData.WinProcHook := SetWindowsHookEx(WH_CALLWNDPROC, @WindowMsgProc, HInstance, 0);
	WinProcHook := GlobalData.WinProcHook;
	RunThreads;
	{ тут: WH_GETMESSAGE - тип hook-а; @SysMsgProc - адресс процедуры обработки;
	  HInstance - указывает на DLL, содержащую процедуру обработки hook-а; последний
	  параметр указывает на thread, с которым ассоциирована процедура обработки hook-а;
	}
	Result := GlobalData.WinProcHook<>0;
//	MessageBox(0, 'HOOK установлен !', 'Сообщение из DLL', 0);
  end else begin
	if HasInDialog then Exit;
	{ Снимаю HOOK, если он установлен (switch=false). }
	InHookedeProc.Enter;
	UnhookWindowsHookEx(GlobalData.WinProcHook);
	ForceHookUnload;
//	MessageBox(0, 'HOOK снят !', 'Сообщение из DLL', 0);
//	GlobalData.WinProcHook := 0;
	Result := true;
	InHookedeProc.Leave;
  end;
end;

procedure CopyHookHandle;
begin
  WinProcHook := GlobalData.WinProcHook;
//  if WinProcHook=0 then Log(ProcessNameG+' = 0');
end;
end.


вспомогательный юнит

unit GlobalDataU;

interface

uses Windows, CompanyConst, ProgramConst;

{* структура, поля которой будут отображены в файл подкачки *}
type
  PGlobalDLLData = ^TGlobalDLLData;
  TGlobalDLLData = packed record
	WinProcHook: HHook; // дескриптор установленной ловушки
	PlaceBarsCountOffset: Cardinal;
  end;

var
  GlobalData: PGlobalDLLData;

procedure OpenGlobalData;
procedure CloseGlobalData;

implementation

{* имя объекта файлового отображения *}
const
  MMFName: PChar = sCompanyName+' '+sProgramName+' GlobalData';

{* Хендл обекта памяти *}
var
  MMFHandle: THandle;

procedure OpenGlobalData();
begin
  {получаем объект файлового отображения}
//  MMFHandle:= CreateFileMapping(DWord(-1), nil, PAGE_READWRITE, 0, SizeOf(TGlobalDLLData), MMFName); // можно так, но лучше: см. след. строку
  MMFHandle:= CreateFileMapping(INVALID_HANDLE_VALUE, nil, PAGE_READWRITE, 0, SizeOf(TGlobalDLLData), MMFName);

  if MMFHandle = 0 then
	MessageBox(0, 'Can''t create FileMapping', 'Error', 0);

  {отображаем глобальные данные на АП вызывающего процесса и получаем указатель
   на начало выделенного пространства}
  GlobalData:= MapViewOfFile(MMFHandle, FILE_MAP_ALL_ACCESS, 0, 0, SizeOf(TGlobalDLLData));
  if GlobalData = nil then
	begin
	  CloseHandle(MMFHandle);
	  MessageBox(0, 'Can''t make MapViewOfFile', 'Error', 0);
	end;

end;

procedure CloseGlobalData();
begin
  UnmapViewOfFile(GlobalData);
  CloseHandle(MMFHandle);
end;

end.

0

#70 Пользователь офлайн   KORENHACK

  • Старожил
  • PipPipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 464
  • Регистрация: 01 Ноябрь 07

Отправлено 08 Декабрь 2007 - 12:31

Здесь кто-нибудь, кроме как статьи пиз*ить из DW, хоть на что-нибудь способен?
Неужели никто про многовкладочность в браузерах не знает? <_<
0

#71 Пользователь офлайн   Explorer

  • Активный пользователь
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 700
  • Регистрация: 09 Ноябрь 07

Отправлено 08 Декабрь 2007 - 16:50

Up, и как использовать твой код? Он походу годится только для тебя... Столько всякой фигни ради хука какого-то диалога я никогда не видел. Да и опять в твоем примере про KOL оговорка и не факт что у других работать будет. Нужен способ попроще...
0

#72 Пользователь офлайн   up

  • Старожил
  • PipPipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 193
  • Регистрация: 01 Ноябрь 07

Отправлено 10 Декабрь 2007 - 12:41

код я выдрал из своей программы. переделай под себя или смотри msdn на тему диалога сохранения, там описанна юзверская функция для диалога, может её подпряч можна под нужные задачи.
0

#73 Пользователь офлайн   up

  • Старожил
  • PipPipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 193
  • Регистрация: 01 Ноябрь 07

Отправлено 10 Декабрь 2007 - 12:43

Просмотр сообщенияKORENHACK (8.12.2007, 12:31):

Здесь кто-нибудь, кроме как статьи пиз*ить из DW, хоть на что-нибудь способен?
Неужели никто про многовкладочность в браузерах не знает? <_<
Создаёшь динамический таб, также динамически пихаешь в него компонент браузера...
0

#74 Пользователь офлайн   Explorer

  • Активный пользователь
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 700
  • Регистрация: 09 Ноябрь 07

Отправлено 11 Декабрь 2007 - 00:26

Просмотр сообщенияup (10.12.2007, 12:41):

код я выдрал из своей программы. переделай под себя или смотри msdn на тему диалога сохранения, там описанна юзверская функция для диалога, может её подпряч можна под нужные задачи.

Как оказалось все очень просто. ;)
***
const
  WindowHeight = 415;
  WindowWidth = 560;
***
resourcestring
  FILTER_OPEN_DLG = 'Открыть файл';
***
function FuncDlgHook(Wnd : HWND; Msg : Cardinal; wParam, lParam : Integer) : UINT stdcall;
var
  x, y : Integer;
begin
  result := 0;
  case Msg of
	WM_INITDIALOG :
	  begin
		x := GetSystemMetrics(SM_CXSCREEN);
		y := GetSystemMetrics(SM_CYSCREEN);
		MoveWindow(FindWindow(nil, PChar(FILTER_OPEN_DLG)), (x div 2) - (WindowWidth div 2), (y div 2) - (WindowHeight div 2), WindowWidth, WindowHeight, true);
	  end;
  end;
end;
***
	ofn.lpstrTitle := PChar(FILTER_OPEN_DLG);
	ofn.lpfnHook := FuncDlgHook;
	ofn.Flags := OFN_EXPLORER or OFN_CREATEPROMPT or OFN_FILEMUSTEXIST or OFN_HIDEREADONLY or OFN_PATHMUSTEXIST or OFN_ENABLEHOOK;
***

Правда пришлось подогнать размеры, хотя в шаблоне системной библиотеки они совсем другие. Но думаю для знающих не проблема выполнить преобразование метрик. :)
Вот что значит компактность кода... ;)
0

#75 Пользователь офлайн   KORENHACK

  • Старожил
  • PipPipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 464
  • Регистрация: 01 Ноябрь 07

Отправлено 12 Декабрь 2007 - 08:25

Просмотр сообщенияup (10.12.2007, 13:43):

Создаёшь динамический таб, также динамически пихаешь в него компонент браузера...

Я в курсе, ты бы мне сказал, как к динамически созданному twebbrowser обратиться?
0

#76 Пользователь офлайн   musashi

  • Активный пользователь
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 573
  • Регистрация: 01 Ноябрь 07

Отправлено 12 Декабрь 2007 - 10:16

2 коренхак:

как вариант, заносить Handle всех созданных табов в массив, а там уже будет просто
0

#77 Пользователь офлайн   Barrabas

  • Пользователь
  • PipPip
  • Группа: Пользователи
  • Сообщений: 431
  • Регистрация: 01 Ноябрь 07

Отправлено 12 Декабрь 2007 - 10:56

Просмотр сообщенияKORENHACK (12.12.2007, 9:25):

Я в курсе, ты бы мне сказал, как к динамически созданному twebbrowser обратиться?

странно, а как ты к переменным обращаешься?
какая разница то, есть переменная (объект - экземпляр класса twebbrowser) вот и обращайся к ней.

а после добавления в коллекцию контролов формы или куда ты там его пихаешь, там же и ищи его. Как добавляешь то, где код?
0

#78 Пользователь офлайн   DartV

  • Пользователь
  • PipPip
  • Группа: Пользователи
  • Сообщений: 238
  • Регистрация: 01 Ноябрь 07

Отправлено 12 Декабрь 2007 - 18:29

Просмотр сообщенияKORENHACK (12.12.2007, 8:25):

Я в курсе, ты бы мне сказал, как к динамически созданному twebbrowser обратиться?
Ты какой компонент для вкладок используешь?
Меня можно найти в IRC на каналах #programmers, #delphimaster, #delphiintru @ irc.tlt.ru (Dalnet.Ru), ник - Amidamaru
0

#79 Пользователь офлайн   KORENHACK

  • Старожил
  • PipPipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 464
  • Регистрация: 01 Ноябрь 07

Отправлено 12 Декабрь 2007 - 19:13

Просмотр сообщенияDartV (12.12.2007, 19:29):

Ты какой компонент для вкладок используешь?

tpagecontrol
0

#80 Пользователь офлайн   KORENHACK

  • Старожил
  • PipPipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 464
  • Регистрация: 01 Ноябрь 07

Отправлено 12 Декабрь 2007 - 19:18

Просмотр сообщенияmusashi (12.12.2007, 11:16):

2 коренхак:

как вариант, заносить Handle всех созданных табов в массив, а там уже будет просто

Как узнать имя созданного объекта? Оно автоматически проставляется, т.е. twebbrowser1, twebbrowser2...?
0

  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей