Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Изменить стандартное диалоговое окно [D6, Win2k]


Ad ©   (2002-10-28 13:04:00) 

Можно ли изменить стандартное диалоговое окно? например в PrintrDialog"е изменить некоторую надпись на свою.


SottNick   (2002-10-29 09:10:00) [1]

Компонент свой сделать не умеешь?
тогда по шагам:
1.делай файл TXTdlgs.pas
unit TXTDlgs;

{$R-}

interface

uses Messages, Windows, SysUtils, Classes, Controls, StdCtrls, Graphics,
ExtCtrls, Buttons, Dialogs;

type

{ TOpenTXTDialog }

TOpenTXTDialog = class(TOpenDialog)
private
FTXTPanel: TPanel;
FTXTLabel: TLabel;
FPaintPanel: TPanel;
FMemo:TMemo;
protected
procedure DoClose; override;
procedure DoSelectionChange; override;
procedure DoShow; override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
function Execute: Boolean; override;

end;

{ TSaveTXTDialog }

TSaveTXTDialog = class(TOpenTXTDialog)
public
function Execute: Boolean; override;
end;
procedure Register;
implementation

uses Consts, Forms, CommDlg, Dlgs;

{ TOpenTXTDialog }

{$R ICONS.res}
{$R TXTDLGS.RES}


procedure Register;
begin
RegisterComponents("Dialogs", [TOpenTXTDialog,TSaveTXTDialog]);
end;

constructor TOpenTXTDialog.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Filter := "TXT (*.txt)|*.txt";
FTXTPanel := TPanel.Create(Self);
with FTXTPanel do
begin
Name := "PicturePanel";
Caption := "";
SetBounds(204, 5, 169, 200);
BevelOuter := bvNone;
BorderWidth := 6;
TabOrder := 1;
FTXTLabel := TLabel.Create(Self);
with FTXTLabel do
begin
Name := "PictureLabel";
Caption := "";
SetBounds(6, 6, 157, 23);
Align := alTop;
AutoSize := False;
Parent := FTXTPanel;
end;
FPaintPanel := TPanel.Create(Self);
with FPaintPanel do
begin
Name := "PaintPanel";
Caption := "";
SetBounds(6, 29, 157, 145);
Align := alClient;
BevelInner := bvRaised;
BevelOuter := bvLowered;
TabOrder := 0;

FMemo := TMemo.Create(Self);
Parent := FTXTPanel;
with FMemo do
begin
Name := "Memo";
SetBounds(0, 0, 153, 141);
Align := alClient;
Parent := FPaintPanel;
end;
end;
end;
end;

destructor TOpenTXTDialog.Destroy;
begin
FMemo.Free;
FPaintPanel.Free;
FTXTLabel.Free;
FTXTPanel.Free;
inherited Destroy;
end;

procedure TOpenTXTDialog.DoSelectionChange;
var
FullName: string;
function ValidFile(const FileName: string): Boolean;
begin
Result := GetFileAttributes(PChar(FileName)) <> $FFFFFFFF;
end;
begin
FullName := FileName;
if FileExists(FullName) and ValidFile(FullName) then
try
FMemo.Lines.LoadFromFile(FullName);
except
end;
inherited DoSelectionChange;
end;

procedure TOpenTXTDialog.DoClose;
begin
inherited DoClose;
{ Hide any hint windows left behind }
Application.HideHint;
end;

procedure TOpenTXTDialog.DoShow;
var
PreviewRect, StaticRect: TRect;
begin
{ Set preview area to entire dialog }
GetClientRect(Handle, PreviewRect);
StaticRect := GetStaticRect;
{ Move preview area to right of static area }
PreviewRect.Left := StaticRect.Left + (StaticRect.Right - StaticRect.Left);
Inc(PreviewRect.Top, 4);
FTXTPanel.BoundsRect := PreviewRect;
FTXTPanel.ParentWindow := Handle;
inherited DoShow;
end;

function TOpenTXTDialog.Execute;
begin
if NewStyleControls and not (ofOldStyleDialog in Options) then
Template := "DLGTEMPLATE" else
Template := nil;
Result := inherited Execute;
end;

{ TSaveTXTDialog }

function TSaveTXTDialog.Execute: Boolean;
begin
if NewStyleControls and not (ofOldStyleDialog in Options) then
Template := "DLGTEMPLATE" else
Template := nil;
Result := DoExecute(@GetSaveFileName);
end;

end.


2.Делай файл ресурсов TXTdlgs.rc
DLGTEMPLATE DIALOG 0, 0, 316, 76
STYLE 0x404L | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS
FONT 8, "MS Sans Serif"
LANGUAGE LANG_NEUTRAL , SUBLANG_NEUTRAL
{
LTEXT "", 1119, 0, 0, 204, 76, SS_LEFT | WS_CHILD | NOT WS_VISIBLE | WS_GROUP
}


И откомпилируй его brcc32 TXTdlgs.rc
Получишь файл TXTdlgs.RES, должен лечать вместе с TXTdlgs.pas

3.Делай еще один файл ресурсов (ICONS.res) при помощи "Image Editor",
состоящий из 2х картинок (любых) размером 24х24
Первую назови TOPENTXTDIALOG, вторую TSAVETXTDIALOG.
Файл кладешь туда же.

4.Почти готово.
В Delphi делаешь "Component/Install Component"
В "Unit file name" указываешь файл TXTdlgs.pas с путем
Во всплывшем окошке "Package - dclusr..." жмешь "Compile"
ГОТОВО
Во вкладке "Dialogs" должны быть 2 новых компонента.

ЭТО ТЕБЕ ДЛЯ ОСНОВЫ
Свои хотелки сам воплощай.


Ad   (2002-10-28 17:09:00) [2]

SottNick:

<<мне из него удалось сделать диалог для открытия <<типизированного ,файла с предпросмотром

можно поподробнее рассказать как это удальсь сделать?


SottNick   (2002-10-28 13:34:00) [3]

мне из него удалось сделать диалог для открытия типизированного файла с предпросмотром


SottNick   (2002-10-28 13:31:00) [4]

можно наверное
посмотри, как сделано
OpenPictureDialog (вкладка Dialogs в панели компонентов)


Наверх

Титульная страница Поиск, карта сайта Написать письмо