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

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


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


RusFAQ.ru: Программирование на C++ Builder / Delphi

Выпуск № 228
от 10.10.2003, 20:40

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


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

Cybernetic Creature
Статус: Профессиональный
Общий рейтинг: 127.22
URL: В разработке
[Подробней >>]
Boriss
Статус: Доверительный
Общий рейтинг: 139.13
[Подробней >>]
Marouder
Статус: Профессиональный
Общий рейтинг: 122.87
URL: Первый Хабаровский Форум
Телефон: (4212) 21-93-65
[Подробней >>]
 
_vt
Статус: Профессиональный
Общий рейтинг: 122.18
[Подробней >>]
Bob Johnson
Статус: Профессиональный
Общий рейтинг: 150.87
URL: Программирование
[Подробней >>]
sir henry
Статус: Доверительный
Общий рейтинг: 153.48
[Подробней >>]
 
CJ
Статус: Доверительный
Общий рейтинг: 126.66
[Подробней >>]
THE_PRO
Статус: Доверительный
Общий рейтинг: 140.21
[Подробней >>]


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

Вопрос № 995. Доброе время суток эксперты.Я к сожалению пока не очень хорошо знаю ассемблер и винапи для того ,что... (ответов: 5)
Вопрос № 996. Здравствуйте! Можно как-нибудь определить какие команды отправляет программа на устройство подключен... (ответов: 4)
Вопрос № 997. Здравствуйте уважаемые Експерты! Методом "тыка" что-то не выходит. Возможно ли так сделать... (ответов: 4)
Вопрос № 998. Skolko raz ya moqu sprashivat, vi chto ne znayete skolko budet 2*2 ?... shuchu! Pojaluysta... pomogi... (ответов: 3)
Вопрос № 999. Привет, эксперты! есть некая фигура, нарисованная в TPaintbox (к примеру, пятиконечная звезда) как е... (ответов: 6)

Вопросов: 5, ответов: 22


 Вопрос № 995

Доброе время суток эксперты.Я к сожалению пока не очень хорошо знаю ассемблер и винапи для того ,чтобы из одной программы на делфи убрать переодически всплывающее окно с рекламой. Прога бесплатная,а это окошко порядком надоело.
С помощью редактора ресурсов я получил форму этого окна.
А теперь вопрос можно ли сделать так,чтобы когда это окно появится,то оно сразу получило сообщение о нажатии кнопки ОК
закрывающее окно.Программа Кто хочет стать миллионером.
Ресурс в приложении.Я не думал ,что токомпилятор делфи
работает так компактно:в программе всего два раза вызывается
API CreateWindowEx,а окон создается гораздо больше,наверное
просто с разных мест проги функции передаются разные параметры для создания того или иного окна.


Приложение:


Вопрос отправлен: 05.10.2003, 22:39
Отправитель: Yury

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

Отвечает Cybernetic Creature

Добрый день, Yury!
Так я не понял у вас исходники этой проги?
если да то из проекта можно убрать окно,
а если нет то как же вы хотите убрать окно из екзешниа

Ответ отправлен: 07.10.2003, 09:35
Отправитель: Cybernetic Creature


Отвечает Boriss

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


Ответ отправлен: 06.10.2003, 12:07
Отправитель: Boriss


Отвечает Marouder

Добрый день, Yury!
Нет. Нельзя так сделать.

Ответ отправлен: 06.10.2003, 14:01
Отправитель: Marouder


Отвечает _vt

Доброе время суток, Yury!
> С помощью редактора ресурсов я получил форму этого окна.
Если ты смог это сделать, получается что программа вообще никак не защищена и из ресурсов эту форму можно просто удалить...

*** E-Man - we are waiting for you ***


Ответ отправлен: 06.10.2003, 01:55
Отправитель: _vt


Отвечает Bob Johnson

