Для этого достаточно текущее разрешение экрана и в соответствии с ним изменить дескриптор иконки приложения. Естевственно, что Вам прийдётся создать в ресурсах новые иконки.

 

 

AppUtils unit:

  

AppBroadcast - Функция посылает сообщение Msg всем формам приложения.

FindForm - Функция перебирает формы приложения, проверяя для каждой из них, является ли она экземпляром класса FormClass

FindShowForm - Функция перебирает формы приложения, проверяя для каждой из них, является ли она экземпляром класса FormClass

GetDefaultIniName - Функция возвращает имя INI-файла "по умолчанию" для приложения.

GetDefaultIniRegKey - Функция возвращает имя ключа регистрационной базы данных Windows (Registry) "по умолчанию" для приложения

GetDefaultSection - Функция возвращает строку для указанной компоненты Component,

GetUniqueFileNameInDir - Возвращает уникальное для заданного каталога имя файла, InstantiateForm- функция создает экземпляр формы типа FormClass

ReadFormPlacement - Процедура ReadFormPlacement используется для восстановления формы

RestoreFormPlacement - Процедура RestoreFormPlacement используется для восстановл. формы

RestoreGridLayout - Восстанавливает из INI-файла ширины колонок компонент TCustomGrid

RestoreMDIChildren - Создает и показывает MDIChild-формы

SaveFormPlacement - Процедура используется для сохранения состояния формы

SaveGridLayout

SaveMDIChildren

ShowDialog - Создание и модальное исполнение диалога

WriteFormPlacement - Процедура используется для сохранения состояния формы,

 

 

 

Здесь есть хитрость:

 

Нужно разместить все необходимые элементы управления в отдельной форме, которая должна отслеживать перемещение и изменение размеров основной формы. Данная форма будет всегда находится над областью заголовка основной формы.

 

Нижеприведенный проект включает в себя 2 формы и выпадающий список (combobox). После запуска программы список появляется в области заголовка главной формы. Два ключевых вопроса: 1) организация перехвата сообщения WM_MOVE главной формы; и 2) возвращение фокуса в главную форму после того, как пользователь нажмет на каком-либо элементе управления, способным иметь фокус (например, TComboBox, TButton и др.)

 

Code:

procedure ShadeIt(f: TForm; c: TControl; Width: Integer; Color: TColor);

var

rect: TRect;

old: TColor;

begin

if (c.Visible) then

begin

   rect := c.BoundsRect;

   rect.Left := rect.Left + Width;

   rect.Top := rect.Top + Width;

   rect.Right := rect.Right + Width;

   rect.Bottom := rect.Bottom + Width;

   old := f.Canvas.Brush.Color;

   f.Canvas.Brush.Color := Color;

   f.Canvas.fillrect(rect);

   f.Canvas.Brush.Color := old;

end;

end;

 

procedure TForm1.FormPaint(Sender: TObject);

var

i: Integer;

begin

for i := 0 to Self.ControlCount - 1 do

   ShadeIt(Self, Self.Controls[i], 3, clBlack);

end;

 

 

 

Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php

Invalidate весь объект перерисовывается заново; обычно перерисовывается только часть бывшая перед этим закрытой

 

Update незамедлительная перерисовка

 

Refresh  Invalidate + Update

 

Code:

{

The example below demonstrates creating custom caret:

}

 

unit Unit1;

 

interface

 

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

ExtCtrls, StdCtrls;

 

type

TForm1 = class(TForm)

   Memo1: TMemo;

   Image1: TImage;

   Edit1: TEdit;

   procedure Memo1MouseDown(Sender: TObject; Button: TMouseButton;

     Shift: TShiftState; X, Y: Integer);

   procedure Edit1MouseDown(Sender: TObject; Button: TMouseButton;

     Shift: TShiftState; X, Y: Integer);

private

   { Private declarations }

public

   { Public declarations }

end;

 

var

Form1: TForm1;

 

implementation

 

{$R *.DFM}

 

procedure TForm1.Memo1MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

