Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2003.05.05;
Скачать: [xml.tar.bz2];

Вниз

глюк TDBGrid в W2K/XP   Найти похожие ветки 

 
Chubais   (2003-01-31 14:41) [0]

уже поднимал эту тему, но безрезультатно. Поэтому попытка номер2:
Есть MDI-приложение.Открываем MDIChild, у которого грид лежит прямо под заголоком окна - alClient или там alTop. Щелкаем дважды на заголовке окна с целью максимизировать окно. В гриде возникает событие OnTitleClick в количестве 1 (одна) штука. В обработчик попадает колонка, которая по координате X соответствует положению щелкающей (зубами))) мыши на заголовке. Данный артефакт возникает только с первым MDIChild"ом. Далее поведение такое, как и должно быть(???). Пробовал так сделать:
Application.OnMessage:=Func;
..
procedure TMainForm.Func(var Msg: TMsg; var Handled: Boolean);
begin
if Msg.message=WM_NCLBUTTONDBLCLK
then begin
Handled:=true;
ShowWindow(Msg.hwnd,SW_MAXIMIZE);
end;
end;
результат-тот же.
таким образом задача сводится к выяснению вопроса: почему при вызове ShowWindow(Msg.hwnd,SW_MAXIMIZE) для первого экземпляра MDIChild"а происходит указанный глюк. Помощь в решении этой вот задачи я и надеюсь получить, Уважаемые.


 
Игорь Шевченко   (2003-01-31 15:47) [1]

Событие не возникает. D5/Win2k. Ищи глюк в другом месте.


 
Chubais   (2003-01-31 17:41) [2]

да, и ищщо:
если поставить на Handled:=true; breakpoint и произвести описанные действия, то с заходом в дебаггер все работает нормально - типа теряется где-то тот косяк во время переключения в/из дебаггера...


 
Chubais   (2003-01-31 18:16) [3]

ХАХАХА
событие возникает, если после даблклика на заголовке окна Title грида находится под мышом. !!!!!
потому тока на первом и заметно - остальные вниз уходят)) потому по переключению в дебаггер все ок
крута!
ну и чо теперь с новой задачей делать?


 
Игорь Шевченко   (2003-02-03 10:16) [4]

Chubais © (31.01.03 18:16)

Ты все-таки поподробнее поясни ситуацию. Сколь не пытался смоделировать твою беду - никакого TitleClick не получал.


 
sniknik   (2003-02-03 11:02) [5]

Это не косяк, это фича. :-)))

Игорь Шевченко © (03.02.03 10:16)
проясняю, заместо автора.

Это возникает если кликнуть мышой в любом месте формы (которое не предполагает немедленных действий, как перетаскивание за заголовок), а после навести мыш на титл грида и отжать мыш (сответственно после первого клика клавиша должна оставатся зажатой).
Тут просто частный случай, пытается максимизировать окно двойным кликом на заголовок, после второго клика окно разворачивается и отхатие после второго клика попадает на заголовок грида.

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


 
Игорь Шевченко   (2003-02-03 12:30) [6]

sniknik © (03.02.03 11:02)

Не верю! (с) Станиславский.

Код с примером такого поведения - в студию!


 
sniknik   (2003-02-03 13:26) [7]

да какой код? все просто...

ложи на любую форму дбгрид, назначаеш ему событие

procedure TMDIChild{не обязательно MDIChild любое}.DBGrid1TitleClick(Column: TColumn);
begin
MessageBox(0, "А вот и я! ", "Клик", MB_OK);
end;

все больше ничего не надо (ни таблиц ни сорсов), запускаеш, клик левой кнопкой мыши на любом месте грида (или даже на форме если грид ее не всю закрывает), не опуская ведеш на Title грида (вернее на тот огрызок что будет у не подключеного грида), отпускаеш кнопку и ловиш событие.

вот его он и ловит, после 2клика на заголовке формы (после расширения оппускание приходится на заголовок грида, иногда).

(вообщето как то нехорошо, автору похоже уже пофигу, а я тат отдуваюсь :-)))


 
sniknik   (2003-02-03 13:34) [8]

p.s. нет ошибся, если начальный клик на форме а не на гриде, ничего не происходит. Непонятно тогда почему с заголовка срабатывает.


 
Chubais   (2003-03-06 16:52) [9]


> автору похоже уже пофигу, а я тат отдуваюсь :-)))

блин... забыл я про эту ветку, вот случайно нашел)
не то что пофигу, очень даже интересно
просто я с изрядными извращзениями обошел эту проблему (не решил) и забыл про нее


> проясняю, заместо автора.


в-общем, все правильно проянил, пока меня не было ;)), если дважды кликнуть на заголовке окна, окошко разворачивается, и если при этом под мышом оказывается заголовок, он получает событие клика.
короче косяк какой-то

