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

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


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

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 177
от 11.07.2005, 07:20

Администратор:Калашников О.А.
В номере:Вопросов: 6, Ответов: 20


Вопрос № 23061: Здравствуйте, уважаемые эксперты! У меня вопрос по QuickReport. Проблема следующая: у меня отчет должен сформировать 4 страницы не по всей БД, а по какой-то одной записи (т.е. допустим карточку клиента на 4 страницы), я первую страницу заполнил, ...
Вопрос № 23073: Здравствуйте! Вот, возник следующий вопрос. Заранее извиняюсь, если уже не в первый раз. Требуется написать программу-резидент (без формы), которая отлавливала бы нажатие клавиши, например, F8 и запускала определенное приложение. Заранее спас...
Вопрос № 23088: Доброе время суток, многоуважаемые эксперты! Помогите моему горю, уж очень нужны компоненты FastReport к D7 и желательно с crack-ом. Может кому-нить попадались или есть у кого. А то Qreport порядком надоел. Заранее спасибо....
Вопрос № 23089: Люди !!! Подскажите, плиз, есть ли аналог процедуры RegisterServiceProcess из 'kernel32.dll' под NT ??? Если есть - расскажите пожалуйста. Жду с нетерпением....
Вопрос № 23105: Здраствуйте, у меня такой вопрос как зделать чтобы положение мышки(x,y) записовалось бы в поля edit1 и edit2 .Заранее спасибо. ...
Вопрос № 23107: Добрый день. Подскажите, пожалуйста, как в ячейке TStringGrid (или заголовке TListView) расположить надпись вертикально, т.е. повернутой на 90 градусов. Спасибо....

Вопрос № 23.061
Здравствуйте, уважаемые эксперты!
У меня вопрос по QuickReport. Проблема следующая: у меня отчет должен сформировать 4 страницы не по всей БД, а по какой-то одной записи (т.е. допустим карточку клиента на 4 страницы), я первую страницу заполнил, а теперь вопрос: как перейти на 2 страницу для ее заполнения. Спасибо за уделенное время.
Отправлен: 05.07.2005, 07:21
Вопрос задал: xXx (статус: 2-ой класс)
Всего ответов отправлено: 2

Отвечает: sir henry
Здравствуйте, Юмин Дмитрий Вениаминович!
Вопрос непонятен.
Если у Вас данных для вывода на 4 страницы, то никаких специальных мер принимать не надо, страницы данными заполняются автоматически.
Условно говоря, если у Вас на одной странице вмещается 60 строк, а данных надо вывести на 240 строк, то именно 4 страницы и будет.
Или же Вы просто хотите оставшееся место (еще 3 страницы) заполнить какой-нибудь лабудой?
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 05.07.2005, 08:13

Отвечает: Jadd
Здравствуйте, Юмин Дмитрий Вениаминович!
Я не понял, ты что "руками" все заполняешь? А компоненты типа ChildBand, DetailBand, GroupBand наконец для чего существуют? У TQuickReport есть экзамплы как правильно строить отчеты, посмотри их.
---------
Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Студент)
Отправлен: 05.07.2005, 09:55


Вопрос № 23.073
Здравствуйте!
Вот, возник следующий вопрос. Заранее извиняюсь, если уже не в первый раз. Требуется написать программу-резидент (без формы), которая отлавливала бы нажатие клавиши, например, F8 и запускала определенное приложение.
Заранее спасибо.
Отправлен: 05.07.2005, 12:41
Вопрос задал: Yarick (статус: Посетитель)
Всего ответов отправлено: 4

Отвечает: streetcat
Здравствуйте, Yarick!
Пользуйся функцией GetAsyncKeyState.
В приложении работающий пример такой программы.
В место строки
ShowMessage('F8 has been pressed!');
можете вставить
WinExec('ваша_программа.exe', SW_SHOW);
winexec а не например, ShellExecute затем, чтобы не тащить с собой лишний модуль ShellApi и для простоты. Хотя, если тебе не важны пара-тройка дополнительных килограмм в весе твоего exe-резидента ;) юзай ShellExecute.

Приложение:

---------
WinERROR: Keyboard not detected. Press Enter to continue

Ответ отправил: streetcat (статус: 7-ой класс)
Отправлен: 05.07.2005, 15:00

Отвечает: Delphin
Здравствуйте, Yarick!
Что тебе мешает это сделать?
Создай программу и удали форму. дальше ставь глобальный хук и отлавливай нажатия F8. А запустить поможет ShellExecute();
---------
Обращаться в ICQ: 77778851 или E-Mail: delphinster@gmail.com
Ответ отправил: Delphin (статус: 7-ой класс)
Отправлен: 05.07.2005, 17:12

Отвечает: Ерёмин Андрей
Здравствуйте, Yarick!
Вы можете воспользоваться функциями RegisterHotKey и UnregisterHotKey. По этой теме в комплекте Delphi есть документация:

Пуск - Программы - Borland Delphi - Help - MS SDK Help Files - Win32s Programmer's Reference.
Раздел "Microsoft Win32 Programmer's Reference" - "Keyboard Input" - "Hot-Key Support".

Вам будет необходимо зарегистрировать в системе горячую клавишу (или комбинацию клавиш), после чего программа будет получать сообщение WM_HOTKEY, когда эта клавиша будет нажиматься. Нужно создать обработчик этого сообщения и запускать нужный файл через WinExec или ShellExecute. Удачи!
---------
Если б не было бы глюка, жизнь была б такая скyка...
Ответ отправил: Ерёмин Андрей (статус: Студент)
Отправлен: 05.07.2005, 17:31

Отвечает: And1
Здравствуйте, Yarick!
А в чём собственно проблема?? Удали форму в менеджере проекта, отлавливай нажатие клавиш и ShellExecute запускай программу, вот и всё!!!
Если будт затруднения с чем-то конкретным - пиши, здесь не контора "замутите-ка мне на халяву программку".
Удачи!
Ответ отправил: And1 (статус: 3-ий класс)
Отправлен: 06.07.2005, 10:11


Вопрос № 23.088
Доброе время суток, многоуважаемые эксперты!
Помогите моему горю, уж очень нужны компоненты FastReport к D7 и желательно с crack-ом. Может кому-нить попадались или есть у кого. А то Qreport порядком надоел. Заранее спасибо.
Отправлен: 05.07.2005, 17:16
Вопрос задал: xXx (статус: 2-ой класс)
Всего ответов отправлено: 1

Отвечает: Jadd
Здравствуйте, Юмин Дмитрий Вениаминович!
дык поищи в eDonkey сети. Я там много нужных компонент нарыл.
---------
Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Студент)
Отправлен: 05.07.2005, 17:38


Вопрос № 23.089
Люди !!! Подскажите, плиз, есть ли аналог процедуры RegisterServiceProcess из 'kernel32.dll' под NT ??? Если есть - расскажите пожалуйста. Жду с нетерпением.
Отправлен: 05.07.2005, 17:35
Вопрос задал: Skynet79 (статус: Посетитель)
Всего ответов отправлено: 2

Отвечает: John Freeman
Здравствуйте, Skynet79!
Нету, но сделать так можно - читай про хуки на wasm.ru
---------
You're trying to take me They trying to make me This is the only Gives me the only thing Tired of lying, I'm tired of lying The only thing I inderstand is what I feel...
Ответ отправил: John Freeman (статус: Профессор)
Отправлен: 05.07.2005, 17:47

Отвечает: Delphin
Здравствуйте, Skynet79!
Нет и не будет. Теперь тебе надо регестрировать себя как сервис. Можеш попробовать для своего вируса инжектировать код в другой процесс. Это в интеренете не раз писали. И еще для написания вирусов используй VC++ или BC++ а не Delphi.
Если нужен код установки себя как сервиса то пиши в мыло.
---------
Обращаться в ICQ: 77778851 или E-Mail: delphinster@gmail.com
Ответ отправил: Delphin (статус: 7-ой класс)
Отправлен: 06.07.2005, 00:13