CreateCaret(Memo1.Handle, Image1.Picture.Bitmap.Handle, 0, 0);

ShowCaret(Memo1.Handle);

end;

 

procedure TForm1.Edit1MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

CreateCaret(Edit1.Handle, 0, 10, 4);

ShowCaret(Edit1.Handle);

end;

 

end.

 

 

{The form file source (*.dfm) }

 

object Form1: TForm1

Left = 192

Top = 107

Width = 544

Height = 375

Caption = 'Form1'

Color = clBtnFace

Font.Charset = DEFAULT_CHARSET

Font.Color = clWindowText

Font.Height = -11

Font.Name = 'MS Sans Serif'

Font.Style = []

OldCreateOrder = False

PixelsPerInch = 96

TextHeight = 13

object Image1: TImage

   Left = 12

   Top = 4

   Width = 16

   Height = 16

   AutoSize = True

   Picture.Data = {

     07544269746D6170B6020000424DB602000000000000B6000000280000001000

     0000100000000100100000000000000200000000000000000000100000000000

     000000000000000080000080000000808000800000008000800080800000C0C0

     C000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFF

     FF00000000000000000000000000000000000000000000000000000000000000

     0000000000000000000000000000000000000000000000000000000000000000

     000000000000FF7FFF7FFF7FFF7F000000000000FF7FFF7FFF7FFF7FFF7FFF7F

     00000000FF7FFF7FFF7FFF7F000000000000FF7FFF7FFF7FFF7FFF7FFF7F0000

     0000FF7FFF7FFF7FFF7FFF7F00000000FF7FFF7FFF7FFF7FFF7FFF7FFF7F0000

     000000000000FF7FFF7FFF7F0000000000000000FF7FFF7FFF7FFF7F00000000

     0000000000000000FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F00000000

     0000000000000000FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F000000000000

     0000000000000000FF7FFF7FFF7F00000000FF7FFF7FFF7FFF7F000000000000

     00000000000000000000FF7FFF7FFF7FFF7FFF7FFF7FFF7F0000000000000000

     00000000000000000000FF7FFF7FFF7FFF7FFF7FFF7FFF7F0000000000000000

     000000000000000000000000FF7FFF7FFF7FFF7FFF7FFF7F0000000000000000

     000000000000000000000000FF7FFF7FFF7FFF7FFF7F00000000000000000000

     0000000000000000000000000000FF7FFF7FFF7FFF7F00000000000000000000

     0000000000000000000000000000FF7FFF7FFF7F000000000000000000000000

     00000000000000000000000000000000FF7F0000000000000000000000000000

     0000}

end

object Memo1: TMemo

   Left = 12

   Top = 36

   Width = 149

   Height = 149

   Lines.Strings = ('Memo1')

   TabOrder = 0

   OnMouseDown = Memo1MouseDown

end

object Edit1: TEdit

   Left = 220

   Top = 60

   Width = 121

   Height = 21

   TabOrder = 1

   Text = 'Edit1'

   OnMouseDown = Edit1MouseDown

end

end

 

 

Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php

 

Если добавить флаг csOpaque (непрозрачный) к свойству ControlStyle компонента

- то фон компонента перерисовываться не будет.

 

Именно так и происходит в Windows - посылаются оба сообщения. Для того чтобы обработать только какое-то одно событие необходимо чуть "задержать" выполнение OnClick. Сделать это можно следующим способом:

 

стиль WS_EX_TRANSPARENT

 

Стиль окна-формы указывается в CreateParams. Только вот когда перемещаешь его, фон остается со старым куском экрана. Чтобы этого не происходило, то когда pисуешь своё окно, запоминай, что было под ним,а пpи пеpемещении восстанавливай.

HDC hDC = GetDC(GetDesktopWindow()) тебе поможет..

Andrei Bogomolov

 

 

 

 

 

 

Следующий модуль строит дерево классов

Никак. DCU файлы разных версий Дельфи несовместимы. Нужны либо исходники компонентов, либо надо просить у разработчика компиляцию для текущей версии Дельфи.