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

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

Автор: ShIvADeSt
Дата сообщения: 18.05.2009 04:49
Kursist

Цитата:
А где лучше это вставлять? В FormCreate, FormActivate ?

В FormCreate естессно.

Автор: delover
Дата сообщения: 18.05.2009 21:27
А, если кто пользовал, функция AttachThreadInput должна отдавать поток ввода в другой. Но я может ещё чего-то не делаю? Но ShowModal не работает...
Автор: 3x3r
Дата сообщения: 19.05.2009 03:51
Доброе утро всем, вот задали задачку не могу решить.

Дано число А, содержащее 2 знака до запятой и 2 после ( 35,11 ) Получить новое число, поменяв целую и дробную части ( 11, 35 )

Подскажите пожалуйста, может кто сталкивался.
Автор: Ramazan
Дата сообщения: 19.05.2009 06:55
3x3r
Result := Frac(A) * 100 + Int(A) / 100;
Автор: delover
Дата сообщения: 19.05.2009 19:08

Цитата:
Но ShowModal не работает.

Простите, неправильно пишу. Оказалось что цикл ShowModal работает. Только я сначала делаю BrignToFront окошку, а потом оно всё едино сваливается под главное окно. Пробовал DisableTask в разных вариациях, но метод научного тыка подвёл. ( Что, то я в школе пропустил. Я не хотел бы делать StayOnTop, хотя думаю это даже меньшее зло. Что бы такого придумать, чтоб виндовс был полезнее чем Delphi?
Автор: delover
Дата сообщения: 20.05.2009 08:57
Может WM_ACTIVATE отдавать в модальное окно?

Добавлено:
А вообще, есть событие в виндовсе, которое отвечает за Z-ордер. Или это понятие только для Delphi? Я уже подобные вещи давно не трогал - извините.
Автор: ShIvADeSt
Дата сообщения: 20.05.2009 14:26
delover
Насколько помню Z-ордер это понятие не дельфи, а именно МС.Где то встречал функции которые переупорядочивали его,ноэто давно было. Сформулируй понятно что ты хочешь получить а не отрывки контекста, возможно есть более простой способ. Судя по тому что я прочитал, ты хочешь принудительное выкидывание окна вперед сделать (что то типа SetForegroundWindow но без мерцания а сразу вперед), но могу ошибаться так как не вижу четкого ТЗ.
Автор: Aladdinych
Дата сообщения: 20.05.2009 14:28
Подскажите плз решение проблемы
Нужно в несколько адресов посылать ping? Так, чтобы все посылки были независимы друг от друга
я пробовал использовать компонент IdIcmpClient, но он посылает пинг и дожидается ответа. Если таймаут достаточно большой, то работа всей программы на это время тормозится.
Как этого избежать.
Чтобы процессы посылки запроса и приема ответа были независимы
может быть есть другие компоненты для этой цели под Delphi 7
Автор: f3ka
Дата сообщения: 20.05.2009 15:00
Aladdinych
Использовать ПОТОКИ
Автор: delover
Дата сообщения: 20.05.2009 19:30
ShIvADeSt
Нет не принудительное, а такое же гламурное как у Vista. Типа помигал в том окне, помигал в этом окне, а правда взяла верх. Вы правильно поняли, но тонкость в том что на одну систему для одного процесса насели два потока, сказали что братья а друг о друге ничего знать не хотят. В этом то и задача...
Автор: ShIvADeSt
Дата сообщения: 21.05.2009 01:51
delover

Цитата:
Вы правильно поняли, но тонкость в том что на одну систему для одного процесса насели два потока

ИМХО по барабану сколько потоков, так как для окна (а именно его хотите вынести наверх) используется только один поток - вот к нему и делай AttachThreadInput. Буду дома - скину кусок кода (вернее оптимизированная процедура SetForegroundWindow), который всегда выносит окно поверх остальных.
Автор: Aladdinych
Дата сообщения: 21.05.2009 06:44
f3ka
А по подробнее
Автор: delover
Дата сообщения: 21.05.2009 07:46
ShIvADeSt
Я может не правильно понял, то есть нужно аттачить главный поток к тому окну которое будет создано далее в потоке? Вот приблизительно код:

Код:
AttachThreadInput(PE.ThreadID, MainThreadID, True);
try
Application.ProcessMessages;
PE.Resume;
while ExecuteThrd do
begin
if Application = nil then Break;
if Application.Terminated then Break;
Application.ProcessMessages;
end;
finally
AttachThreadInput(PE.ThreadID, MainThreadID, False);
end;
Result := ExecuteResult;
Автор: f3ka
Дата сообщения: 21.05.2009 08:01
Aladdinych
Писать наследника TThread в котором выполнять все необходимые действия... тема очень обширная... легче почитать HELP и примеры по потокам...
Автор: ShIvADeSt
Дата сообщения: 21.05.2009 08:22
delover

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

Эээ а нафига в потоке окна создавать? С таким я не сталкивался, так как мое мнение что создавать поток, а потом в нем создавать окно, которое будет иметь свой поток для обработки сообщений - это что то из области мазохизма Если надо вывести какую то мессагу - то делай синхронизацию потока и основного окна и в процедуре синхронизации выдавай диалог. А создавать его в потоке - ИМХО изврат.
Автор: Aladdinych
Дата сообщения: 21.05.2009 08:48
f3ka
О потоках почитал, понятно
Но есть вопрос - как передать создаваемому потоку параметр?

Автор: f3ka
Дата сообщения: 21.05.2009 08:55
Aladdinych
переопределить конструктор например или написать метод у потока который будет получать параметр и запускать поток... вариантов много
Автор: delover
Дата сообщения: 21.05.2009 15:05
ShIvADeSt
Это помогло очень здорово!!! Спасибо, даже как специально у метода не было параметров. Только придётся некоторый навес делать.
Автор: delover
Дата сообщения: 21.05.2009 17:23
ps
Спасибо, был бы я работодателем, оторвал бы Вас с руками... Думяю, что я в дожниках. )
Автор: Aleksandr N
Дата сообщения: 23.05.2009 21:26
Подскажите как значку программы в Трее выставить свойство "Отображать" вместо по умолчанию "Скрывать неактивные"? Речь идёт о скрытии значков в Трее.
Автор: mauar
Дата сообщения: 23.05.2009 22:26
Помогите пожалуйсто решить одну проблему. Есть главная форма,
на ней расположен компонент RichEdit в который из *.rtf файла
выводится текст. Есть вторая маленькая форма производящая поиск
текста на ней есть компонент RichEdit в которой вводишь слово
и он ищет по компоненту RichEdit из главной формы в котором отображен текст .rtf.
Проблема такая, маленькую форму поиска я поместил в библиотеку
которая динамически загружается при вызове формы, если кто знает
почему не получается реализовать поиск из этой формы которая находится
в библиотеки, для поиска по компоненту RichEdit из главной фрмы!