Приветствую Вас, Yury!
Изменением ресурса ты только покарежешь саму программу, но кнопку не нажмешь. Единственное, можно попробовать подставить в Form::OnCreate обработчик Button1Click. Т.е. как только форма появляется, вызывается процедура как бы нажатия кнопки. Но как это кодируется в ресурсах - не могу так сказать. Создай простое приложение с формой и кнопкой, в которой на OnCreate (или OnShow) будет привешен обработчик этой кнопки и посмотри.

* EMan1.5: ---===*** The game we play ***===---


Ответ отправлен: 07.10.2003, 23:18
Отправитель: Bob Johnson


 Вопрос № 996

Здравствуйте!
Можно как-нибудь определить какие команды отправляет программа на устройство подключенное к com-порту??



Вопрос отправлен: 06.10.2003, 08:47
Отправитель: NAU

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

Отвечает sir henry

Доброе время суток, NAU!
Вне всякого сомнения можно. Нужно просто читать с сом-порта.

Ответ отправлен: 07.10.2003, 11:19
Отправитель: sir henry


Отвечает Cybernetic Creature

Доброе время суток, NAU!
procedure TForm1.Button1Click(Sender: TObject);
var
CommPort: string;
hCommFile: THandle;
Buffer: PCommConfig;
size: DWORD;
begin
CommPort := 'COM1';
{Открываем Com-порт}
hCommFile := CreateFile(PChar(CommPort),
GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if hCommFile = INVALID_HANDLE_VALUE then
begin
ShowMessage('Unable to open ' + CommPort);
exit;
end;
{Выделяем временный буфер}
GetMem(Buffer, sizeof(TCommConfig));
{Получаем размер структуры CommConfig}
size := 0;
GetCommConfig(hCommFile, Buffer^, size);
{Освобождаем временный буфер}
FreeMem(Buffer, sizeof(TCommConfig));
{Выделяем память для структуры CommConfig}
GetMem(Buffer, size);
GetCommConfig(hCommFile, Buffer^, size);
{Изменяем скорость передачи}
Buffer^.dcb.BaudRate := 1200;
{Устанавливаем новую конфигурацию для COM-порта}
SetCommConfig(hCommFile, Buffer^, size);
{Освобождаем буфер}
FreeMem(Buffer, size);
{Закрываем COM-порт}
CloseHandle(hCommFile);
end;
После открытия com-порта через CreateFile() необходимо с помощью GetCommState() и SetCommState() установить параметры порта (в частности убрать автоуправление RTS и DTR). Затем для установки соответствующих сигналов используется функция EscapeCommFunction().

Procedure ControlRTS;
Var
S: String;
lDCB: TDCB;
fHandle: THandle;
Begin
S:='COM1';
// open port
fHandle:=CreateFile( Pchar(S), GENERIC_READ Or GENERIC_WRITE, 0,
Nil, OPEN_EXISTING, 0, 0);
If fHandle=INVALID_HANDLE_VALUE Then
Begin
// can't open....
Exit;
End;
// read settings
If Not GetCommState( fHandle, lDCB) Then
Begin
// can't read
Exit;
End;
// Fill dcb
lDCB.BaudRate:=CBR_2400;
lDCB.ByteSize:=8;
lDCB.Parity:=NOPARITY;
lDCB.StopBits:=ONESTOPBIT;
// !!! we will manage RTS ourself !!!
ldcb.Flags:=(ldcb.Flags And $FFFFC0FF) Or $00000100;
// set comm state
SetCommState( fHandle, ldcb);
// Here we can manage
// Reset RTS
EscapeCommFunction( fHandle, CLRRTS);
// Set RTS
EscapeCommFunction( fHandle, SETRTS);
// Close port
CloseHandle(fHandle);
fHandle:=0;
End;


P.S. Надо заметить, что все выходы com-порта являются инверсными. А это значит, что активным сосотоянием порта является 0, а неактивным 1.


Ответ отправлен: 07.10.2003, 09:35
Отправитель: Cybernetic Creature


Отвечает Boriss

Здравствуйте, NAU!
В какой среде? Какая программа - своя или чужая? SoftIce может

Ответ отправлен: 06.10.2003, 12:14
Отправитель: Boriss


Отвечает Bob Johnson

Доброе время суток, NAU!
Вроде есть такая прога как portmon от sysinternal.com

* EMan1.5: ---===*** The game we play ***===---


Ответ отправлен: 07.10.2003, 23:20
Отправитель: Bob Johnson


 Вопрос № 997

Здравствуйте уважаемые Експерты!
Методом "тыка" что-то не выходит.
Возможно ли так сделать (специально для CJ - если да, то как?) - глобальный на приложение TTHread.
Есть несколько форм, у каждой из которых есть процедура, которая выполняется определённый момент времени (без параметров).
В каждой форме нужно создать потомок потока с передачей ему процедуры, которую он запустит в Execute.
При необходимости его закрыть.
Что-то у меня трабла с передачей процедуры.
В крайнем случае, некоторые из Вас ассемблерщики, как передать адрес процедуры, и
как в Thread будет выглядеть ассемблерный код на call этой процедуры?
Хотя бы мысли plees.
C ув. Игорь.



Вопрос отправлен: 06.10.2003, 22:49
Отправитель: Игорь (firemen01@ukr.net)

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

Отвечает CJ

Приветствую Вас, Игорь!
Если я правильно понял, тебе надовызвать процедуру из другой формы?
Почему именно так! Было-бы проще или создать dll или все процедуры впихнуть в главную форму!
А вот с TTHread чуть-чуть не понятно!
И почему ты выбрал именно меня?

Ответ отправлен: 07.10.2003, 21:41
Отправитель: CJ


Отвечает sir henry

Приветствую Вас, Игорь!
1. Не совсем понятно - "глобальный" что? :)
2. Передавать процедуру можно передавая ее адрес:
MyProc: procedure;
...
SecondProc(@MyProc);
...

