Вопросы и ответы - Delphi - Разработка приложений - Библиотека программиста
Пользователь

Добро пожаловать,

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

Меню сайта




Ваше мнение
Хотите ли вы стать модератором раздела сайта или форума? (Желающие пишем админу.)

Да, конечно.
Только за большие деньги.
Нет, ни за что.
Ну может в будущем...


Результаты
Другие опросы

Всего голосов: 616
Комментарии: 2


Наши партнеры



Статистика




Programming books  Download software  Documentation  Scripts  Content Managment Systems(CMS)  Templates  Icon Sets  Articles  Contacts  Voting  Site Search




Вопросы и ответы - Delphi - Разработка приложений

          
 
Замена Application.ProcessMessages
Код
procedure ProcessMessagesEx;

function IsKeyMsg(var Msg: TMsg): Boolean;

const

CN_BASE = $BC00;

var

Wnd: HWND;

begin

Result := False;

with Msg do

if (Message >= WM_KEYFIRST) and (Message <= WM_KEYLAST) then

begin

Wnd := GetCapture;

if Wnd = 0 then

begin

Wnd := HWnd;

if SendMessage(Wnd, CN_BASE + Message, WParam, LParam) <> 0 then

Result := True;

end

else

if (LongWord(GetWindowLong(Wnd, GWL_HINSTANCE)) = HInstance) then

if SendMessage(Wnd, CN_BASE + Message, WParam, LParam) <> 0 then

Result := True;

end;

end;



function ProcessMessage(var Msg: TMsg): Boolean;

begin

Result := False;

if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then

begin

Result := True;

if Msg.Message <> WM_QUIT then

if not IsKeyMsg(Msg) then

begin

TranslateMessage(Msg);

DispatchMessage(Msg);

end;

end;

end;



var

Msg: TMsg;

begin

while ProcessMessage(Msg) do {loop};

end;
Как выполнить какой-то процесс тогда, когда пользователь не работает с моим приложением?
Создайте процедуру, которая будет вызываться при событии Application.OnIdle.



Обьявим процедуру:

Код
procedure IdleEventHandler(Sender: TObject; var Done: Boolean);



В разделе implementation опишем поцедуру:


Код

procedure TForm1.IdleEventHandler(Sender: TObject; var Done: Boolean);

begin

{Do a small bit of work here}

Done := false;

end;



В методе Form'ы OnCreate укажем что наша процедура вызывается на событии:



Код
Application.OnIdle.Application.OnIdle := IdleEventHandler;




Событие OnIdle возникает один раз - когда приложение переходит в режим "безделья" (idle).

Если в обработчике переменной Done присвоить False событие будет вызываться вновь и вновь, до тех пор пока приложение "бездельничает" и переменной Done не присвоенно значение True.

Как очистить все окошки редактирования на форме?
Код
procedure ClearEdits;

var i : Integer;

begin

for i := 0 to ComponentCount-1 do

if (Components[i] is TEdit) then

(Components[i] as TEdit).Text := '';

end;
Как перехватить клавишу табуляции (Tab) в TEdit?
Это можно давольно легко сделать переопределив на форме процедуру CMDialogKey. Чтобы посмотреть как это работает, поместите на форму Edit и введите следующий код:

Код
procedure CMDialogKey(Var Msg: TWMKey);

message CM_DIALOGKEY;

...

procedure TForma.CMDialogKey(Var Msg: TWMKEY);

begin

if (ActiveControl is TEdit) and

(Msg.Charcode = VK_TAB) then

begin

ShowMessage('Нажата клавиша TAB?');

end;

inherited;

end;
Как приложение оставить свёрнутым в иконку?
Для этого необходимо обработать сообщение WMQUERYOPEN. Однако обработчик сообщения необходимо поместить в секции private - т.е. в объявлении TForm.

Код
procedure WMQueryOpen(var Msg: TWMQueryOpen); message WM_QUERYOPEN;



Реализация будет выглядеть следующим образом:



procedure WMQueryOpen(var Msg: TWMQueryOpen);

begin

Msg.Result := 0;

end;
Как сворачивать все приложение при сворачивании неглавного окна?
Код
procedure WMActivateApp(var Msg: TWMActivateApp); message WM_ACTIVATEAPP;

procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;

...

procedure Form2.WMActivateApp(var Msg: TWMActivateApp);

begin

if IsIconic(Application.Handle) then begin

ShowWindow(Application.Handle, SW_RESTORE);

SetActiveWindow(Handle);

end;

inherited;

end;



procedure Form2.WMSysCommand(var Msg: TWMSysCommand);

begin

if (Msg.CmdType = SC_Minimize) then

ShowWindow(Application.Handle, SW_MINIMIZE)

else

inherited;

end;


Как сделать так, чтобы в компонент TEdit можно было вводить текст только на английской раскладке?
когда TEdit получает фокус надо вызвать:
Код
ActivateKeyboardLayout($409, 0);

если этого мало тогда почитай про WM_INPUTLANGCHANGE
Как скрыть своё приложение?
Если Вы хотет, чтобы Ваша программа не появлялась на панели задач, но форма была видна, то воспользуйтесь следующей командой:

Код
ShowWindow (Application.handle, SW_HIDE);


Данная команда в основном используется в приложениях, которые активируются через иконку в трее.

Как узнать физические координаты каретки в пикселях?
Код
{TRichEdit}



var

pt: TPoint;

begin

with richedit1 do

begin

Perform(messages.EM_POSFROMCHAR, WPARAM(@pt), selstart);

label1.caption := Format('(%d, %d)', [pt.x, pt.y]);

end;

end;



{TMemo and TEdit}



var

r: LongInt;

begin

with memo1 do

begin

r := Perform(messages.EM_POSFROMCHAR, selstart, 0);

if r >= 0 then

begin

label1.caption := IntToStr(HiWord(r));

label2.caption := IntToStr(LoWord(r));

end;

end;

end;
Ограничение ввода в текстовое поле
Код
{

In this exemple, the only keys allowed are the

same allowed in e-mail adresses.

}



procedure TForm1.Edit1KeyPress(Sender: TObject;

var Key: Char);

const

AllowedChars: string = 'abcdefghijklmnopq' +

'rstuvwxyz01234567_.@';

var

i: Integer;

Ok: Boolean;

begin

i := 0;

Ok := False;

{ If you erase next line, user won't be able to type backspace }

if Key = #8 then Ok := True;

repeat

i := i + 1;

if Key = AllowedChars[i] then Ok := True;

until (Ok) or (i = Length(AllowedChars));

if not Ok then Key := #0;

end;
Очистить иконку приложения
Код
// set the standard windows icon for the application

Application.Icon := nil;
Преобразовать первую букву каждого слова к верхнему регистру в TEdit
Код
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);

begin

with Sender as TEdit do

if (Text = '') or (Text[SelStart] = ' ')

or (SelLength = Length(Text)) then

if Key in ['a'..'z'] then

Key := UpCase(Key);

end;


Печать страницы
Печать страницы


Внимание! Если у вас не получилось найти нужную информацию, используйте рубрикатор или воспользуйтесь поиском


.



книги по программированию исходники компоненты шаблоны сайтов C++ PHP Delphi скачать