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

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

Автор: ShIvADeSt
Дата сообщения: 17.12.2011 12:56
RuPurple

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

Alignment alClient не подходит?
Автор: Frodo_Torbins
Дата сообщения: 17.12.2011 13:02
RuPurple

Цитата:
Подскажите, пожалуйста, имеется ли возможность у компоненты TWebBrowser прикрепить его границы к границам окна, так чтобы при изменении размеров окна размер области просмотра веб-браузера тоже менялся?
Такая же как и у любого другого компонента - через Anchors либо Align.

Цитата:
Имеется ли в природе компонента для Дельфи для открытия и просмотра html-страничек, которая не использует для этой цели Internet Explorer?
Есть такая, THTMLViewer называется.
Автор: YuriyRR
Дата сообщения: 17.12.2011 16:08
RuPurple

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

http://code.google.com/p/thtmlviewer/
Автор: RuPurple
Дата сообщения: 17.12.2011 19:02
ShIvADeSt
Frodo_Torbins
YuriyRR
Спасибо за ответы!
Но свойство Alignment alClient мне действительно не подходит. Оно расширяет веб-браузер на всю форму. А на ней, кроме веб-браузера, есть еще и другие элементы, которые оказываются либо над браузером либо под ним. Свойства Anchors у TWebBrowser я не нашел. Мне нужно чтобы границы TWebBrowser перемещались вместе с границами формы, но на некотором расстоянии от нее. Такое возможно?
Автор: wasilissk
Дата сообщения: 17.12.2011 19:53
RuPurple
Панель кинуть, на нее браузер с alClient. У панели есть Anchors, например.
Автор: ShIvADeSt
Дата сообщения: 18.12.2011 00:31
RuPurple

Цитата:
Мне нужно чтобы границы TWebBrowser перемещались вместе с границами формы, но на некотором расстоянии от нее. Такое возможно?

Событие OnResize у формы и расчет размеров вебброузера. Кода 2 строчки.
Автор: RuPurple
Дата сообщения: 18.12.2011 14:13
wasilissk
ShIvADeSt
Большое спасибо! Я использовал обе идеи. Вначале поместил веб-браузер на панель и задал ее размеры и свойства Anchors. Но потом заметил, что на Windows 7 клиентский размер формы немного меньше чем на XP, и в результате то, что хорошо смотрелось в XP, в Seven оказалось слишком близко к границе формы. Поэтому, по событию OnCreate формы организовал расчет размеров и положения элементов управления и панели.
Автор: Frodo_Torbins
Дата сообщения: 18.12.2011 16:15
RuPurple
Если есть возможность, то стоит использовать более новую версию делфи. Там эти проблемы исправлены.
Автор: Postscriptum
Дата сообщения: 19.12.2011 07:32
Такая проблемка - на форме несколько компонентов TPanel. Насколько я знаю, на компоненты можно назначить один обработчик событий (на OnClick, например). Как это сделать и как в этом обработчике узнать - по какому конкретно компоненту щелкнули мышью (его имя, например)?
Автор: marser
Дата сообщения: 19.12.2011 07:42
Postscriptum

Цитата:
Насколько я знаю, на компоненты можно назначить один обработчик событий (на OnClick, например). Как это сделать

Мышкой в designеime или операцией присваивания в runtime

Цитата:
как в этом обработчике узнать - по какому конкретно компоненту щелкнули мышью (его имя, например)?

TPanel(Sender).Name
Автор: Postscriptum
Дата сообщения: 19.12.2011 07:49
marser
Спасибо!
Автор: OOD
Дата сообщения: 20.12.2011 15:25
Подскажите такая проблема запускается
OUTLOOK

Код:
WinExec ('C:\Program Files\Microsoft Office\Office14\OUTLOOK.exe', SW_MINIMIZE);
sleep(1000);
дальше идет другой код
Автор: salexn1
Дата сообщения: 20.12.2011 15:53
OOD
Еще более неправильно передавать жесткий путь к Outlook
И потом, почему бы не заюзать Automation Object...
Зачем просто открывать outlook?
Автор: OOD
Дата сообщения: 20.12.2011 17:29
salexn1
Его нужно свернуть в трей т.е. задача какая:
1-запускаем OUTLOOK
2-ждем пока он запуститься
3-анализирует список запущеных окон
4-позиционируемся на окне OUTLOOK-ка и сворачиваем его в трей.
все выполнено и работает кроме пункта 2.
т.е. можно смотреть в процессы пока там появиться OUTLOOK, но помоему была какая то команда позволяющая проверить что передает WinExec , или определить действительно ли запустилось приложение....
Автор: YuriyRR
Дата сообщения: 20.12.2011 17:39

Цитата:
можно смотреть в процессы пока там появиться OUTLOOK

В процессах иожет появиться, а окна еще не созданы и как результат не найдет окно.
Автор: OOD
Дата сообщения: 20.12.2011 17:44
YuriyRR

Цитата:
В процессах иожет появиться, а окна еще не созданы и как результат не найдет окно.
совершенно верно, значит выход один в цикле гонять поиск окна по заголовку окна пока оно не появиться?
Автор: wasilissk
Дата сообщения: 20.12.2011 17:53
OOD

