Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.28;
Скачать: CL | DM;

Вниз

onResize == перехват WM_SIZE??   Найти похожие ветки 

 
Дмитрий Иванов ©   (2002-11-19 02:38) [0]

Добрый ночи всем!
Значит так: есть форма, на форма кнопка и ComboBox. Хочу сделать так, что бы при любых изменениях размеров формы кнопка, например, была справого боку формы. Пишу:

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
ComboBox1: TComboBox;
Button1: TButton;
procedure FormResize(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}

procedure TForm1.FormResize(Sender: TObject);
begin
Button1.Left:=ClientWidth-Button1.Width;
end;
end.

все работает и когда ComboBox не содержит Items, и когда содержит.
Совсем чуть-чуть меняю код:

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
ComboBox1: TComboBox;
Button1: TButton;
procedure WMSize(var Message:TMessage); message WM_SIZE;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}

procedure TForm1.WMSize(var Message:TMessage);
begin
inherited;
Button1.Left:=ClientWidth-Button1.Width;
end;
end.

и это работает только тогда, когда ComboBox пуст, как только вы в Design Time в поле Items внесете хоть одну строчку, то после компиляции, сразу в начале запуска проги выскакивает ошибка, и она заключается в том что Button1 в тот момент=nil!

Где грабли то? Или это у меня Дельфя глючит (шестая)?


 
Almaz ©   (2002-11-19 03:01) [1]

Проверил ваш пример в D5 - работает в любом случае.
А чтобы кнопка всегда позиционировалась там где вам надо не зависимо от размеров формы рекомендовал бы использовать свойство Anchors - не придется писать свои обработчики изменения размеров.
Например, чтобы кнопка всегда была справа - поставьте ее справа в Design Time и задайте для нее Anchors = [akRight].

p.s. Насчет граблей есть лишь гипотеза, но не могу ее проверить из-за отсутствия D6. Скажите, а если изменить любое другое свойство ComboBox1 (например Font или Color) то вызовет ли это ошибку с Button1=nil ?

Удачи.


 
Дмитрий Иванов ©   (2002-11-19 04:53) [2]

За совет про позиционирование спасибо, но у меня задача, на самом деле, намного сложнее чем я привел здесь:) там Anchors не поможет ... просто пару часов копался - не мог понять в чем же ошибка, а когда нашел, то даже как-то смутился:))

по поводу гипотезы: там такая вещь получается - в тот момент все указатели равны nil, даже и Form1=nil!! короче говоря, ошибка возникает при обращении к любому св-ву любого компонента, лежащего на форме (и если к св-вам формы обращаться, то тоже будет ошибка).

Люди, у кого стоит D6, проверьте, плиз. Очень хочется узнать у одного меня такая проблема или у всех.


 
Дмитрий Иванов ©   (2002-11-19 05:03) [3]

Все-таки добрался до второго компа и там поставил D6. Все мои нерабочие исходники откомпилировались и запистились на ура! Походу это у меня Delphi все-таки глючит, буду переустанавливать:)
Всем счастливо.


 
Дмитрий Иванов ©   (2002-11-19 05:12) [4]

не Form1 не nil, это я загнул, а вот компоненты все реально nil!



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

Текущий архив: 2002.11.28;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.01 c
1-93005
Tano
2002-11-19 02:27
2002.11.28
Если поле класса - класс, как из него обратиться к хозяину


4-93306
d_coder
2002-10-08 21:21
2002.11.28
<<<<<<Проблема с несоответствием типов>>>>>


14-93183
VEG
2002-11-08 16:26
2002.11.28
Че за хрень?


1-92977
KolyanMac
2002-11-18 15:20
2002.11.28
Перенос в StringGrid


3-92854
Gregory
2002-11-09 09:39
2002.11.28
Удаление записей из Paradox