Компьютерный форум NoWa.cc Здесь может быть Ваша реклама
Правила Форума
редакция от 22.06.2020
Портал .::2BakSa.WS::.
Вернуться   Компьютерный форум NoWa.cc > В помощь вебмастеру > Программирование > Delphi

Уважаемые пользователи nowa.cc и 2baksa.ws. У нас сложилось тяжёлое финансовое положение. Мы работаем для вас вот уже более 15 лет и сейчас вынуждены просить о помощи. Окажите посильную поддержку проектам. Мы очень надеемся на вас. Реквизиты для переводов ниже.
Webmoney Webmoney WMZ: 826074280762 Webmoney WME: 804621616710
PayPal PayPal_Email E-mail для связи по вопросу помощи
Кошелёк для вашей помощи YooMoney 4100117770549562
YooMoney Спасибо за поддержку!
Ответ
 
Опции темы Опции просмотра Language
Старый 31.08.2005, 23:48   #1
Постоялец
 
Аватар для ErrorMs
 
Пол:Мужской
Регистрация: 09.07.2005
Сообщений: 300
Репутация: 286
По умолчанию Вопросы по Delphi/Pascal

В этом разделе рассматриваем вопросы по программированию на Delphi/Pascal.
__________________
Все великие люди мало жили. Вот и мне что-то нездоровится...
ErrorMs вне форума
 
Ответить с цитированием Вверх
Здесь может быть Ваша реклама
Здесь может быть Ваша реклама


Реклама: Рекомендуем супермаркет - NX.KSJEM.002 - более 50-ти тысяч наименований товаров со склада в Москвеультразвуковая очистка деталей оборудованиеприхожая маленькаяРекомендуем супермаркет - купить ноутбук легион - более 50-ти тысяч наименований товаров со склада в Москвестоматология детская сходненская


Старый 01.09.2005, 07:52   #2
Jilted
Guest
 
Сообщений: n/a
По умолчанию Ответ: Вопросы по Delphi/Pascal

Delphi5
1.Имеется многоуровневый DBGridEh...
Вопрос состоит в том - как экспортировать в .xls так же, как в .html и .rtf
т.е. сохраняя многоуровневость? А то, чтобы нормально перевести в .xls, приходится сначала экспортировать в .rtf или .html, потом выделять и копировать в excel

2. Имеется пункт MainMenu со многими подпункатми.
Каждый из них может быть Checked или UnChecked. Как сделать так, чтобы при каждом Check/Uncheck этих пунктов MainMenu не закрывалось, а оставалось на этом же пункте?

3. Как программно сэмулировать нажатие кнопок Ctrl+F?
Сам отвечаю:
Application.ProcessMessages;
{Ctrl Key Down}
keybd_Event(VK_CONTROL, 0, 0, 0);
{F Key Down - Drops the menu down}
keybd_Event(ord('F'), 0, 0, 0);
{F Key Up}
keybd_Event(ord('F'), 0, KEYEVENTF_KEYUP, 0);
{Ctrl Key Up}
keybd_Event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);

Последний раз редактировалось Jilted; 01.09.2005 в 08:54..
  Ответить с цитированием Вверх
Старый 02.09.2005, 22:24   #3
ErrorMs
Постоялец
 
Аватар для ErrorMs
 
Пол:Мужской
Регистрация: 09.07.2005
Сообщений: 300
Репутация: 286
По умолчанию Ответ: Вопросы по Delphi/Pascal

Цитата:
Сообщение от Jilted
Delphi5
1.Имеется многоуровневый DBGridEh...
Вопрос состоит в том - как экспортировать в .xls так же, как в .html и .rtf
т.е. сохраняя многоуровневость? А то, чтобы нормально перевести в .xls, приходится сначала экспортировать в .rtf или .html, потом выделять и копировать в excel [/i]

Если у тебя эти данные из базы данных, то можешь попробовать fast report 3 http://www.nowa.ru/showpost.php?p=76620&postcount=3
__________________
Все великие люди мало жили. Вот и мне что-то нездоровится...