Ответ отправлен: 07.10.2003, 10:57
Отправитель: sir henry


Отвечает Bob Johnson

Доброе время суток, Игорь!
Процедура передается только ее адресом. Возможно в дельфи как-то туго с передачей адресов процедур.
В асме при вызове функции CreateThread (а именно она и создает поток) ей передается именно указатель на процедуру. Описание функции и соотв. процедуры есть в win 32 prog ref, которое поставляется с дельфи (только оно на с++).
Я бы использовал функцию напрямую unless не надо вызывать в качестве процедуры потока метод класса. В последнем случае придется писать заглушку, т.к. метод класса можно вызывать только из класса или у конкретного экземпляра (т.е. ему еще надо передать указатель на экземпляр класса).

* EMan1.5: ---===*** The game we play ***===---


Ответ отправлен: 07.10.2003, 23:22
Отправитель: Bob Johnson


Отвечает Cybernetic Creature

Добрый день, Игорь!
К примеру, функция "прослушивает" каталог на предмет файлов. Если находит, то создает нить, которая будет обрабатывать файл. Потомку надо передать имя файла, а вот как?
Странный вопрос. Я бы понял, если бы требовалось передавать данные во время работы нити. А так обычно поступают следующим образом.
В объект нити, происходящий от TThread дописывают поля. Как правило, в секцию PRIVATE. Затем переопределяют конструктор CREATE, который, принимая необходимые параметры заполняет соответствующие поля. А уже в методе EXECUTE легко можно пользоваться данными, переданными ей при его создании.

