Thread View: pl.comp.lang.delphi
9 messages
9 total messages
Started by kameleonsql
Fri, 05 Oct 2018 13:42
Delphi 10.2 - DBGrid brak reakcji na prawy klawisz myszy jeśli są rekordy
Author: kameleonsql
Date: Fri, 05 Oct 2018 13:42
Date: Fri, 05 Oct 2018 13:42
112 lines
4808 bytes
4808 bytes
Witam,
Skończyłem właśnie migrować te parę milionów linii kodu z Delphi 2010 do
10.2. Generalnie przez tydzień to się dało zrobić, (trochę komponentów innych firm, swoich i niespodzianek typu GotoBookmark(TArray<Byte>(pointer(DBGridView.SelectedRows.Items[i]) i zabawy z Unitami, ale kod jest już przeniesiony i działa).
Być może jestem już zmęczony, ale pozostała jeszcze jedna zagwozdka (pamiętam ten problem chyba w D7 był, ale w D2010 to działało dobrze). Potrzebuje zdarzenie OnMouseDown i detekcję prawego klawisza myszy w DBGrid, działa tylko jeśli mysz zostanie użyta na obszarze DBGrid bez rekordów. Ktoś to już przerabiał ?
Pozdrawiam
---
Roman
Ps.
Znalazłem coś takiego (wykopalisko z 2002), ale chyba nie muszę ruszać źródeł w 10.2 ?
procedure TCustomDBGrid.MouseDown(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer);
var
Cell: TGridCoord;
OldCol,OldRow: Integer;
MasterCol: TColumn;
begin
if not AcquireFocus then Exit;
if (ssDouble in Shift) and (Button = mbLeft) then
begin
DblClick;
Exit;
end;
if Sizing(X, Y) then
begin
FDatalink.UpdateData;
inherited MouseDown(Button, Shift, X, Y);
Exit;
end;
Cell := MouseCoord(X, Y);
if (Cell.X < 0) and (Cell.Y < 0) then
begin
inherited MouseDown(Button, Shift, X, Y);
Exit;
end;
if (DragKind = dkDock) and (Cell.X < FIndicatorOffset) and
(Cell.Y < FTitleOffset) and (not (csDesigning in ComponentState)) then
begin
BeginDrag(false);
Exit;
end;
if PtInExpandButton(X,Y, MasterCol) then
begin
MasterCol.Expanded := not MasterCol.Expanded;
ReleaseCapture;
UpdateDesigner;
Exit;
end;
if ((csDesigning in ComponentState) or (dgColumnResize in Options)) and
(Cell.Y < FTitleOffset) then
begin
FDataLink.UpdateData;
inherited MouseDown(Button, Shift, X, Y);
Exit;
end;
if FDatalink.Active then
with Cell do
begin
BeginUpdate; { eliminates highlight flicker when selection moves }
try
FDatalink.UpdateData; // validate before moving
HideEditor;
OldCol := Col;
OldRow := Row;
if (Y >= FTitleOffset) and (Y - Row <> 0) then
FDatalink.MoveBy(Y - Row);
if X >= FIndicatorOffset then
MoveCol(X, 0);
if (Button = mbLeft) and (dgMultiSelect in Options) and
FDatalink.Active then
with FBookmarks do
begin
FSelecting := False;
if ssCtrl in Shift then
CurrentRowSelected := not CurrentRowSelected
else
begin
Clear;
CurrentRowSelected := True;
end;
end;
if (Button = mbLeft) and
(((X = OldCol) and (Y = OldRow)) or (dgAlwaysShowEditor in Options))
then
begin // Added by K.S.
ShowEditor; { put grid in edit mode }
if CanEditShow then Exit; // The condition added now by K.S.
end // Added by K.S.
else
InvalidateEditor; { draw editor, if needed }
finally
EndUpdate;
end;
end;
if Assigned(OnMouseDown) then // Added by K.S.
OnMouseDown(Self, Button, Shift, X, Y); // Added by K.S.
end;
Compile this unit and place the newly created DBGrids.dcu(which should be
again in the Source\Vcl directory) in the Delphi 6\Lib directory. Now open
your project and rebuild it and it should work if you have done all that
right.
The original code is by Krzysztof Szyszka.
Re: Delphi 10.2 - DBGrid brak reakcji na prawy klawisz myszy jeśli są rekordy
Author: Krzysztof Szyszka
Date: Fri, 05 Oct 2018 17:31
Date: Fri, 05 Oct 2018 17:31
31 lines
2705 bytes
2705 bytes
> Skończyłem właśnie migrować te parę milionów linii kodu z Delphi 2010 do > 10.2. Generalnie przez tydzień to się dało zrobić, (trochę komponentów innych firm, swoich i > niespodzianek typu GotoBookmark(TArray<Byte>(pointer(DBGridView.SelectedRows.Items[i]) > i zabawy z Unitami, ale kod jest już przeniesiony i działa). Z tym GotoBookmark to pojechałeś na maksa :-) Wystarczy proste: DataSet.GotoBookmark(DBGridView.SelectedRows[i]) albo nawet DataSet.Bookmark := DBGridView.SelectedRows[i]) > Być może jestem już zmęczony, ale pozostała jeszcze jedna zagwozdka (pamiętam ten problem chyba w > D7 był, ale w D2010 to działało dobrze). Potrzebuje zdarzenie OnMouseDown i detekcję prawego > klawisza myszy w DBGrid, działa tylko jeśli mysz zostanie użyta na obszarze DBGrid bez rekordów. > Ktoś to już przerabiał ? Z tego, co widzę w kodzie DBGrida dla Delphi 10.2 Tokyo, to nic się nie zmieniło od czasów Delphi 6 w kwestii detekcji prawego klawisza myszy w zdarzeniu OnMouseDown. Nadal nie jest wywoływane. > Znalazłem coś takiego (wykopalisko z 2002), ale chyba nie muszę ruszać źródeł w 10.2 ? Z tego, co widzę w kodzie, to nadal musisz, ale nie na zasadzie kopiuj i wklej, tylko przez wprowadzenie identycznej poprawki do metody TCustomDBGrid.MouseDown dla Delphi 10.2, która nieco się zmieniła, ale jej końcowy fragment jest identyczny z tym dla Delphi 6. Z ciekawości napisz mi, gdzie to wygrzebałeś :-) -- pozdrowienia Krzysztof Szyszka, X-Files Software Developer of X-DBGrid Component Embarcadero Technology Partner http://www.x-files.pl/
Re: Delphi 10.2 - DBGrid brak reakcji na prawy klawisz myszy jeśli są rekordy
Author: kameleonsql
Date: Fri, 05 Oct 2018 18:44
Date: Fri, 05 Oct 2018 18:44
38 lines
3787 bytes
3787 bytes
W dniu piątek, 5 października 2018 19:32:11 UTC+2 użytkownik Krzysztof Szyszka napisał: > > Skończyłem właśnie migrować te parę milionów linii kodu z Delphi 2010 do > > 10.2. Generalnie przez tydzień to się dało zrobić, (trochę komponentów innych firm, swoich i > > niespodzianek typu GotoBookmark(TArray<Byte>(pointer(DBGridView.SelectedRows.Items[i]) > > i zabawy z Unitami, ale kod jest już przeniesiony i działa). > > Z tym GotoBookmark to pojechałeś na maksa :-) > Wystarczy proste: DataSet.GotoBookmark(DBGridView.SelectedRows[i]) > albo nawet DataSet.Bookmark := DBGridView.SelectedRows[i]) > > > Być może jestem już zmęczony, ale pozostała jeszcze jedna zagwozdka (pamiętam ten problem chyba w > > D7 był, ale w D2010 to działało dobrze). Potrzebuje zdarzenie OnMouseDown i detekcję prawego > > klawisza myszy w DBGrid, działa tylko jeśli mysz zostanie użyta na obszarze DBGrid bez rekordów. > > Ktoś to już przerabiał ? > > Z tego, co widzę w kodzie DBGrida dla Delphi 10.2 Tokyo, to nic się nie zmieniło od czasów Delphi 6 > w kwestii detekcji prawego klawisza myszy w zdarzeniu OnMouseDown. Nadal nie jest wywoływane. > > > Znalazłem coś takiego (wykopalisko z 2002), ale chyba nie muszę ruszać źródeł w 10.2 ? > > Z tego, co widzę w kodzie, to nadal musisz, ale nie na zasadzie kopiuj i wklej, tylko przez > wprowadzenie identycznej poprawki do metody TCustomDBGrid.MouseDown dla Delphi 10.2, > która nieco się zmieniła, ale jej końcowy fragment jest identyczny z tym dla Delphi 6. > > Z ciekawości napisz mi, gdzie to wygrzebałeś :-) > > -- > pozdrowienia > Krzysztof Szyszka, X-Files Software > Developer of X-DBGrid Component > Embarcadero Technology Partner > http://www.x-files.pl/ 1. Wiesz jak to jest jak się kod przenosi, szukasz pierwszej pozycji w wynikach wyszukiwania spełniającej kryteria i masz https://www.board4all.biz/threads/delphi-10-2-tokyo-casting-to-tbookmark.659254/ 2. Czyli jednak trzeba te źródła DBGrids.pas modyfikować i mam rozumieć ponownie bpl'a skompilować (kto to mówił w https://groups.google.com/forum/#!topic/pl.comp.lang.delphi/RmOjnautaWQ że błędów nie znajduje :-), immo ?). 3. No masz np. tutaj https://groups.google.com/forum/#!msg/borland.public.delphi.students/lfKaVKc194c/zlgXaNOJE3oJ Dzięki za odpowiedź :-)
Re: Delphi 10.2 - DBGrid brak reakcji na prawy klawisz myszy jeśli są rekordy
Author: Krzysztof Szyszka
Date: Fri, 05 Oct 2018 19:25
Date: Fri, 05 Oct 2018 19:25
30 lines
2483 bytes
2483 bytes
> 1. Wiesz jak to jest jak się kod przenosi, szukasz pierwszej pozycji w wynikach wyszukiwania > spełniającej kryteria i masz > https://www.board4all.biz/threads/delphi-10-2-tokyo-casting-to-tbookmark.659254/ To ja chyba mało wiem jak to jest, bo jak się coś nie kompiluje w nowej wersji, to szukam, co się zmieniło w źródłach, a nie na googlach, ale co kto lubi :-) > 2. Czyli jednak trzeba te źródła DBGrids.pas modyfikować i mam rozumieć ponownie bpl'a > skompilować (kto to mówił w > https://groups.google.com/forum/#!topic/pl.comp.lang.delphi/RmOjnautaWQ że błędów nie znajduje > :-), immo ?). Ale to nie jest żaden błąd. Nie było takiej funkcjonalności w Delphi 6 i nadal nie ma w Delphi 10.2 Tokyo. Ja kiedyś potrzebowałem, to sobie wprowadziłem, a że nie dało się bez ingerencji w źródła DBGrida, to nadal musisz w nie ingerować, jeśli potrzebujesz tej funkcjonalności. Zawsze mogłeś użyć XDBGrida :-) > 3. No masz np. tutaj > https://groups.google.com/forum/#!msg/borland.public.delphi.students/lfKaVKc194c/zlgXaNOJE3oJ No tak, forum dla studentów wiecznie żywe w wyszukiwarce. Dzięki za info. -- pozdrowienia Krzysztof Szyszka, X-Files Software Developer of X-DBGrid Component Embarcadero Technology Partner http://www.x-files.pl/
Re: Delphi 10.2 - DBGrid brak reakcji na prawy klawisz myszy jeśli są rekordy
Author: Roman Tyczka
Date: Sat, 06 Oct 2018 10:15
Date: Sat, 06 Oct 2018 10:15
10 lines
1466 bytes
1466 bytes
On Fri, 5 Oct 2018 11:44:45 -0700 (PDT), kameleonsql@gmail.com wrote: > 2. Czyli jednak trzeba te źródła DBGrids.pas modyfikować i mam rozumieć ponownie bpl'a skompilować (kto to mówił w https://groups.google.com/forum/#!topic/pl.comp.lang.delphi/RmOjnautaWQ że błędów nie znajduje :-), immo ?). Możesz przecież wyprowadzić swoje TKameleonDBGrid i w nim to overridować. Zmiana w całm projekcie DBGrida na KamelonDBGrida to już prosta zabawa. -- pozdrawiam Roman Tyczka
Re: Delphi 10.2 - DBGrid brak reakcji na prawy klawisz myszy jeśli są rekordy
Author: kameleonsql
Date: Sat, 06 Oct 2018 10:49
Date: Sat, 06 Oct 2018 10:49
23 lines
3268 bytes
3268 bytes
W dniu sobota, 6 października 2018 12:15:22 UTC+2 użytkownik Roman Tyczka napisał: > On Fri, 5 Oct 2018 11:44:45 -0700 (PDT), kameleonsql@gmail.com wrote: > > > 2. Czyli jednak trzeba te źródła DBGrids.pas modyfikować i mam rozumieć ponownie bpl'a skompilować (kto to mówił w https://groups.google.com/forum/#!topic/pl.comp.lang.delphi/RmOjnautaWQ że błędów nie znajduje :-), immo ?). > > Możesz przecież wyprowadzić swoje TKameleonDBGrid i w nim to overridować. > Zmiana w całm projekcie DBGrida na KamelonDBGrida to już prosta zabawa. > > -- > pozdrawiam > Roman Tyczka Tak, to rozwiąże, override (bo modyfikowanie źródeł Delphi nie wchodzi w grę) ... Tylko dziwi mnie podejście np. Krzysztofa Szyszki, odnośnie "takiej funkcjonalności nie było ...". Jest zdarzenie OnMouseDown i nie działa deterministycznie (to jest błąd !!!), działa jak DBGrid nie ma zawartości, nie działa jak ma (poza tym w Delphi 2010 działa prawidłowo), jaka to dodatkowa funkcjonalność ??? Projekt ma już 20 lat, jest w Delphi od 1997 roku i jak wiadomo klient, przyzwyczajony do określonych rozwiązań nie jest szczęśliwy jeśli zmienia się filozofie przeglądarek. Do szukania, filtrowania, agregowania itd. itp, każdy browser ma dodatkową formę MDI z tymi właśnie funkcjonalnościami, a dostęp do tej formy jest właśnie pod prawym klawiszem na DBGrid (no i nie jest TPopupMenu). Dlatego browsery podstawowych danych dalej używają TDBGrid (to wyjaśnienie dla tych wszystkich, co zaraz napiszą użyj komponentu x, y, z). No i na koniec, właśnie zapłaciłem za wsparcie do Delphi 10.2 i nie jestem przekonany, że to były dobrze wydane pieniądze :( Pozdrawiam --- Roman
Re: Delphi 10.2 - DBGrid brak reakcji na prawy klawisz myszy jeśli są rekordy
Author: Krzysztof Szyszka
Date: Sun, 07 Oct 2018 07:57
Date: Sun, 07 Oct 2018 07:57
11 lines
1542 bytes
1542 bytes
> Możesz przecież wyprowadzić swoje TKameleonDBGrid i w nim to overridować. Dobrze wiesz, że choć jest to najbardziej prawidłowe podejście, to niestety nie zawsze możliwe do zastosowania i IMHO tak jest w tym przypadku. -- pozdrowienia Krzysztof Szyszka, X-Files Software Developer of X-DBGrid Component Embarcadero Technology Partner http://www.x-files.pl/
Re: Delphi 10.2 - DBGrid brak reakcji na prawy klawisz myszy jeśli są rekordy
Author: Krzysztof Szyszka
Date: Sun, 07 Oct 2018 08:13
Date: Sun, 07 Oct 2018 08:13
25 lines
2634 bytes
2634 bytes
> Tylko dziwi mnie podejście np. Krzysztofa Szyszki, odnośnie "takiej funkcjonalności nie było ...". > Jest zdarzenie OnMouseDown i nie działa deterministycznie (to jest błąd !!!), działa jak DBGrid > nie ma zawartości, nie działa jak ma (poza tym w Delphi 2010 działa prawidłowo), jaka to dodatkowa > funkcjonalność ??? Skoro twierdzisz, że w twoim projekcie z Delphi 2010 to zdarzenie "działa prawidłowo", a w Delphi 10.2 nie, to lepiej użyj debuggera i sprawdź dlaczego jest jakaś różnica w działaniu, bo metoda TCustomDBGrid.MouseDown, którą tu przytoczyłeś z wykopalisk niewiele się różni między Delphi 6, 2010 i 10.2 i w żadnej wersji Delphi na końcu tej metody nie jest wywoływane zdarzenie OnMouseDown. > No i na koniec, właśnie zapłaciłem za wsparcie do Delphi 10.2 i nie jestem przekonany, że to były > dobrze wydane pieniądze :( Jeśli liczysz na to, że w ramach wsparcia do Delphi 10.2 Embarcadero wprowadzi do następnej wersji taką poprawkę sprzed 20 lat wrzuconą do sieci przez jakiegoś programistę, to rzeczywiście wyrzuciłeś te pieniądze w błoto :-) -- pozdrowienia Krzysztof Szyszka, X-Files Software Developer of X-DBGrid Component Embarcadero Technology Partner http://www.x-files.pl/ Join to "Delphi X-DBGrid Component Community" https://plus.google.com/#communities/100842098152269100547
Re: Delphi 10.2 - DBGrid brak reakcji na prawy klawisz myszy jeśli są rekordy
Author: kameleonsql
Date: Sun, 05 May 2019 17:30
Date: Sun, 05 May 2019 17:30
18 lines
2372 bytes
2372 bytes
Witam,
problem rozwiązałem ostatecznie dość prosto i to już jakiś czas temu, dziś zerknąłem na grupę i przypomniałem sobie o tym. Piszę, bo rozwiązanie jest banalne, a jak wiemy takie są najlepsze :-). Po prostu wykorzystałem zdarzenie z TPopupMenu (to jeszcze działa dobrze w Delphi, nie wiadomo jak długo :-)) OnPopup i do dynamicznego zamknięcia TPopupMenu (no nie działa np. CloseMenu w Delphi 10.2). Coś takiego ....
procedure TForm1.PopupTriggerPopup(Sender: TObject);
begin
try
// kod do wykonania
finally
PostMessage(PopupTrigger.WindowHandle, WM_LBUTTONDOWN, MK_LBUTTON, 0);
PostMessage(PopupTrigger.WindowHandle, WM_LBUTTONUP, MK_LBUTTON, 0);
end;
end;
Może się komuś przyda ...
----
Pozdrawiam
Roman
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads