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

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

Раздвижная форма [D7]


Roman_S ©   (2007-04-09 16:02:00) 

Написал следующий код:
procedure TForm1.PanelKluchClick(Sender: TObject);
begin
if Panel1.Caption ='Show'
then begin
 ClientHeight:=500;
 Panel1.Caption := 'Hide';
end
else begin
 ClientHeight:=301;
 Panel1.Caption := 'Show';
end;
end;

При клике по панели, форма должна раздвигаться.
Всё бы хорошо, но на некоторых компьютерах форма НЕ раздвигается а складывается???!
Что не так? Как исправить?


Roman_S   (2007-04-12 18:20:00) [1]

Глюки продолжаются!
Единственное, что удалось выяснить, - происходит только на некоторых Win2000. Размер шрифта во всех виндах стандартный.

Такое ощущение, что не устанавливается фиксированный размер формы, а просто происходит сложение/вычитание конкретного числа!


{RASkov}   (2007-04-09 17:27:00) [2]

> bsSingle!

При таком раскладе Винда не должна менять размер формы(это в отличии от bsSizeToolWin)... может у тебя какие скиновые компоненты рулят.... или фик его знает. Сомневаюсь я, что размер прыгает, как ты это описал в [10-11] - Проверь, на разных машинах, где размеры меняются
ShowMessage(IntToStr(ClientHeight));
Возможно компоненты с AutoSize=True - чего шалят. Здесь может зависить от настроек Winды - шрифт: крупный/обычный, например... но это не должно сказываться на размер формы, у которой AutoSize=False и BorderStyle=bsSingle..


Roman_S   (2007-04-09 17:08:00) [3]

bsSingle!


Roman_S   (2007-04-09 17:07:00) [4]

Да, спасибо!
Была одна проблема с ?????? вместо ПРИВЕТ (оказалось проблемы с Delphi 7 на англоязычных виндах) Ну хоть понятно было в чём дело и как решить!

А тут чётко написаны размеры...
Каккие настройки WinXP могут влиять на это?


{RASkov}   (2007-04-09 17:06:00) [5]

> [11] Roman_S ©   (09.04.07 17:03)

А BorderStyle у этой формы какой?


{RASkov}   (2007-04-09 17:03:00) [6]

> [10] Roman_S ©   (09.04.07 16:59)
> было так,  вот только на нескольких даже сразу было видно
> невооружённым взглядом, что форма запускалась не = 301,
> а ~295 (чуть-чуть ниже),

Странно все это... ну попробуй еще и это:
procedure <TForm>.FormCreate(Sender: TObject);
begin
 Panel1.Top := ClientHeight-Panel1.Height;
end;

Мысль думаю понял?


Roman_S   (2007-04-09 17:03:00) [7]

Вроде чётно прописано:
ClientHeight:=500
Вот почему на каких-то глюкнутых компах, она не разворачивается до конца, и начинается.....!?

295 (вместо 301) --> 450 (вместо 500) --> 250 (вместо 301)


Roman_S   (2007-04-09 16:59:00) [8]

Спасибо, {RASkov}!
Но по-поводу самого вопроса: размер формы нельзя изменить, за исключением клика по панели (разворачиваем = 500, сворачиваем - высота = 301) С моим кодом ПОЧТИ везде было так,  вот только на нескольких даже сразу было видно невооружённым взглядом, что форма запускалась не = 301, а ~295 (чуть-чуть ниже), затем начиналось: разворачиваем ~450, сворачиваем ~250. Врезультате панель (по которой надо кликать) пропадала с экрана, и ничего не остаётся как закрыть программу!


{RASkov}   (2007-04-09 16:55:00) [9]

А если чесно, то я не понял, что это значит:
> Всё бы хорошо, но на некоторых компьютерах форма НЕ раздвигается, а складывается???!


{RASkov}   (2007-04-09 16:51:00) [10]

> форма изначально свернута, у панели свойство Tag=0, ClientHeght=301....

И в дизайнере у панели Caption = 'Show'...


{RASkov}   (2007-04-09 16:50:00) [11]

> [5] Roman_S ©   (09.04.07 16:31)

Сделай через Тэг:

procedure TForm1.Panel1Click(Sender: TObject);
const PnCapt: array [Boolean] of String = ('Show', 'Hide');
     FrmHght: array [Boolean] of Integer = (301, 500);
begin
 Panel1.Tag := not Panel1.Tag;
 Panel1.Caption := PnCapt[Panel1.Tag<>0];
 ClientHeight := FrmHght[Panel1.Tag<>0];
end;


Подразумевается, что: форма изначально свернута, у панели свойство Tag=0, ClientHeght=301....


Roman_S   (2007-04-09 16:38:00) [12]

Это как с кнопкой:
- до запуска таймера, надпись на кнопке "Пуск" (ЭТО НЕЗНАЧИТ, ЧТО ОН ЗАПУЩЕН!)
- жмём на кнопку, запускается таймер, и надпись на кнопке меняется на "Стоп" (ЭТО НЕ ЗНАЧИТ, ЧТО ТАЙМЕР ОСТАНОВЛЕН! ЭТО ЗНАЧИТ, ЧТО НАЖАТИЕМ НА ЭТУ КНОПКУ МОЖНО ОСТАНОВИТЬ ТАЙМЕР!)

То-же самое с моей программой "Show" - это показать, а не показана!


Roman_S   (2007-04-09 16:31:00) [13]

Рисую схему:
1. Форма скрыта:  ClientHeight:=301
|             |
|________|
| Show_|
2. Кликаем по надписи Show (Показать):
|             |
|________|
| Hide_|
|             |
|________|      ClientHeight становится :=500 ,          
3. Кликаем по надписи Hide (свернуть/скрыть):
|             |
|________|
| Show_|     ClientHeight становится :=301 ,


tesseract   (2007-04-09 16:24:00) [14]


> else begin


Если заголовок не "Show" - форма сворачиваеться - неужто невидно? А шанс, что он будет не show есть.


Roman_S   (2007-04-09 16:16:00) [15]

Поясню:
'Show' - "Показать" (форма в свёрнутом состоянии)
'Hide' - "Скрыть" (при клике по Panel1, если её Caption ='Show' (т.е. форма была свёрнутой), она разворачивается и её Caption меняется на 'Hide' - т.е. свертуть обратно)

Практическина всех компьютерах всё работает как задумано, но...
ПОДСКАЖИТЕ!


tesseract   (2007-04-09 16:08:00) [16]


> Всё бы хорошо, но на некоторых компьютерах форма НЕ раздвигается
> а складывается???!Что не так? Как исправить?


Задать Caption как Hide при созданиии панели. Видно же что баг в условии.


Roman_S   (2007-04-09 16:04:00) [17]

Извиняюсь, код такй:
procedure TForm1.Panel1Click(Sender: TObject);
begin
if Panel1.Caption ='Show'
then begin
ClientHeight:=500;
Panel1.Caption := 'Hide';
end
else begin
ClientHeight:=301;
Panel1.Caption := 'Show';
end;
end;


Наверх

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