FShowFrame:= Value;
RecreateWnd;
end;
end;
procedureTVSProgressBar.WMNCPAINT( varMsg: TMessage);
var
DC: HDC;
RC: TRect;
begin
ifShowFrame then begin
Inherited; // если рамка – родитель сам разберется
Invalidate;
end else begin
DC := GetWindowDC(Handle);
try
Windows.GetClientRect(Handle, RC); // площадка под ProgressBar
withRC do begin// учтем 3D эффект
Right:= Right + 2;
Bottom:= Bottom + 2;
end;
Windows.FillRect(DC, RC, Brush.Handle); // зальем площадку цветом подложки
finally
ReleaseDC(Handle, DC);
end;
end;
end;
procedure Register;
begin
RegisterComponents('Controls', [TVSProgressBar]);
end;
end.
Теперь ProgressBar может появиться на форме «неожиданно», как бы из ничего, если ShowFrame:= False.
C уважением, VS
Можно ли использовать результаты выполнения одного TQuery для другого TQuery?
Nomadicотвечает:
Если Вы работаете с локальными БД, то Вам поможет –
DbiMakePermanent(SourceQuery.Handle, RName, false);
Можно ли вызвать хранимую процедуру через TQuery, если она не возвращает курсора?
Nomadicотвечает:
В случае MS SQL нужно написать:
Query1.Sql := 'declare @res' + #13#10 + 'exec MyFunc :Param1, :Param2, @res OUTPUT';
Query1.Open;
Result := Query1.FieldByName( 'Column1' ).Value;
Query1.Close;
1. После ключевого слова where используйте оператор order
Select fname, lname, title
from T_EMPLOYEE
where title = 'MGR'
order by lname, fname
2. Попробуйте использовать событие ColEnter.
Две и более команд в свойстве TQUERY.SQL
Я предлагаю вас попытаться подключить новый запрос к существующему TQuery.
Query1.Sql.Clear;
Query1.Close;
Query1.Sql.Add('select * from «monitor.dbf» order by location,dept');
Query1.Open;
Query1.Refresh;
Хитрость кроется в закрытии вашего запроса перед назначением нового.
Как вставить в нужное место Rich Text в TRichEdit?
Nomadicсоветует:
Вы можете послать сообщение EM_STREAMIN с параметром SFF_SELECTION методом Perform для замены текущего Selection. Выдержка из Help:
EM_STREAMIN
wParam = (WPARAM)(UINT) uFormat; // Integer
lParam = (LPARAM)(EDITSTREAM FAR *) lpStream; // EDITSTREAM^
The EM_STREAMIN message replaces the contents of a rich edit control with the specified data stream.
Parameters
uFormat
One of the following data formats, optionally combined with the SFF_SELECTION flag:
Value |
Meaning |
SF_TEXT |
Text |
SF_RTF Rich-text |
format |
If the SFF_SELECTION flag is specified, the stream replaces the contents of the current selection. Otherwise, the stream replaces the entire contents of the control.
lpStream
Pointer to an EDITSTREAM structure. The control reads (streams in) the data by repeatedly calling the function specified by the structure's pfnCallback member.
Return Value
Returns the number of characters read.
Как указать максимальный размер текста для TRichEdit?
Nomadicсоветует:
У этого компонента есть свойство MaxLength, которое работает некорректно. Поэтому лучше пользоваться
RichEdit.Perform(EM_LIMITTEXT, нужный размер, 0);
Причем перед каждом открытии файла это действие необходимо повторять.
Если Вы передаете в качестве размера 0, то ОС ограничивает размер OS Specific Default Value. Реально, по результатам моих экспериментов, поставить можно размер, чуть меньший доступной виртуальной памяти. Я ограничился 90% от свободной виртуалки.
Для того, чтобы не повторять этот вызов (EM_LIMITTEXT), можно воспользоваться сообщением EM_EXLIMITTEXT.
Позиция курсора в TRichEdit
ProcedureTForm1.GetPosition(Sender: TRichEdit);
var
iX, iY: Integer;
TheRichEdit: TRichEdit;
begin
iX:= 0;
iY:= 0;
TheRichEdit:= TRichEdit(Sender);
iY:= SendMessage(TheRichEdit.Handle, EM_LINEFROMCHAR, TheRichEdit.SelStart, 0);
iX:= TheRichEdit.SelStart - SendMessage(TheRichEdit.Handle, EM_LINEINDEX, iY, 0);
Panel1.Caption:= IntToStr(iY + 1) + ':' + IntToStr(iX + 1);
end;
procedureTForm1.RichEditMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
GetPosition(RichEdit);
end;
procedureTForm1.RichEditKeyUp(Sender: TObject; varKey: Word; Shift: TShiftState);
begin
GetPosition(RichEdit);
end;
Группа радиокнопок и ActiveControl
На форме я имею группу радиокнопок. Я хотел бы вызывать контекстно-зависимую подсказку, если пользователь нажал F1. Для данной конкретной группы радиокнопок я установил HelpContext равным 22, но при любом вызове ActiveControl.HelpContext это возвращает (0). Все другие элементы управления работают как положено. Что я делаю неправильно?
Читать дальше