Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001
- Название:Советы по Delphi. Версия 1.4.3 от 1.1.2001
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001 краткое содержание
…начиная с 1001. Смотрите другие файлы…
Советы по Delphi. Версия 1.4.3 от 1.1.2001 - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
(Components[i] asTCheckBox).Checked then begin
... сюда поместите ваш код ...
end;
end;
Кроме того, следующий код Delphi абсолютно корректен:
ifComponents[i] = CheckBox5 then Чтотоделаем;
Также, каждый компонент в Delphi имеет опубликованное (Published) свойство с именем 'Tag', значение которого вы можете задавать во время создания компонента, и затем, во время выполнения приложения, обращаться к нему для получения доступа к компоненту:
vari : Integer
begin
fori := 0 toComponentCount - 1 do
ifComponents[i] isTCheckBox then
with(Components[i] asTCheckBox) do
CaseTag of
1 : ifChecked thenDoSomethingOnBox1;
2 : ifChecked thenDoSomethingOnBox2;
… другое …
end;
end;
Для получения дополнительной информации, обратитесь к справке Delphi с ключевым словом «ComponentCount».
BitBtn
Кнопка с несколькими строчками текста III
Вот полный код проекта, создающего на кнопке во время выполнения две строчки текста.
programTwolnBtn;
usesForms,TwolnBtu in'TWOLNBTU.PAS' {Form1};
{$R *.RES}
begin
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
objectForm1: TForm1
Left = 202
Top = 98
Width = 320
Height = 176
Caption = 'Form1'
Font.Color = clRed
Font.Height = -12
Font.Name = 'Arial'
Font.Style = [fsBold]
PixelsPerInch = 96
OnActivate = ChgSpeedButton
OnCreate = ChgBitBtn
TextHeight = 15
objectSpeedButton1: TSpeedButton
Left = 144
Top = 24
Width = 65
Height = 45
Caption = 'Это двустрочный заголовок'
OnClick = ChgSpeedButton
end
object
BitBtn1: TBitBtn
Left = 32
Top = 24
Width = 69
Height = 37
Caption = 'Прерывание работы программы'
TabOrder = 0
OnClick = BitBtn1Click
end
end
unitTwolnbtu;
interface
usesSysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons;
typeTForm1 = class(TForm)
BitBtn1: TBitBtn;
SpeedButton1: TSpeedButton;
procedureChgBitBtn(Sender: TObject);
procedureChgSpeedButton(Sender: TObject);
procedureBitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
varForm1: TForm1;
implementation
{$R *.DFM}
procedureTForm1.ChgBitBtn(Sender: TObject);
VAR
R : TRect;
N : Integer;
Buff : ARRAY[0..255] OFChar;
BEGIN
WITHBitBtn1 DO BEGIN
Glyph.Canvas.Font := Self.Font;
Glyph.Width := Width-6;
Glyph.Height := Height-6;
R := Bounds(0,0,Glyph.Width,0);
StrPCopy(Buff, Caption);
Caption := '';
DrawText(Glyph.Canvas.Handle, Buff, StrLen(Buff), R, DT_CENTER ORDT_WORDBREAK ORDT_CALCRECT);
OffsetRect(R, (Glyph.Width-R.Right) DIV2, (Glyph.Height - R.Bottom) DIV2);
DrawText(Glyph.Canvas.Handle, Buff, StrLen(Buff), R, DT_CENTER ORDT_WORDBREAK);
END;
END;
procedureTForm1.ChgSpeedButton(Sender: TObject);
VAR
R : TRect;
N : Integer;
Buff : ARRAY[0..255] OFChar;
BEGIN
WITHSpeedButton1 DO BEGIN
Glyph.Canvas.Font := Self.Font;
Glyph.Width := Width-6;
Glyph.Height := Height-6;
R := Bounds(0,0,Glyph.Width,0);
StrPCopy(Buff, Caption);
Caption := '';
DrawText(Glyph.Canvas.Handle, Buff, StrLen(Buff), R,DT_CENTER ORDT_WORDBREAK ORDT_CALCRECT);
OffsetRect(R, (Glyph.Width-R.Right) DIV2, (Glyph.Height - R.Bottom) DIV2);
DrawText(Glyph.Canvas.Handle, Buff, StrLen(Buff), R,DT_CENTER ORDT_WORDBREAK);
END;
END;
procedureTForm1.BitBtn1Click(Sender: TObject);
begin
Close;
end;
end.
-Dennis Passmore
ComboBox
Хочу реализовать правильный выпадающий контрол (combo). Как это сделать?
Nomadicотвечает:
Когда-то потратил немало времени на разбор, как же все таки работают дропдаун-контролы. В итоге мной был написан маленький юнит, который я положил у себя в каталоге Demo для ознакомления интересующихся. Он маленький (его основная задача — показать принцип работы, а все остальное — как реализуешь), я думаю, что большинству он пригодиться, поэтому публикую здесь. Касательно твоего вопроса - реализуй вместо листбокса выпадающий контрол, который даст тебе функциональность дерева.
unitedit1;
interface
usesWindows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TPopupListbox = class(TCustomListbox)
protected
procedureCreateParams( varParams: TCreateParams); override;
procedureCreateWnd; override;
procedureMouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
end;
TTestDropEdit = class(TEdit)
private
FPickList: TPopupListbox;
procedureCMCancelMode( varMessage: TCMCancelMode); messageCM_CancelMode;
procedureWMKillFocus( var Message: TMessage); messageWM_KillFocus;
protected
procedureCloseUp(Accept: Boolean);
procedureDropDown;
procedureWndProc( var Message: TMessage); override;
public
constructorCreate(Owner: TComponent); override;
destructorDestroy; override;
end;
implementation
{ TPopupListBox }
procedureTPopupListBox.CreateParams( varParams: TCreateParams);
begin
inherited;
withParams do begin
Style := Style orWS_BORDER;
ExStyle := WS_EX_TOOLWINDOW orWS_EX_TOPMOST;
WindowClass.Style := CS_SAVEBITS;
end;
end;
procedureTPopupListbox.CreateWnd;
begin
inheritedCreateWnd;
Windows.SetParent(Handle, 0);
CallWindowProc(DefWndProc, Handle, WM_SETFOCUS, 0, 0);
end;
procedureTPopupListbox.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
inheritedMouseUp(Button, Shift, X, Y);
TTestDropEdit(Owner).CloseUp((X >= 0) and(Y >= 0) and(X < Width) and(Y < Height));
end;
{ TTestDropEdit }
constructorTTestDropEdit.Create(Owner: TComponent);
begin
inheritedCreate(Owner);
Parent := Owner asTWinControl;
Интервал:
Закладка: