Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как StatusBar привезать к границам формы, Может кто сделает лучше? 
:(
    Опции темы
User
Дата 27.1.2005, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 5.11.2004

Репутация: нет
Всего: нет



Хочу привести пример для StatusBar позволяющий автоматически менять на StatusBar.Panels размеры:

Код
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ComCtrls;

type
 TForm1 = class(TForm)
   StatusBar1: TStatusBar;
   procedure FormCreate(Sender: TObject);
   procedure FormResize(Sender: TObject);
 private
   { Private declarations }
   a: double;
   b: double;
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 a := self.Width / self.StatusBar1.Panels.Items[0].Width;
 b := self.Width / self.StatusBar1.Panels.Items[1].Width;
end;

procedure TForm1.FormResize(Sender: TObject);
begin
 self.StatusBar1.Panels.Items[0].Width := trunc(self.Width / a);
 self.StatusBar1.Panels.Items[1].Width := trunc(self.Width / b);
end;

end.


Хотелосьбы услышить Ваше мнение и другие варианты решения данной задачи.
PM MAIL WWW   Вверх
Akella
Дата 27.1.2005, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



я делаю так

sb2 - TStatusBar
Код

procedure TfmMain.sb2Resize(Sender: TObject);
begin
//разные размеры составляющих
 sb2.Panels[0].Width:=(Width div 3)+50;
 sb2.Panels[1].Width:=(Width div 3)-100;
 sb2.Panels[2].Width:=(Width div 3)+50;
end;


PM MAIL   Вверх
p0s0l
Дата 27.1.2005, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Нормальный способ, только лучше добавить пару строк, и сделать его для любого количества панелей:
Код
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ComCtrls;

type
 TForm1 = class(TForm)
   StatusBar1: TStatusBar;
   procedure FormCreate(Sender: TObject);
   procedure FormResize(Sender: TObject);
 private
   { Private declarations }
   Proportions : array of real;
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var i : integer;
begin
 SetLength (Proportions, StatusBar1.Panels.Count);
 for i := 0 to StatusBar1.Panels.Count-1 do
   Proportions[i] := StatusBar1.Panels[i].Width / ClientWidth;
end;

procedure TForm1.FormResize(Sender: TObject);
var i : integer;
begin
 for i := 0 to StatusBar1.Panels.Count-1 do
   StatusBar1.Panels[i].Width := Trunc(ClientWidth * Proportions[i]);
end;

end.



--------------------
С уважением, г-н Посол.
PM   Вверх
Budy
Дата 27.1.2005, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 616
Регистрация: 6.2.2004
Где: Екатеринбург

Репутация: 1
Всего: 2



Хм, интересно. Надо попробовать


--------------------
Как ты назовешь свой корабль, так на нем и напишут
user posted image
PM MAIL WWW ICQ   Вверх
User
Дата 28.1.2005, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 5.11.2004

Репутация: нет
Всего: нет



Замечательно, но только господа програмисты, если вы заметили, то данный способ, как и мой впрочем, немного не корректно работают. А именно. При увеличении размера окна StatusBar1.Panels[i] увеличиваються не пропорционально окну, и получается небольшое смещение. Как быть?
PM MAIL WWW   Вверх
Akella
Дата 28.1.2005, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Код

procedure TfmMain.sb2Resize(Sender: TObject);
begin
//разные размеры составляющих
sb2.Panels[0].Width:=(Width div 3)+50;
sb2.Panels[1].Width:=(Width div 3)-100;
sb2.Panels[2].Width:=(Width div 3)+50;
end;

я так специально делаю так, что панели были разной длины
PM MAIL   Вверх
User
Дата 28.1.2005, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 5.11.2004

Репутация: нет
Всего: нет



А полный код глянуть нельзя?
PM MAIL WWW   Вверх
Akella
Дата 28.1.2005, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



какой еще полный? Это все!
PM MAIL   Вверх
User
Дата 28.1.2005, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 5.11.2004

Репутация: нет
Всего: нет



Я имею в виду как еще можно написать данный пример?
PM MAIL WWW   Вверх
p0s0l
Дата 28.1.2005, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Цитата(User @ 28.1.2005, 09:36)
При увеличении размера окна StatusBar1.Panels[i] увеличиваються не пропорционально окну, и получается небольшое смещение. Как быть?
Двигал-двигал, и не понял... Как это может быть не пропорционально, если ширина панелей вычисляется пропорционально ширине окна...
Покажи пример (т.е. приведи ширины панелей в статусбаре и ширину окна, когда появляется несоответствие пропорций...)




--------------------
С уважением, г-н Посол.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0657 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.