Вопрос № 23.105
Здраствуйте, у меня такой вопрос как зделать чтобы положение мышки(x,y) записовалось бы в поля edit1 и edit2 .Заранее спасибо.
Отправлен: 05.07.2005, 23:02
Вопрос задал: Staskin (статус: Посетитель)
Всего ответов отправлено: 7

Отвечает: Bochvarov NikB
Здравствуйте, Staskin!
Edit1.Text := SysUtils.IntToStr(x);
А если спрашиваеш как найти положение мьиши - перепиши OnMouseMove.
А если спрашиваеш как найти глобальное положение мьиши на desktop - надо читать и писать hook (смотри TWindowHook)
А если хочеш что-то другое - надо точнее спрашивать :)
Ответ отправил: Bochvarov NikB (статус: 4-ый класс)
Отправлен: 05.07.2005, 23:15

Отвечает: xXx
Здравствуйте, Staskin!
Попробуй так:
procedure Form1.Button1Click(Sender: TObject);
var
foo: TPoint;
begin
GetCursorPos(foo);
Edit1.text := IntToStr(foo.X);
Edit2.text := IntToStr(foo.Y);
end;
Эту процедуру можно закинуть в Таймер, тогда ты можешь реально видеть позицию перемещения мыши. Удачи.
Ответ отправил: xXx (статус: 2-ой класс)
Отправлен: 06.07.2005, 06:58

Отвечает: Ерёмин Андрей
Здравствуйте, Staskin!
Для этого можно воспользоваться глобальным объектом Mouse и его свойством CursorPos. Например, можно поместить данный код в таймер. Удачи!

Приложение:

---------
Если б не было бы глюка, жизнь была б такая скyка...

Ответ отправил: Ерёмин Андрей (статус: Студент)
Отправлен: 06.07.2005, 07:49
Оценка за ответ: 4

Отвечает: Gin

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

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Memo1: TMemo;
Button1: TButton;
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Memo1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Edit1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Edit2MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Edit1.Text:=IntToStr(Mouse.CursorPos.X);
Edit2.Text:=IntToStr(Mouse.CursorPos.Y);
end;

procedure TForm1.Memo1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Edit1.Text:=IntToStr(Mouse.CursorPos.X);
Edit2.Text:=IntToStr(Mouse.CursorPos.Y);
end;
procedure TForm1.Edit1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Edit1.Text:=IntToStr(Mouse.CursorPos.X);
Edit2.Text:=IntToStr(Mouse.CursorPos.Y);
end;

procedure TForm1.Edit2MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Edit1.Text:=IntToStr(Mouse.CursorPos.X);
Edit2.Text:=IntToStr(Mouse.CursorPos.Y);
end;

procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Edit1.Text:=IntToStr(Mouse.CursorPos.X);
Edit2.Text:=IntToStr(Mouse.CursorPos.Y);
end;

end.

С Уважением, Gin.
Ответ отправил: Gin (статус: Студент)
Отправлен: 06.07.2005, 09:38

Отвечает: streetcat
Здравствуйте, Staskin!
сделай таймер с интервалом 10;
в обработчике таймера OnTimer поставь:
{================================}
procedure TForm1.Timer1Timer(Sender: TObject);
var
pt: TPoint;
begin
GetCursorPos(pt);
edit1.Text := inttostr(pt.X);
edit2.Text := inttostr(pt.Y);
end;
{================================}
это самый наверное универсальный и простой способ.
Однако уточни вопрос: нужно получить положение мыши в координатах формы (т.е. относительно левого верхнего угла формы) или в координатах экрана (т.е. относительно левого верхнего угла экрана)? Приведенный выше способ соответствует второму случаю.
---------
WinERROR: Keyboard not detected. Press Enter to continue
Ответ отправил: streetcat (статус: 7-ой класс)
Отправлен: 06.07.2005, 13:03
Оценка за ответ: 5

Отвечает: Ballon
Здравствуйте, Staskin!

Очень просто:

Edit1.Text := FloatToStr(Mouse.CursorPos.X);
Edit2.Text := FloatToStr(Mouse.CursorPos.Y);
Ответ отправил: Ballon (статус: 3-ий класс)
Отправлен: 06.07.2005, 13:32