Цитата:
Как сделать пока не выполниться WinExec , чтобы не выполнялась следующая строка кода?

Схематично

Код:
si: TStartupInfo;
pi: TProcessInformation;
...
si.wShowWindow = SW_HIDE;
...
hHandle := CreateProcess(... Outlook..., pi);
while
WaitForSingleObject(pi.hHandle, INFINITE) <> WAIT_ABANDONED;
Автор: Frodo_Torbins
Дата сообщения: 20.12.2011 20:22
OOD
wasilissk указал правильное направление, но вместо WaitForSingleObject нужно использовать WaitForInputIdle.
Автор: YuriyRR
Дата сообщения: 21.12.2011 01:07
OOD

Цитата:
гонять поиск окна по заголовку окна пока оно не появиться?

Думаю что так и есть я бы еще вставил в цикл sleep() и ограничил кол-во циклов типа таймаут

Добавлено:
Вариант с WaitForInputIdle мне тоже очень нравится. Напиши как он пройдет с аутглюком.
Автор: wasilissk
Дата сообщения: 21.12.2011 04:35
Frodo_Torbins
Да, конечно, писал по памяти, там у меня еще CreateProcess хэндл возвращает ну ладно, в качестве тегов сгодится...
Автор: OOD
Дата сообщения: 21.12.2011 09:30
YuriyRR

Цитата:
Напиши как он пройдет с аутглюком

что то не очень

Код:
procedure TForm1.FormCreate(Sender: TObject);
var h: HWND;
PI: TProcessInformation;
SI: TStartupInfo;

begin
FillChar(SI, SizeOf(SI), 0);
SI.cb := SizeOf(SI);

if CreateProcess(nil, 'C:\Program Files\Microsoft Office\Office14\OUTLOOK.exe', nil, nil, False, 0, nil, nil, SI,
PI) then
begin
WaitForInputIdle(PI.hProcess, INFINITE);
H := FindWindow(nil, 'Outlook сегодня - Microsoft Outlook');
if SetForegroundWindow(H) then
showMessage('test');
end
else
showMessage('beda');
end;
Автор: ShIvADeSt
Дата сообщения: 21.12.2011 09:51
OOD
Что именно не работает?
На мой взгляд (просто уже сталкивался с таким поведением) проблема в том, что окно не выходит на передний план, то есть данный кусок

Цитата:
if SetForegroundWindow(H) then

как будто не отрабатывает. Посмотри в интернете как сделать force foreground window, так как по умолчанию при использовании этой функции начиная с винХР вроде бы, окно начинает просто мигать в таскбаре.
Если не в этом дело - то уточни
Автор: OOD
Дата сообщения: 21.12.2011 10:10
ShIvADeSt
Не ждет пока запуститься OUTLOOK, сообщение test выскакивает только , если запустить OUTLOOK и подождать пока он запустить, а WaitForInputIdle не ждет пока запуститься OUTLOOK и появиться окно Outlook сегодня - Microsoft Outlook.
Автор: wasilissk
Дата сообщения: 21.12.2011 10:19
OOD
У WaitForInputIdle есть возвращаемое значение и еще есть SysErrorMessage(GetLastError). А сообщение test по коду у вас выводится если отработает SetForegroundWindow, а не WaitForInputIdle.
Автор: OOD
Дата сообщения: 21.12.2011 10:51
в общем не понял с циклом поиска окна , поставил тупо таймер а него поиск окна :

Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var h: HWND;
begin
h:= FindWindow(nil, 'Outlook сегодня - Microsoft Outlook');
if h<>0 then
begin
PostMessage(h, WM_SYSCOMMAND, SC_MINIMIZE, 0);
timer1.Enabled:=false;
end;
end;
Автор: DimitriusXZ
Дата сообщения: 03.01.2012 00:43
Нужен компонент для расширения оболочки Windows XP (Проводника) или пример.
Подскажите что-нибудь по этому вопросу.
Автор: alfaservice
Дата сообщения: 03.01.2012 21:33
Нужна помощь, совет... есть текстовый файл структура такая:


Код:
From: имя номер                        
Date: 06 Dec 2009 15:16:38                        
Text:

To: имя номер                        
Date: 06 Dec 2009 15:16:38                        
Text:
Автор: Corsairs
Дата сообщения: 04.01.2012 00:06
alfaservice
Если длина текста в строке
Цитата:
Text:
не превышает ограничения типа string - то не вижу особых проблем.
Если структура файла именно такова, как описано (т.е. три строки инфы, пустая строка, три строки инфы, пустая строка) - то можно просто в цикле присваивать значения трем элементам, и пропускать четвертый (т.е. пустую строку)
Если пустая строка может быть не одна - тогда можно использовать код выше, только вместо
Код: if s.Strings[j]='#' then
Автор: ShIvADeSt
Дата сообщения: 04.01.2012 04:24
Corsairs

Цитата:
if s.Strings[j]='' then

лучше заменить на
if Trim(s.Strings[j])='' then
это убережет от пробелов и символов перевода каретки и тп.
Автор: 085
Дата сообщения: 04.01.2012 06:09
запросы с переменной в селекте невозможны? Например
SELECT :var1 FROM table WHERE

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374

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


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