Последний раз редактировалось ErrorMs; 02.09.2005 в 22:29..
ErrorMs вне форума
 
Ответить с цитированием Вверх
Старый 18.09.2005, 11:34   #4
Wolfstar
Новичок
 
Пол:Мужской
Регистрация: 16.09.2005
Сообщений: 10
Репутация: 0
По умолчанию Ответ: Вопросы по Delphi/Pascal

Как можно заставить в DBGrid сделать многострочные Title в Column.
Wolfstar вне форума
 
Ответить с цитированием Вверх
Старый 22.09.2005, 23:29   #5
ErrorMs
Постоялец
 
Аватар для ErrorMs
 
Пол:Мужской
Регистрация: 09.07.2005
Сообщений: 300
Репутация: 286
По умолчанию Ответ: Вопросы по Delphi/Pascal

Цитата:
Сообщение от Wolfstar
Как можно заставить в DBGrid сделать многострочные Title в Column.

Попробуй вот этот код:
unit Dbmygrid;

interface

uses

SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs, DB, DBTables, StdCtrls, ExtCtrls, Grids, DBGrids;

type

TMultiLineDBGrid = class(TDBGrid)
private
FLinesPerRow: Integer;
procedure DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState);
procedure LayoutChanged; override;
procedure SetLinesPerRow(ALinesPerRow: Integer);
public
property LinesPerRow: Integer read FLinesPerRow write SetLinesPerRow default 1;
constructor Create(AOwner: TComponent); override;
end;

implementation

constructor TMultiLineDBGrid.Create(AOwner: TComponent);
begin

inherited Create(AOwner);
FLinesPerRow := 1;
OnDrawDataCell := DrawDataCell;
end;

procedure TMultiLineDBGrid.LayOutChanged;
begin

inherited LayOutChanged;
DefaultRowHeight := DefaultRowHeight * LinesPerRow;
end;

procedure TMultiLineDBGrid.DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState);
var

Format: Word;
C: array[0..255] of Char;
begin

if LinesPerRow = 1 then
Format := DT_SINGLELINE or DT_LEFT
else
Format := DT_LEFT or DT_WORDBREAK;


Canvas.FillRect(Rect);


StrPCopy(C, Field.AsString);
WinProcs.DrawText(Canvas.Handle, C, StrLen(C), Rect, Format);
end;

procedure TMultiLineDBGrid.SetLinesPerRow(ALinesPerRow: Integer);
begin

if ALinesPerRow <> FLinesPerRow then
begin
FLinesPerRow := ALinesPerRow;
LayoutChanged;
end;
end;

end.


Он для многострочных ячеек. Должен вроде и для Title. Может для него прийдется немного переделать.
__________________
Все великие люди мало жили. Вот и мне что-то нездоровится...
ErrorMs вне форума
 
Ответить с цитированием Вверх
Старый 29.09.2005, 22:27   #6
LAN_ART
Неактивный пользователь
 
Пол:Мужской
Регистрация: 29.03.2005
Сообщений: 9
Репутация: 0
По умолчанию Иконка в трее

Вопрос может и дурной но все же, как заслать иконку приложения не на таскбар, а в трей (ну возле часиков), да еще и попап к ней прикрутить.

P.S. Ну на дельфе ессно, не на паскале.
LAN_ART вне форума
 
Ответить с цитированием Вверх
Старый 30.09.2005, 00:24   #7
ErrorMs
Постоялец
 
Аватар для ErrorMs
 
Пол:Мужской
Регистрация: 09.07.2005
Сообщений: 300
Репутация: 286
По умолчанию Ответ: Вопросы по Delphi/Pascal

Попробуй вот этот код (подключи этот модуль):
unit TrayIcon;

interface

{ A component to make it easier to create a system tray icon.
Drop this component on a form, and the application automatically
becomes a tray icon. This means that when the application is
minimized, it does not minimize to a normal taskbar icon, but
to the little system tray on the side of the taskbar. A popup
menu is available from the system tray icon, and your application
can process mouse events as the user moves the mouse over
the system tray icon, clicks on the icon, etc.

Copyright й 1996 Tempest Software. All rights reserved.
You may use this software in an application without fee or royalty,
provided this copyright notice remains intact.
}