TYourThread = class(TTHread)
private
FFileName: string;
protected
procedure Execute; overrided;
public
constructor Create(CreateSuspennded: Boolean; const AFileName: string);
end;
...
constructor TYourThread.Create(CreateSuspennded: Boolean;
const AFileName: string);
begin
inherited Create(CreateSuspennded);
FFIleName := AFileName;
end;
procedure TYourThread.Execute;
begin
try
...
if FFileName = ...
...
except
...
end;
end;
...
TYourForm = class(TForm)
...
private
YourThread: TYourThread;
procedure LaunchYourThread(const AFileName: string);
procedure YourTreadTerminate(Sender: TObject);
...
end;
...
procedure TYourForm.LaunchYourThread(
const AFileName: string);
begin
YourThread := TYourThread.Create(True, AFileName);
YourThread.Onterminate := YourTreadTerminate;
YourThread.Resume
end;
...
procedure TYourForm.YourTreadTerminate(Sender: TObject);
begin
...
end;
...
end.



Ответ отправлен: 09.10.2003, 18:37
Отправитель: Cybernetic Creature


 Вопрос № 998

Skolko raz ya moqu sprashivat, vi chto ne znayete skolko budet 2*2 ?... shuchu!
Pojaluysta... pomogite... !!! ...
Problema: __Napisal progu s QuickReport. Vse rabotayet! Tolko
progu nujno stavit na komp qde nikoqda ne bival Delphi
i yego komponenti.
Vopros: __Kak mne ustanovit QR na etot komp?



Вопрос отправлен: 07.10.2003, 09:34
Отправитель: Dash-Shaggy

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

Отвечает CJ

Приветствую Вас, Dash-Shaggy!
Что есть QR?
Ну а чтобы программа работала на других компах, не надо испльзовать дополнительные библиотеки!

Ответ отправлен: 07.10.2003, 21:41
Отправитель: CJ


Отвечает sir henry

Добрый день, Dash-Shaggy!
По отношению QR ничего дополнительно ставить не надо. Все что нужно, будет входить в состав программы. А вот BDE (если Ваша прога работает с данными через BDE) несомненно нужно будет поставить :).

Ответ отправлен: 07.10.2003, 11:09
Отправитель: sir henry


Отвечает Cybernetic Creature

Приветствую Вас, Dash-Shaggy!
Mojno v Delphi nije versii 6

Ответ отправлен: 09.10.2003, 18:37
Отправитель: Cybernetic Creature


 Вопрос № 999

Привет, эксперты!
есть некая фигура, нарисованная в TPaintbox (к примеру, пятиконечная звезда)
как ее повращать?
как изменять скорость вращения??



Вопрос отправлен: 07.10.2003, 11:41
Отправитель: Эланор (cymoril@mail.ru)

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

Отвечает THE_PRO

Приветствую Вас, Эланор!
Rabotayem s pikselyami...
PaintBox1.Pixels[x,y]


Ответ отправлен: 08.10.2003, 09:39
Отправитель: THE_PRO


Отвечает Boriss

Приветствую Вас, Эланор!
По-видимому, только программно перерисовывать. Например, по таймеру,
пересчитывать координаты пикселов изображения (матрица поворотов) и заново через Canvas.pixels[x,y]

Ответ отправлен: 08.10.2003, 13:18
Отправитель: Boriss


Отвечает CJ

Доброе время суток, Эланор!
Просто не сделаешь!!!
Можно поробывать нарисовать много кадров, а потом загружать их через определенное время в компоненте!

Ответ отправлен: 07.10.2003, 21:40
Отправитель: CJ


Отвечает sir henry

Доброе время суток, Эланор!
А Вы обычный графический компонент не путаете с OpenGL? :)
Шутка :). А если серьезно, то вращать или делать что-то еще можно перерисовкой фигуры.

Ответ отправлен: 07.10.2003, 13:03
Отправитель: sir henry


Отвечает Bob Johnson

Здравствуйте, Эланор!
Надо написать процедуру, которая будет ее рисовать с заданным углом поворота. Для звезды достаточно просто - ведь она имеет всего лишь 5 точек, равномерно распределенных в пределах полного оборота (два пи радиан). Просто добавь некоторый начальный угол. А скорость вращения - это изменение этого угла поворота во времени.