Отвечает: Malish
Здравствуйте, Staskin!
Object Inspector ----- Form1--------- Events ----- OnMouseMove (2 click). А в поле редактора в открывшейся процедере:

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Edit1.Text := IntToStr(X);
Edit2.Text := IntToStr(Y);
end;
Ответ отправил: Malish (статус: Студент)
Отправлен: 06.07.2005, 19:00


Вопрос № 23.107
Добрый день.
Подскажите, пожалуйста, как в ячейке TStringGrid (или заголовке TListView) расположить надпись вертикально, т.е. повернутой на 90 градусов.
Спасибо.
Отправлен: 05.07.2005, 23:20
Вопрос задал: Хасанов Ренат (статус: 1-ый класс)
Всего ответов отправлено: 4

Отвечает: Werewolf
Здравствуйте, Хасанов Ренат!
procedure TForm1.TextUp(Can:TCanvas;aRect:tRect;aTxt:String);
var
LFont: TLogFont;
hOldFont, hNewFont: HFont;
begin
GetObject(Can.Font.Handle,SizeOf(LFont),Addr(LFont));
LFont.lfEscapement := 900;
hNewFont := CreateFontIndirect(LFont);
hOldFont := SelectObject(Can.Handle,hNewFont);
Canvas.TextOut(aRect.Left+2,aRect.Top,aTxt);
hNewFont := SelectObject(Can.Handle,hOldFont);
DeleteObject(hNewFont);
end;
Ответ отправил: Werewolf (статус: 1-ый класс)
Отправлен: 05.07.2005, 23:39

Отвечает: Ерёмин Андрей
Здравствуйте, Хасанов Ренат!
В стандартном TStringGrid - никак. Если только перерисовывать ячейки самостоятельно через OwnerDraw. Можно воспользоваться библиотекой AdvGrids, компонентом AdvStringGrid (http://www.tmssoftware.com).
---------
Если б не было бы глюка, жизнь была б такая скyка...
Ответ отправил: Ерёмин Андрей (статус: Студент)
Отправлен: 06.07.2005, 07:49

Отвечает: Gin

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

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, ComCtrls;

type
TForm1 = class(TForm)
ListView1: TListView;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

const
Names: array[0..11, 0..2] of string = (
('В', 'с', 'Э'),
('ы', 'д', 'т'),
('', 'е', 'о'),
('х', 'л', ''),
('о', 'а', 'п'),
('т', 'т', 'о'),
('е', 'ь', 'д'),
('л', '', 'о'),
('и', 'т', 'й'),
('', 'а', 'ё'),
('', 'к', 'т'),
('', '?', '?')
);

var
I: Integer;
NewColumn: TListColumn;
ListItem: TListItem;
ListView: TListView;
begin
ListView := TListView.Create(Self);
with ListView do
begin
Parent := Self;
Align := alClient;
ViewStyle := vsReport;
NewColumn := Columns.Add;
NewColumn.Caption := 'Начало';
NewColumn := Columns.Add;
NewColumn.Caption := 'Продолжение';
NewColumn := Columns.Add;
NewColumn.Caption := 'Продолжение 2';
for I := Low(Names) to High(Names) do
begin
ListItem := Items.Add;
ListItem.Caption := Names[I][0];
ListItem.SubItems.Add(Names[I][1]);
ListItem.SubItems.Add(Names[I][2]);
end;
end;
end;
end.

С Уважением, Gin.
Ответ отправил: Gin (статус: Студент)
Отправлен: 06.07.2005, 10:55

Отвечает: Полищук Владислав Игоревич
Здравствуйте, Хасанов Ренат!
Используйте событие Grid'a OnDrawCell,
и выводите текст в графическом режиме, другой возможности, увы, нет.
С уважением, Владислав
---------
Чтобы вчера не случилось, радуйся новому дню
Ответ отправил: Полищук Владислав Игоревич (статус: 1-ый класс)
Отправлен: 06.07.2005, 10:56


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

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

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.

Яндекс


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.delphiplus
Отписаться
Вспомнить пароль

В избранное