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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Глюк StringGrid&UpDown 
:(
    Опции темы
devmstr
  Дата 3.1.2005, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


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

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



Есть программа. Она написана очень быстро, только для примера, и поэтому многие вещи в ней реализованы очень нерационально, но вообщем смысл понять можно.
Код

unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   procedure FormCreate(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
   procedure SGClick(Sender:Tobject);
 end;

var
 Form1: TForm1;
 SG:TStringGrid;
 UD:TUpDown;
 E:TEdit;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
SG                  :=TStringGrid.Create(Self);
SG.Parent           :=Self;
SG.Top              :=5;
SG.Left             :=5;
SG.Width            :=300;
SG.Height           :=150;
SG.RowCount         :=7;
SG.ColCount         :=5;
SG.DefaultRowHeight :=20;
SG.OnClick          :=SGClick;

E         :=TEdit.Create(SG);
E.Parent  :=SG;
E.Visible :=false;

UD          :=TUpDown.Create(SG);
UD.Parent   :=SG;
UD.Associate:=E;
UD.Visible  :=false;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
E.Destroy;
UD.Destroy;

SG.Destroy;

end;

procedure TForm1.SGClick(Sender: Tobject);
Var
Rect:TRect;
begin
Rect:=SG.CellRect(Sg.Col,SG.Row);

E.Left  :=Rect.Left;
E.Top   :=Rect.Top;
E.Width :=Rect.Right-Rect.Left-(Rect.Bottom-Rect.Top)-1;
E.Height:=Rect.Bottom-Rect.Top;


UD.Left  :=Rect.Left+E.Width+1;
UD.Top   :=Rect.Top;
UD.Width :=Rect.Right-Rect.Left-E.Width;
UD.Height:=Rect.Bottom-Rect.Top;

E.Visible  :=true;
UD.Visible :=true;


end;

end.




Проблема состоит в том, что если мы например щелкнем по самому нижнему элементу и далее щелкнем по UpDown, то мы увидем, что StringGrid непонятно почему прокрутился вверх.
Как этого исбежать, как не дать ему прокрутится вверх.
Вчера целый день бился! Помогите, пожайлуста! И если можно, объясните почему происходит прокрутка; с другими компонентами такое не наблюдается?



--------------------
Think different ©Steve Jobs 
user posted image
PM MAIL WWW   Вверх
Alex
Дата 3.1.2005, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

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



Код

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, Grids, Spin;

type
 TForm1 = class(TForm)
   procedure FormCreate(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
 private
   { Private declarations }
   SG:TStringGrid;
   SE:TSpinEdit;
   procedure SGClick(Sender:Tobject);
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}


procedure TForm1.FormCreate(Sender: TObject);
begin
SG                  :=TStringGrid.Create(Self);
SG.Parent           :=Self;
SG.Top              :=5;
SG.Left             :=5;
SG.Width            :=300;
SG.Height           :=150;
SG.RowCount         :=7;
SG.ColCount         :=5;
SG.DefaultRowHeight :=20;
SG.OnClick          :=SGClick;

SE:= TSpinEdit.Create(Self);
SE.Parent:=Self;
SE.Visible:= False;

end;

procedure TForm1.SGClick(Sender: Tobject);
Var
R:TRect;
begin
 R:=SG.CellRect(Sg.Col,SG.Row);
 R.Left := R.Left + SG.Left;
 R.Right := R.Right + SG.Left;
 R.Top := R.Top + SG.Top;
 R.Bottom := R.Bottom + SG.Top;
 SE.Left := R.Left + 1;
 SE.Top := R.Top + 1;
 SE.Width := (R.Right + 1) - R.Left;
 SE.Height := (R.Bottom + 1) - R.Top;
 SE.Visible:= True;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 SE.Destroy;
 SG.Destroy;
end;

end.

Почему наблюдался эффект скажу честно не знаю.


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
devmstr
Дата 4.1.2005, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


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

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



Спасибо!


--------------------
Think different ©Steve Jobs 
user posted image
PM MAIL WWW   Вверх
devmstr
Дата 5.1.2005, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


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

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



В продолжении темы..
Как мне сделать так, чтобы кнопка была сверху StringGrida.
Parent:=SG1; конечно помогает, но как реализовать с Parent:=self or Parent:=Form1;
Вообще для меня это не пренципиально, но все же мне интерестно узнать!


Код

unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   procedure FormCreate(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
   procedure SGClick(Sender:Tobject);
 end;

var
 Form1: TForm1;
 SG1:TStringGrid;
 UD:TUpDown;
 E:TEdit;

 SB:TSpeedButton;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
SG1                  :=TStringGrid.Create(Self);
SG1.Parent           :=Self;
SG1.Top              :=5;
SG1.Left             :=5;
SG1.Width            :=300;
SG1.Height           :=150;
SG1.RowCount         :=7;
SG1.ColCount         :=5;
SG1.DefaultRowHeight :=20;
SG1.OnClick          :=SGClick;

SB          :=TSpeedButton.Create(self);
SB.Parent   :=self;
SB.Caption  :='...';
SB.Visible  :=false;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
SB.Destroy;
SG1.Destroy;

end;

procedure TForm1.SGClick(Sender: Tobject);
Var
Rect:TRect;
begin
Rect:=SG1.CellRect(SG1.Col,SG1.Row);

SB.Left  :=SG1.Left+Rect.Left+1;
SB.Top   :=SG1.Top+Rect.Top;
SB.Width :=Rect.Bottom-Rect.Top;
SB.Height:=Rect.Bottom-Rect.Top;

SB.Visible :=true;
end;

end.
[s]


--------------------
Think different ©Steve Jobs 
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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