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

Вниз

Проблема мигания   Найти похожие ветки 

 
Seldon ©   (2004-06-23 00:05) [0]

Я пишу аналог TNotebook но с возможностью создания страниц в runtime.
Создаю нескольких страниц и размещению на них TRichEdit с Align=alClient. При переключении страниц наблюдается мигание. Как от него избавиться? Установка DoubleBuffered:=true не помагает.
Вот код:


unit MyPanel;
interface

uses
 Classes, Controls, Contnrs;
 
type
 TMyPage=class(TCustomControl)
 public
   constructor Create(AOwner:TComponent); override;
 end;
 
 TMyPanel = class(TCustomControl)
 private
   fPages:TObjectList;
   fPageIndex: Integer;
   function GetPage(Index: Integer): TMyPage;
   procedure SetPageIndex(const Value: Integer);
   function CheckIndex(Index:Integer):Boolean;
 public
   constructor Create(AOwner:TComponent); override;
   destructor Destroy; override;
   function Add:TMyPage;
   procedure Delete(Index:Integer);
   property Pages[Index: Integer]: TMyPage read GetPage;
   property PageIndex:Integer read fPageIndex write SetPageIndex default -1;
 published
   property Align;
 end;
 
procedure Register;
implementation

procedure Register;
begin
 RegisterComponents("Standard", [TMyPanel]);
end;

function TMyPanel.Add: TMyPage;
var
 NewPage:TMyPage;
begin
 NewPage:=TMyPage.Create(Self);
 NewPage.Parent:=Self;
 NewPage.Align:=alClient;
 fPages.Add(NewPage);
 Result:=NewPage;
end;

function TMyPanel.CheckIndex(Index: Integer): Boolean;
begin
 Result:=(Index>=0)and(Index<fPages.Count)
end;

constructor TMyPanel.Create(AOwner: TComponent);
begin
 inherited;
 fPages:=TObjectList.Create;
 fPageIndex:=-1;
end;

procedure TMyPanel.Delete(Index: Integer);
begin
 fPages.Delete(Index);
end;

destructor TMyPanel.Destroy;
begin
 fPages.Free;
 inherited;
end;

function TMyPanel.GetPage(Index: Integer): TMyPage;
begin
 if CheckIndex(Index) then
   Result:=TMyPage(fPages[Index])
 else
   Result:=nil;
end;

procedure TMyPanel.SetPageIndex(const Value: Integer);
begin
 if CheckIndex(Value)or(Value=-1) then
 begin
   if CheckIndex(fPageIndex) then
     TMyPage(fPages[fPageIndex]).Visible:=false;
   fPageIndex := Value;
   if CheckIndex(fPageIndex) then
     TMyPage(fPages[fPageIndex]).Visible:=true;
 end;
end;

constructor TMyPage.Create(AOwner: TComponent);
begin
 inherited;
 ControlStyle:=ControlStyle+[csAcceptsControls];
 Visible:=false;
end;

end.


Вот код создания RichEdit"ов:


procedure TForm1.FormCreate(Sender: TObject);
var
 a:Integer;
begin
 MyPanel1.Add;
 MyPanel1.Add;
 MyPanel1.Add;
 MyPanel1.Add;
 for a:=0 to 3 do
   with TRichEdit.Create(MyPanel1.Pages[a]) do
   begin
     Parent:=MyPanel1.Pages[a];
     Align:=alClient;
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 MyPanel1.PageIndex:=MyPanel1.PageIndex+1;
end;


 
GrayFace ©   (2004-06-27 09:15) [1]

Надо так:

procedure TMyPanel.SetPageIndex(const Value: Integer);
begin
if CheckIndex(Value)or(Value=-1) then
begin
  if CheckIndex(Value) then
    TMyPage(fPages[Value]).Visible:=true;
  if CheckIndex(fPageIndex) then
    TMyPage(fPages[fPageIndex]).Visible:=false;
  fPageIndex := Value;
end;
end;


 
Seldon ©   (2004-06-27 12:44) [2]


>  [1] GrayFace ©   (27.06.04 09:15)

Всё равно мигает



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

Форум: "Компоненты";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.039 c
14-1117983887
asdqwer
2005-06-05 19:04
2005.06.29
Quicktime+IE


4-1115251028
Vladimyr
2005-05-05 03:57
2005.06.29
Adaptec ASPI problem


1-1118069208
Эдик Дятлов
2005-06-06 18:46
2005.06.29
Сохранить запись, содержащую динамический массив, в файл


14-1117747082
Просто Джо
2005-06-03 01:18
2005.06.29
Горан Брегович - всякие корни и пни маздай


1-1118223346
nikolas
2005-06-08 13:35
2005.06.29
inherited???





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский