Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-92922
oss
2002-11-11 17:00
2002.11.28
компоненты Interbase


6-93168
Martin
2002-10-01 14:05
2002.11.28
TClientSocket в консольном приложение...


1-93114
pavel_ak
2002-11-16 22:57
2002.11.28
Как работать с вкладкой Servers?


1-92998
Alex II
2002-11-18 17:25
2002.11.28
Help, Rave!!!


1-93038
Novichek
2002-11-16 13:54
2002.11.28
Подскажите как создать приложение без формы?





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