я вот щас озабочен другим косяком
запостил с утра и теперь не могу найти)) зато эту ветку нашел ;)
модератора наверна достали мои вопросы о косяках каких-то немеряных, он удаляет эти ветки ))
новый косяк связан с пропусканием за пределы модального окна (конкретнее - в вызвавшее его MDIChild окно) нажатия Ctrl+F4


 
NAlexey   (2003-03-06 17:14) [10]

Я конечно может и попаду не в тему, но я так и не смог решить следующую проблему с DBGrid, хотя одно время надо было очень:
Ситуация: MDI форма, внизу Panel DockSite := true;
2 кнопки:
1 - создает MDIChild;
2 - создает форму встраиваемую в Panel внизу главной формы.
На MDIChild имеем DBGrid с несколькими строчками, на форме встраиваемой в Panel имеем ListBox например.
Жмем кнопку 1 - создали MDI, жмем кнопку 2 - создали другую форму, встраиваем ее в панель, наподобие сообщения об ошибках. Так вот, когда кликнем по ListBox обратно в DBGrid уже не переключишься... Не переключишься и все тут. Тестировал под D6
КОД----------------------------------------:

unit Unit1;

interface

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

type
TForm1 = class(TForm)
Panel1: TPanel;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses Unit2, Unit3;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
form3 := TForm3.Create(Self);
Form3.Show;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
form2 := TForm2.Create(Self);
Form2.Show;
end;

end.


object Form1: TForm1
Left = 241
Top = 127
Width = 696
Height = 480
Caption = "Form1"
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = "MS Sans Serif"
Font.Style = []
FormStyle = fsMDIForm
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Panel1: TPanel
Left = 0
Top = 376
Width = 688
Height = 77
Align = alBottom
Caption = "Panel1"
DockSite = True
TabOrder = 0
end
object Button1: TButton
Left = 128
Top = 240
Width = 75
Height = 25
Caption = "ShowDBGrid"
TabOrder = 1
OnClick = Button1Click
end
object Button2: TButton
Left = 512
Top = 240
Width = 75
Height = 25
Caption = "ShowErWnd"
TabOrder = 2
OnClick = Button2Click
end
end



unit Unit2;

interface

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

type
TForm2 = class(TForm)
ListView1: TListView;
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;

implementation

{$R *.dfm}

end.

object Form2: TForm2
Left = 260
Top = 142
Width = 377
Height = 255
Caption = "Form2"
Color = clBtnFace
DragKind = dkDock
DragMode = dmAutomatic
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = "MS Sans Serif"
Font.Style = []
OldCreateOrder = False
Position = poDefault
Visible = True
PixelsPerInch = 96
TextHeight = 13
object ListView1: TListView
Left = 0
Top = 0
Width = 369
Height = 228
Align = alClient
Columns = <>
TabOrder = 0
end
end


unit Unit3;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, DBTables, Grids, DBGrids;

type
TForm3 = class(TForm)
DBGrid1: TDBGrid;
DataSource1: TDataSource;
Table1: TTable;
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form3: TForm3;

implementation

{$R *.dfm}

end.


object Form3: TForm3
Left = 456
Top = 154
Width = 455
Height = 327
Caption = "Form3"
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = "MS Sans Serif"
Font.Style = []
FormStyle = fsMDIChild
OldCreateOrder = False
Position = poDefault
Visible = True
PixelsPerInch = 96
TextHeight = 13
object DBGrid1: TDBGrid
Left = 0
Top = 0
Width = 447
Height = 300
Align = alClient
DataSource = DataSource1
TabOrder = 0
TitleFont.Charset = DEFAULT_CHARSET
TitleFont.Color = clWindowText
TitleFont.Height = -11
TitleFont.Name = "MS Sans Serif"
TitleFont.Style = []
end
object DataSource1: TDataSource
DataSet = Table1
Left = 120
Top = 128
end
object Table1: TTable
Active = True
DatabaseName = "System"
TableName = "dbo.params"
Left = 72
Top = 80
end
end






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

Форум: "WinAPI";
Текущий архив: 2003.05.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.006 c
3-12635
admled
2003-04-15 20:36
2003.05.05
Печать из базы одной записи


3-12636
galexis
2003-04-08 16:28
2003.05.05
Фильтр Query1 по Query2


1-12735
Nikos
2003-04-22 19:11
2003.05.05
Как восстановить текст, который был в поле Memo?


1-12810
Nomad
2003-04-22 12:22
2003.05.05
Сравнение строк, передаваемых в качестве параметров в функцию


4-12972
}{enon
2003-03-05 16:23
2003.05.05
Странный глюк





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