Форум: "Основная";
Текущий архив: 2002.11.28;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.008 c