uses
Windows, Messages, ShellApi, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, Menus;

{ This message is sent to the special, hidden window for shell
notification messages. Only derived classes might need to
know about it. }
const
Wm_Callback_Message = Wm_User + 1;

type
TTrayIcon = class(TComponent)
private
fData: TNotifyIconData;
fIcon: TIcon;
fHint: string;
fPopupMenu: TPopupMenu;
fClicked: Boolean;
fOnClick: TNotifyEvent;
fOnDblClick: TNotifyEvent;
fOnMinimize: TNotifyEvent;
fOnMouseMove: TMouseMoveEvent;
fOnMouseDown: TMouseEvent;
fOnMouseUp: TMouseEvent;
fOnRestore: TNotifyEvent;
protected
procedure SetHint(const Hint: string); virtual;
procedure SetIcon(Icon: TIcon); virtual;
procedure AppMinimize(Sender: TObject);
procedure AppRestore(Sender: TObject);
procedure DoMenu; virtual;
procedure Click; virtual;
procedure DblClick; virtual;
procedure EndSession; virtual;
procedure DoMouseMove(Shift: TShiftState; X, Y: Integer); virtual;
procedure DoMouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); virtual;
procedure DoMouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); virtual;
procedure OnMessage(var Msg: TMessage); virtual;
procedure Changed; virtual;
property Data: TNotifyIconData read fData;
public
constructor Create(Owner: TComponent); override;
destructor Destroy; override;
procedure Minimize; virtual;
procedure Restore; virtual;
published
property Hint: string read fHint write SetHint;
property Icon: TIcon read fIcon write SetIcon;
property PopupMenu: TPopupMenu read fPopupMenu write fPopupMenu;
property OnClick: TNotifyEvent read fOnClick write fOnClick;
property OnDblClick: TNotifyEvent read fOnDblClick write fOnDblClick;
property OnMinimize: TNotifyEvent read fOnMinimize write fOnMinimize;
property OnMouseMove: TMouseMoveEvent read fOnMouseMove write fOnMouseMove;
property OnMouseDown: TMouseEvent read fOnMouseDown write fOnMouseDown;
property OnMouseUp: TMouseEvent read fOnMouseUp write fOnMouseUp;
property OnRestore: TNotifyEvent read fOnRestore write fOnRestore;
end;

procedure Register;

implementation

{ Create the component. At run-time, automatically add a tray icon
with a callback to a hidden window. Use the application icon and title. }
constructor TTrayIcon.Create(Owner: TComponent);
begin
inherited Create(Owner);
fIcon := TIcon.Create;
fIcon.Assign(Application.Icon);
if not (csDesigning in ComponentState) then
begin
FillChar(fData, SizeOf(fData), 0);
fData.cbSize := SizeOf(fData);
fData.Wnd := AllocateHwnd(OnMessage);
fData.hIcon := Icon.Handle;
StrPLCopy(fData.szTip, Application.Title, SizeOf(fData.szTip)-1);
fData.uFlags := Nif_Icon or Nif_Message;
if Application.Title <> '' then
fData.uFlags := fData.uFlags or Nif_Tip;
fData.uCallbackMessage := Wm_Callback_Message;
if not Shell_NotifyIcon(Nim_Add, @fData) then
raise EOutOfResources.Create('Cannot create shell notification icon');
{ Replace the application's minimize and restore handlers with
special ones for the tray. The TrayIcon component has its own
OnMinimize and OnRestore events that the user can set. }
Application.OnMinimize := AppMinimize;
Application.OnRestore := AppRestore;
end;
end;

{ Remove the icon from the system tray.}
destructor TTrayIcon.Destroy;
begin
fIcon.Free;
if not (csDesigning in ComponentState) then
Shell_NotifyIcon(Nim_Delete, @fData);
inherited Destroy;
end;

{ Whenever any information changes, update the system tray. }
procedure TTrayIcon.Changed;
begin
if not (csDesigning in ComponentState) then
Shell_NotifyIcon(Nim_Modify, @fData);
end;

{ When the Application is minimized, minimize to the system tray.}
procedure TTrayIcon.AppMinimize(Sender: TObject);
begin
Minimize
end;

{ When restoring from the system tray, restore the application. }
procedure TTrayIcon.AppRestore(Sender: TObject);
begin
Restore
end;

{ Message handler for the hidden shell notification window.
Most messages use Wm_Callback_Message as the Msg ID, with
WParam as the ID of the shell notify icon data. LParam is
a message ID for the actual message, e.g., Wm_MouseMove.
Another important message is Wm_EndSession, telling the
shell notify icon to delete itself, so Windows can shut down.

Send the usual Delphi events for the mouse messages. Also
interpolate the OnClick event when the user clicks the
left button, and popup the menu, if there is one, for
right click events. }

procedure TTrayIcon.OnMessage(var Msg: TMessage);
{ Return the state of the shift keys. }
function ShiftState: TShiftState;
begin
Result := [];
if GetKeyState(Vk_Shift) < 0 then
Include(Result, ssShift);
if GetKeyState(Vk_Control) < 0 then
Include(Result, ssCtrl);
if GetKeyState(Vk_Menu) < 0 then
Include(Result, ssAlt);
end;

var
Pt: TPoint;
Shift: TShiftState;
begin
case Msg.Msg of
Wm_QueryEndSession:
Msg.Result := 1;
Wm_EndSession:
if TWmEndSession(Msg).EndSession then
EndSession;
Wm_Callback_Message:
case Msg.lParam of
Wm_MouseMove:
begin
Shift := ShiftState;
GetCursorPos(Pt);
DoMouseMove(Shift, Pt.X, Pt.Y);
end;
Wm_LButtonDown:
begin
Shift := ShiftState + [ssLeft];
GetCursorPos(Pt);
DoMouseDown(mbLeft, Shift, Pt.X, Pt.Y);
fClicked := True;
end;
Wm_LButtonUp:
begin
Shift := ShiftState + [ssLeft];
GetCursorPos(Pt);
if fClicked then
begin
fClicked := False;
Click;
end;
DoMouseUp(mbLeft, Shift, Pt.X, Pt.Y);
end;
Wm_LButtonDblClk:
DblClick;
Wm_RButtonDown:
begin
Shift := ShiftState + [ssRight];
GetCursorPos(Pt);
DoMouseDown(mbRight, Shift, Pt.X, Pt.Y);
DoMenu;
end;
Wm_RButtonUp:
begin
Shift := ShiftState + [ssRight];
GetCursorPos(Pt);
DoMouseUp(mbRight, Shift, Pt.X, Pt.Y);
end;
Wm_RButtonDblClk:
DblClick;
Wm_MButtonDown:
begin
Shift := ShiftState + [ssMiddle];
GetCursorPos(Pt);
DoMouseDown(mbMiddle, Shift, Pt.X, Pt.Y);
end;
Wm_MButtonUp:
begin
Shift := ShiftState + [ssMiddle];
GetCursorPos(Pt);
DoMouseUp(mbMiddle, Shift, Pt.X, Pt.Y);
end;
Wm_MButtonDblClk:
DblClick;
end;
end;
end;

{ Set a new hint, which is the tool tip for the shell icon. }
procedure TTrayIcon.SetHint(const Hint: string);
begin
if fHint <> Hint then
begin
fHint := Hint;
StrPLCopy(fData.szTip, Hint, SizeOf(fData.szTip)-1);
if Hint <> '' then
fData.uFlags := fData.uFlags or Nif_Tip
else
fData.uFlags := fData.uFlags and not Nif_Tip;
Changed;
end;
end;

{ Set a new icon. Update the system tray. }
procedure TTrayIcon.SetIcon(Icon: TIcon);
begin
if fIcon <> Icon then
begin
fIcon.Assign(Icon);
fData.hIcon := Icon.Handle;
Changed;
end;
end;