* EMan1.5: ---===*** The game we play ***===---


Ответ отправлен: 07.10.2003, 23:23
Отправитель: Bob Johnson


Отвечает Cybernetic Creature

Доброе время суток, Эланор!
Как повернуть Bitmap на любой угол
--------------------------------------------------------------------------------

const
PixelMax = 32768;
type
pPixelArray = ^TPixelArray;
TPixelArray = array [0..PixelMax-1] of TRGBTriple;
procedure RotateBitmap_ads(SourceBitmap: TBitmap;
out DestBitmap: TBitmap; Center: TPoint; Angle: Double);
var
cosRadians : Double;
inX : Integer;
inXOriginal : Integer;
inXPrime : Integer;
inXPrimeRotated : Integer;
inY : Integer;
inYOriginal : Integer;
inYPrime : Integer;
inYPrimeRotated : Integer;
OriginalRow : pPixelArray;
Radians : Double;
RotatedRow : pPixelArray;
sinRadians : Double;
begin
DestBitmap.Width := SourceBitmap.Width;
DestBitmap.Height := SourceBitmap.Height;
DestBitmap.PixelFormat := pf24bit;
Radians := -(Angle) * PI / 180;
sinRadians := Sin(Radians);
cosRadians := Cos(Radians);
for inX := DestBitmap.Height-1 downto 0 do
begin
RotatedRow := DestBitmap.Scanline[inX];
inXPrime := 2*(inX - Center.y) + 1;
for inY := DestBitmap.Width-1 downto 0 do
begin
inYPrime := 2*(inY - Center.x) + 1;
inYPrimeRotated := Round(inYPrime * CosRadians - inXPrime * sinRadians);
inXPrimeRotated := Round(inYPrime * sinRadians + inXPrime * cosRadians);
inYOriginal := (inYPrimeRotated - 1) div 2 + Center.x;
inXOriginal := (inXPrimeRotated - 1) div 2 + Center.y;
if (inYOriginal >= 0) and (inYOriginal <= SourceBitmap.Width-1) and
(inXOriginal >= 0) and (inXOriginal <= SourceBitmap.Height-1) then
begin
OriginalRow := SourceBitmap.Scanline[inXOriginal];
RotatedRow[inY] := OriginalRow[inYOriginal]
end
else
begin
RotatedRow[inY].rgbtBlue := 255;
RotatedRow[inY].rgbtGreen := 0;
RotatedRow[inY].rgbtRed := 0
end;
end;
end;
end;
{Usage:}
procedure TForm1.Button1Click(Sender: TObject);
var
Center : TPoint;
Bitmap : TBitmap;
begin
Bitmap := TBitmap.Create;
try
Center.y := (Image.Height div 2)+20;
Center.x := (Image.Width div 2)+0;
RotateBitmap_ads(
Image.Picture.Bitmap,
Bitmap,
Center,
Angle);
Angle := Angle + 15;
Image2.Picture.Bitmap.Assign(Bitmap);
finally
Bitmap.Free;
end;
end;



Ответ отправлен: 09.10.2003, 18:37
Отправитель: Cybernetic Creature



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

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

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

Ваше имя:

Ваш e-mail:

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


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

Ваш вопрос:


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


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


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

Программисту
Assembler (28)
C / C++ (27)
Perl (7)
Builder / Delphi (21)
Pascal (24)
Basic / VBA (8)
Java / JavaScript (8)
PHP (12)
Криптография (9)
WinAPI (14)
Пользователю
Windows 95/98/Me (58)
Windows NT/2000/XP (66)
"Железо" (44)
Поиск информации (30)
Администратору
Windows NT/2000/XP (36)
Linux / Unix (15)
Юристу
Гражданское право (11)
Семейное право (8)
Трудовое право (9)
КоАП (8)

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




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.


Яндекс цитирования
© 2001-2003 Россия, Москва. Авторское право: Калашников О.А.

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

В избранное