[more]
Код из главной формы запуска формы поиска из библиотеки

Код:
procedure TTMSForm1.AdvGlowButton30Click(Sender: TObject);

var
LDllHandle : THandle;
LProc : procedure;
St1 : TSearchForText;
St2 : procedure;

begin
LDLLHandle := loadLibrary ('Finds.dll'); // загружаю библиотеку в которой находится форма поиска
if (LDLLHandle = 0) then begin
ShowMessage ('Ошибка загрузки библиотеки!');
exit;
end;
try
@LProc := GetProcAddress(LDllHandle, 'ShowFind'); // загружаем процедуру отображение
@St1 := GetProcAddress(LDllHandle, 'SearchForText'); // загружаем функцию Поиска,
@St2 := GetProcAddress(LDllHandle, 'Click'); // загружаем процедуру кликанье на кнопке поиск (НЕ РАБОТАЕТ
Lproc;
st2;
finally
FreeLibrary(LDllHandle);
end;
end;
Автор: Grande
Дата сообщения: 24.05.2009 06:28
mauar

Как я понял, не работает процедура "Click"?
Ну, во-первых, не вижу смысла в ней - при освобождении библиотеки и так всё само закроется (ведь сразу после поиска вызывается процедура "Click", а следом освобождение DLL).
Во-вторых: ясно ведь написано о необходимости применения менеджера памяти (ведь, по сути, метод OnClick является указателем). Где он?
И последнее: методы объектов в DLL вызываются из основной программы совсем по-другому.
Вот здесь всё очень подробно расписано.
Автор: RS85
Дата сообщения: 24.05.2009 09:41
Подскажите пожалуйста, у меня в Delphi 2007 не вызывается TObjectList.

Если присвоить в разделе var переменную, как обычно при использовании TList`а, пишет что неизвестный идентификатор...

Например:

var
a:TobjectList не пашет.

Пишет:
E2003 Undeclared identifier: 'TObjectList'

В чем может быть дело? Или это я туплю?
Автор: Grande
Дата сообщения: 24.05.2009 10:06
RS85
Первое, что пришло в голову: имеется ли строка "uses Contnrs"?
Автор: RS85
Дата сообщения: 24.05.2009 10:08
В смысле, Uses Controls?

Да, конечно.
Вроде все модули подключены
Автор: Frodo_Torbins
Дата сообщения: 24.05.2009 10:19
Aleksandr N
А вы уверены, что пользователь обрадуется такому необычному поведению вашей проги? Я спрашиваю потому, что даже касперский не позволяет себе такого.
mauar
Наверно стоит еще включить рантаймпакеты.
RS85
Цитата:
В смысле, Uses Controls?
Именно "Contnrs".
Автор: Grande
Дата сообщения: 24.05.2009 10:49
RS85
Как справедливо заметил Frodo_Torbins, именно "Contnrs" (контейнеры, то-бишь). Ведь TObjectList является, по сути, контейнером.
Автор: RS85
Дата сообщения: 24.05.2009 11:12
Frodo_Torbins
Grande

Ясно, всё понял! Спасибо!

Добавлено:
А подскажите еще пожалуйста, как можно использовать Tlist или тот же TobjectList, если объекты пока не инициализированы?

Ведь Tlist допускает добавление только уже созданных объектов.

Или для этого например делать так:
.......................
var
f:TList;
c: array [0-15] of Object;
i:Integer;
begin
for i:= 0 to 15-1 do
c[i]:=Object.Create;

И только потом уже заносить эти объекты в Tlist:
f:=Tlist.create;
For i:= 0 to 15-1 do
f.Add (c[i]);
Автор: Grande
Дата сообщения: 24.05.2009 11:36
RS85

Цитата:
И только потом уже заносить эти объекты в TObjectlist:

Абсолютно справедливо.
Автор: V1s1ter
Дата сообщения: 24.05.2009 12:11
RS85

Цитата:
А подскажите еще пожалуйста, как можно использовать Tlist или тот же TobjectList, если объекты пока не инициализированы?

Вообщето для корректного ответа нужно цель знать. Ибо без цели Ваш ворос звучит странно "Как выпить пиво, которого у меня нет?"
Например если у Вас были созданы несколько объектов, Вы занесли их в список и список сохранили в файле. Потом при следующем запуске программы Вы прочитали список и по нему нужно создать объекты, то это несколько уже другой вопрос. Так всетаки, что Вы хотите сделать?

Добавлено:
Сегодня есть немного времени могу помочю

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Глобальные переменные в разных формах с++ builder 'a.


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