{ When the user right clicks the icon, call DoMenu.
If there is a popup menu, and if the window is minimized,
then popup the menu. }
procedure TTrayIcon.DoMenu;
var
Pt: TPoint;
begin
if (fPopupMenu <> nil) and not IsWindowVisible(Application.Handle) then
begin
GetCursorPos(Pt);
fPopupMenu.Popup(Pt.X, Pt.Y);
end;
end;

procedure TTrayIcon.Click;
begin
if Assigned(fOnClick) then
fOnClick(Self);
end;

procedure TTrayIcon.DblClick;
begin
if Assigned(fOnDblClick) then
fOnDblClick(Self);
end;

procedure TTrayIcon.DoMouseMove(Shift: TShiftState; X, Y: Integer);
begin
if Assigned(fOnMouseMove) then
fOnMouseMove(Self, Shift, X, Y);
end;

procedure TTrayIcon.DoMouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Assigned(fOnMouseDown) then
fOnMouseDown(Self, Button, Shift, X, Y);
end;

procedure TTrayIcon.DoMouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Assigned(fOnMouseUp) then
fOnMouseUp(Self, Button, Shift, X, Y);
end;

{ When the application minimizes, hide it, so only the icon
in the system tray is visible. }
procedure TTrayIcon.Minimize;
begin
ShowWindow(Application.Handle, Sw_Hide);
if Assigned(fOnMinimize) then
fOnMinimize(Self);
end;

{ Restore the application by making its window visible again,
which is a little weird since its window is invisible, having
no height or width, but that's what determines whether the button
appears on the taskbar. }
procedure TTrayIcon.Restore;
begin
ShowWindow(Application.Handle, Sw_Restore);
if Assigned(fOnRestore) then
fOnRestore(Self);
end;

{ Allow Windows to exit by deleting the shell notify icon. }
procedure TTrayIcon.EndSession;
begin
Shell_NotifyIcon(Nim_Delete, @fData);
end;

procedure Register;
begin
RegisterComponents('Div. komp', [TTrayIcon]);
end;

end.
__________________
Все великие люди мало жили. Вот и мне что-то нездоровится...
ErrorMs вне форума
 
Ответить с цитированием Вверх
Старый 04.10.2005, 22:44   #8
LAN_ART
Неактивный пользователь
 
Пол:Мужской
Регистрация: 29.03.2005
Сообщений: 9
Репутация: 0
По умолчанию Ответ: Вопросы по Delphi/Pascal

Спасибо, работает почти, иконка есть а вот попап почему то не работает.
Може че я не так делаю??? :7:
LAN_ART вне форума
 
Ответить с цитированием Вверх
Старый 05.10.2005, 22:05   #9
LAN_ART
Неактивный пользователь
 
Пол:Мужской
Регистрация: 29.03.2005
Сообщений: 9
Репутация: 0
По умолчанию Ответ: Вопросы по Delphi/Pascal

Извините стормозил, просто код не внимательно читал, попап выскакивает только когда окно свернуто, исправил теперь выскакивает всегда.
LAN_ART вне форума
 
Ответить с цитированием Вверх
Старый 26.10.2005, 11:53   #10
lnxp
Новичок
 
Аватар для lnxp
 
Пол:Мужской
Регистрация: 08.04.2005
Сообщений: 18
Репутация: 4
По умолчанию Ответ: Вопросы по Delphi/Pascal

Суть такая. Есть несколько файликов типа .xls, из них нужно собрать один... Открыть файл(ы) получается. Не могу выбрать конкретный лист в книге... ПОмогите :13:
lnxp вне форума
 
Ответить с цитированием Вверх
Старый 26.10.2005, 15:08   #11
ErrorMs
Постоялец
 
Аватар для ErrorMs
 
Пол:Мужской
Регистрация: 09.07.2005
Сообщений: 300
Репутация: 286
По умолчанию Ответ: Вопросы по Delphi/Pascal

Цитата:
Сообщение от lnxp
Суть такая. Есть несколько файликов типа .xls, из них нужно собрать один... Открыть файл(ы) получается. Не могу выбрать конкретный лист в книге... ПОмогите :13:


Пиши яснее чем пользуешься, пример кода и тд...
__________________
Все великие люди мало жили. Вот и мне что-то нездоровится...
ErrorMs вне форума
 
Ответить с цитированием Вверх
Старый 03.11.2005, 08:40   #12
bolvan
Guest
 
Сообщений: n/a
По умолчанию Re: Вопросы по Delphi/Pascal

Подскажите, как для иконки в трее сделать hint как у spiderguard?
(см рис)
  Ответить с цитированием Вверх
Старый 03.11.2005, 11:06   #13
ErrorMs
Постоялец
 
Аватар для ErrorMs
 
Пол:Мужской
Регистрация: 09.07.2005
Сообщений: 300
Репутация: 286
По умолчанию Re: Вопросы по Delphi/Pascal

Цитата:
Сообщение от bolvan
Подскажите, как для иконки в трее сделать hint как у spiderguard?
(см рис)

Попробуй вот это http://www.delphikingdom.ru/zip/hint.zip
__________________
Все великие люди мало жили. Вот и мне что-то нездоровится...
ErrorMs вне форума
 
Ответить с цитированием Вверх
Старый 08.11.2005, 18:56   #14
LAN_ART
Неактивный пользователь
 
Пол:Мужской
Регистрация: 29.03.2005
Сообщений: 9
Репутация: 0
По умолчанию Re: Вопросы по Delphi/Pascal

Как сделать обработчик горячих клавиш, если программа не активна (но запущена)
LAN_ART вне форума
 
Ответить с цитированием Вверх
Старый 08.11.2005, 20:42   #15
ErrorMs
Постоялец
 
Аватар для ErrorMs
 
Пол:Мужской
Регистрация: 09.07.2005
Сообщений: 300
Репутация: 286
По умолчанию Re: Вопросы по Delphi/Pascal

Используй API функцию RegisterHotKey
function RegisterHotKey(hWnd: HWND; id: Integer; fsModifiers, vk: UINT): BOOL;
hWnd - Handle окна, которое будет получать сообщения при нажатии горячей клавиши
id - идентификатор (просто число, передаваемое в сообщении WM_HOTKEY. id позволяет приложению работать с несколькими горячими клавишами, различая их по id). Нельзя определить две горячие клавиши с одинаковым id
fsModifiers - модификаторы. Определяют, какие клавиши должны быть нажаты совместно с указанной vk. Допустимы значения: MOD_ALT - ALT, MOD_CONTROL - CTRL, MOD_SHIFT - SHIFT
vk - виртуальный код клавиши
Если горячую клавишу удается зарегистрировать, то функция возвращает TRUE.
При завершении приложения необходимо отменить регистрацию горячей клавиши при помощи вызова UnregisterHotKey. При вызве ей передается Handle окна и id горячей клавиши.

Пример: Установка горячей клавиши:
procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterHotKey(Handle, 1 ,MOD_CONTROL, vk_F12);
end;

Обработка нажатия:
procedure TForm1.WMHotKey(var Mess: TWMHotKey);
begin
MessageBeep(0);
ShowMessage('Нажата горячая клавиша CTRL+F12');
end;
__________________
Все великие люди мало жили. Вот и мне что-то нездоровится...
ErrorMs вне форума
 
Ответить с цитированием Вверх
Ответ


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PASCAL Алексей М Моделирование программ 1 27.02.2009 15:52
Castalia for Delphi 2008.1 - эксперт IDE Delphi Minotawr Компоненты 0 03.09.2008 01:17
Pascal Fiesta_Life Delphi 4 01.06.2008 02:11
Pascal puella Delphi 5 18.02.2008 17:11

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 16:29. Часовой пояс GMT +3.


Copyright ©2004 - 2024 2BakSa.WS

Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot
Время генерации страницы 0.30543 секунды с 11 запросами