Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2002.07.15;
Скачать: [xml.tar.bz2];

Вниз

Как изменить вид стандартного TSaveDialog?   Найти похожие ветки 

 
JC   (2002-05-04 13:14) [0]

Для примера: Corel (Draw, PhotoPaint), и компонент TSavePictureDialog.


 
cok   (2002-05-04 14:02) [1]

Попробуй создать компонент, родителем которого будет TSaveDialog.


 
JC   (2002-05-04 14:30) [2]

А как его потом изменить и в какой функции?


 
Suntechnic   (2002-05-04 19:32) [3]

Открой исходники TSavePictureDialog там всё просто и доступно.


 
JC   (2002-05-04 21:07) [4]

Открывал, там функция GetStaticRect(), пытаюсь повторить, пишет is not acessible(недостижим).


 
Yuriy   (2002-05-05 00:00) [5]

Не совсем в тему.
Мне нужно дополнить OpenDialod окном просмотра - как бы это сделать? Не создавать же собственный компoнент с нуля....


 
Suntechnic   (2002-05-05 03:36) [6]

>JC © (04.05.02 21:07)
Что ты пытаешься повторить? Конечно она снаружи недоступна. Она ж protected. Надо написать свой класс, отнаследованный от TSaveDialog или от TOpenDialog (в зависимости от того, что надо), и его использовать.

>Yuriy © (05.05.02 00:00)
См. ответ JC ©-у.


 
JC   (2002-05-07 15:09) [7]

Suntechnic ты чем-либо таким занимался, если можно хоть пример не для компонета, а для программы.


 
Suntechnic   (2002-05-07 15:50) [8]

>JC © (07.05.02 15:09)
Занимался. Только я на Билдере занимался. Если C++ устроит могу показать код добавления предварительного просмотра текстовых файлов.


 
JC   (2002-05-07 20:33) [9]

Suntechnic Конечно, я сейчас этим и маюсь(C++Builder5), и если можно по подписывай хотя бы расширения файлов, заранее благодарен.


 
Suntechnic   (2002-05-08 02:13) [10]

Файл DialogExUnit.h

#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <FileCtrl.hpp>
#include <ExtCtrls.hpp>
#include <Dialogs.hpp>
#include <ExtDlgs.hpp>
//---------------------------------------------------------------------------
#ifndef DialogExUnitH
#define DialogExUnitH
//---------------------------------------------------------------------------
class TOpenDialogEx : public TOpenDialog
{
public:
virtual __fastcall TOpenDialogEx(TComponent * Owner);
virtual __fastcall ~TOpenDialogEx();
virtual bool __fastcall Execute();
protected:
DYNAMIC void __fastcall DoShow();
DYNAMIC void __fastcall DoSelectionChange();
void __fastcall ReadDescription();
TPanel * panel;
TMemo * memo;
};
//---------------------------------------------------------------------------
#endif


Файл DialogExUnit.cpp

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "DialogExUnit.h"


//---------------------------------------------------------------------------
#pragma package(smart_init)
//---------------------------------------------------------------------------
__fastcall TOpenDialogEx::TOpenDialogEx(TComponent * Owner) : TOpenDialog(Owner)
{
panel=new TPanel(this);
panel->Name="TextPanel";
panel->Caption="";
panel->SetBounds(204, 5, 169, 200);
panel->BevelOuter= bvNone;
panel->BorderWidth= 6;
panel->TabOrder= 1;
memo=new TMemo(panel);
memo->Parent=panel;
memo->Align=alClient;
memo->WordWrap=true;
memo->ReadOnly=true;
}
//---------------------------------------------------------------------------
__fastcall TOpenDialogEx::~TOpenDialogEx()
{
delete panel;
}
//---------------------------------------------------------------------------
void __fastcall TOpenDialogEx::DoShow()
{
TRect PreviewRect, StaticRect;

//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);
PreviewRect.Top=PreviewRect.Top+ 4;
panel->BoundsRect=PreviewRect;
panel->ParentWindow= Handle;
TOpenDialog::DoShow();
}
//---------------------------------------------------------------------------
bool __fastcall TOpenDialogEx::Execute()
{
if( NewStyleControls && !Options.Contains(ofOldStyleDialog))
Template="DLGTEMPLATE";
else
Template=NULL;
return TOpenDialog::Execute();
}
//---------------------------------------------------------------------------
void __fastcall TOpenDialogEx::DoSelectionChange()
{
if(FileExists(FileName))
memo->Lines->LoadFromFile(FileName);
else
memo->Text="";
TOpenDialog::DoSelectionChange();
}//---------------------------------------------------------------------------



 
Suntechnic   (2002-05-08 02:20) [11]

Использовать так:

#include "DialogExUnit.h"
void __fastcall TMainForm::Button1Click(TObject *Sender)
{
TOpenDialogEx * od=new TOpenDialogEx(this);
od->Filter="Text Files(*.txt)|*.txt";
if(od->Execute())
// do something
delete od;
}


И ещё. Если это сразу не заработает, найди в каталогах Билдера файл extdlgs.rc (насколько я помню он где-то в ...Source\Vcl валяется) и подключи его к проекту.


 
Suntechnic   (2002-05-08 02:24) [12]

Там в заголовочном файле убери ф-цию void __fastcall ReadDescription();. У меня просто не файлы в memo показывало, а чуть посложнее было, я лишнее убрал, чтоб идею показать и код не загромождать.


 
JC   (2002-05-09 00:04) [13]

Suntechnic ОГРОМНОЕ СПАСИБО, разобрался что и куда писать, (конечно пришлось выучить, ресурсы, которые я до этого не знал). Но всё резко прояснилось.


 
JC   (2002-05-09 13:07) [14]

Suntechnic помледний завершающий вопрос, я создал ComboBox, но не могу присвоить элементы списка в нём, ругается, что у Panel нет Parent"a.


 
Suntechnic   (2002-05-09 15:55) [15]

>JC © (09.05.02 13:07)
А Parent-a присвоить не пробовал? :)


 
JC   (2002-05-09 15:57) [16]

Какого? Если Form1, то Panel не видно?


 
Suntechnic   (2002-05-09 17:25) [17]

Ну что-нибудь типа panel->Parent=this; попробуй написать. Если не разберёшься приду домой гляну. На работе нет времени...


 
JC   (2002-05-10 13:41) [18]

panel->Parent=this- несоответствие типов(TWinControl нужно)


 
JC   (2002-05-11 17:56) [19]

Suntechnic нашел что-нибудь. Получется, что this-это TOpenDialogEx*, а Parent должен быть TWinControl*...


 
Suntechnic   (2002-05-11 19:32) [20]

Добавляй значения вот в этом месте и всё будет в порядке:
void __fastcall TOpenDialogEx::DoShow()
{
TRect PreviewRect, StaticRect;

//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);
PreviewRect.Top=PreviewRect.Top+ 4;
panel->BoundsRect=PreviewRect;
panel->ParentWindow= Handle; // After this line ONLY!!!
//for example
combobox->Items->Add("First");
combobox->Items->Add("Second");

TOpenDialog::DoShow();
}


 
JC   (2002-05-12 00:13) [21]

Огромное спасибо!



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2002.07.15;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.012 c
3-47198
KVT2000
2002-06-18 11:35
2002.07.15
Ошибка запроса


3-47151
mrgrin
2002-06-25 09:18
2002.07.15
Как добавить строку в DBGrid?


6-47644
Airs
2002-05-06 15:04
2002.07.15
Вопрос с передачей массивов


3-47079
Arkady
2002-06-21 09:01
2002.07.15
DBGrid


8-47614
ЕвгенийА
2002-03-08 10:50
2002.07.15
MediaPlayer





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский