Results 1 to 6 of 6

Thread: MouseWheel probleem

  1. #1

    MouseWheel probleem

    Hallo allemaal,

    In de onderstaand code fragment wordt in Kolom = 0 een driehoek getoond bij de regel welke wordt geselecteerd. Deze driehoek kan worden geplaatst door met de pijl-toetsen naar omhoog of omlaag te scrollen. In Delphi gaat het goed met het muiswiel maar in Lazarus gaat dat niet met het muiswiel. Hoe is dat op te lossen?

    Code:
    var
      Form1: TForm1;
      Row_Oud : Integer;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.StringGrid1Click(Sender: TObject);
    Var
      R : Integer;
    Begin
      If (StringGrid1.FixedCols <> 0)  Then
      Begin
        For R:=0 to StringGrid1.RowCount - 1 do StringGrid1.Cells[0,R]:=#0;
        StringGrid1.Cells[0, StringGrid1.Row] := '4';
        Row_Oud := StringGrid1.Row;
      End;
    End;
    
    
    procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    begin
      If (StringGrid1.FixedCols <> 0) and (ACol=0) then
      Begin
        StringGrid1.Canvas.Font.Color :=clred;//Color;
        StringGrid1.Canvas.Font.Style := [fsBold];
        StringGrid1.Canvas.Font.Name := 'Marlett';
        StringGrid1.Canvas.Font.Size := 14;
        StringGrid1.Canvas.Brush.Color:=clWhite;
        StringGrid1.Canvas.Rectangle(Rect);
        StringGrid1.Canvas.TextRect(Rect, Rect.Left, Rect.Top, StringGrid1.Cells[0, ARow]);
        StringGrid1.Canvas.FrameRect(Rect);
      end;
    end;
    Met een vriendelijke groet, Frans Dubbeld

  2. #2
    Senior Member SaintPier's Avatar
    Join Date
    Nov 2010
    Location
    Etten-Leur
    Posts
    844
    Hoi Frans,

    Bij mij werkt dit:
    Delphi Code:
    1. procedure TForm1.StringGrid1DrawCell(Sender : TObject; aCol, aRow : Integer;
    2.   aRect : TRect; aState : TGridDrawState);
    3. begin
    4.   If (StringGrid1.FixedCols <> 0) and (ACol=0) then
    5.   Begin
    6.     StringGrid1.Canvas.Font.Color :=clred;//Color;
    7.     StringGrid1.Canvas.Font.Style := [fsBold];
    8.     StringGrid1.Canvas.Font.Name := 'Marlett';
    9.     StringGrid1.Canvas.Font.Size := 14;
    10.     StringGrid1.Canvas.Brush.Color:=clWhite;
    11.     StringGrid1.Canvas.Rectangle(aRect);
    12.     StringGrid1.Canvas.TextRect(aRect, aRect.Left, aRect.Top, StringGrid1.Cells[0, ARow]);
    13.     StringGrid1.Canvas.FrameRect(aRect);
    14.   end;
    15. end;
    16.  
    17. procedure TForm1.StringGrid1SelectCell(Sender : TObject; aCol, aRow : Integer;
    18.   var CanSelect : Boolean);
    19. Var
    20.   R : Integer;
    21. Begin
    22.   If (StringGrid1.FixedCols <> 0)  Then
    23.   Begin
    24.     For R:=0 to StringGrid1.RowCount - 1 do StringGrid1.Cells[0,R]:=#0;
    25.     StringGrid1.Cells[0, aRow] := '4';
    26.     Row_Oud := StringGrid1.Row;
    27.   End;
    28. end;
    Ik neem aan dat je Row_Oud nog ergens voor gebruikt?
    Greets,
    Peter.
    Carpe Diem !
    (Horatius)

  3. #3
    Peter,

    De oplossing die jij geeft werkt niet correct. De driehoek (marker) loopt éen regel achter op de regel welke de focus heeft als je het muiswiel gebruikt. Ik heb ondertussen
    wel een oplossing gevonden:

    Code:
    procedure TForm1.StringGrid1Selection(Sender: TObject; aCol, aRow: Integer);
    VAr
      R : Integer;
    Begin
      If (StringGrid1.FixedCols <> 0)  Then
      Begin
        For R:=0 to StringGrid1.RowCount - 1 do StringGrid1.Cells[0,R]:=#0;
        StringGrid1.Cells[0, StringGrid1.Row] := '4';
      End;
    End;
    De regel: Row_Oud := StringGrid1.Row; is nog een regel welke uit eerdere pogingen blijven staan en kan worden verwijderd.

    Maar wat is nu het essentieel verschil tussen de Delphi procedure OnClick en de Lazarus procedure OnSelection en wanneer gebruik je in Lazarus
    de procedure OnClick en OnSelection?


    H.g. Frans

  4. #4
    Senior Member SaintPier's Avatar
    Join Date
    Nov 2010
    Location
    Etten-Leur
    Posts
    844
    Quote Originally Posted by Dubbeld View Post
    Peter,

    De oplossing die jij geeft werkt niet correct. De driehoek (marker) loopt éen regel achter op de regel welke de focus heeft als je het muiswiel gebruikt. Ik heb ondertussen
    wel een oplossing gevonden:

    Code:
    procedure TForm1.StringGrid1Selection(Sender: TObject; aCol, aRow: Integer);
    VAr
      R : Integer;
    Begin
      If (StringGrid1.FixedCols <> 0)  Then
      Begin
        For R:=0 to StringGrid1.RowCount - 1 do StringGrid1.Cells[0,R]:=#0;
        StringGrid1.Cells[0, StringGrid1.Row] := '4';
      End;
    End;
    Maar wat is nu het essentieel verschil tussen de Delphi procedure OnClick en de Lazarus procedure OnSelection en wanneer gebruik je in Lazarus
    de procedure OnClick en OnSelection?


    H.g. Frans
    Frans,
    Eerst de beste wensen voor 2014.

    Ik zie dat je de StringGrid1Selection event gebruikt.
    In mijn voorbeeld gebruikte ik StringGrid1SelectCell. Bij mij werkte dat prima.

    Waarom in Delphi wel een OnClick wordt getriggert en in Lazarus niet bij verplaatsen van de selection weet ik niet.
    Maar langs andere weg kom je ook in Rome niet?

    Greets,
    Peter.
    Carpe Diem !
    (Horatius)

  5. #5
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Waarom in Delphi wel een OnClick wordt getriggert en in Lazarus niet bij verplaatsen van de selection weet ik niet.
    Omdat FPC de hele TGrid opnieuw heeft gebouwd, zonder alle troep van Delphi. Nu alleen nog memofields. Die mogelijkheid bestaat wel, maar je moe het dan wel zelf implenmenteren.

  6. #6
    Senior Member SaintPier's Avatar
    Join Date
    Nov 2010
    Location
    Etten-Leur
    Posts
    844
    Quote Originally Posted by jkuiper View Post
    Omdat FPC de hele TGrid opnieuw heeft gebouwd, zonder alle troep van Delphi.
    Ah, is dat het.
    Dus in Delphi wordt de OnClick event onterecht getriggert als je op een andere manier de selectie verandert, met een muiswieltje bijvoorbeeld.
    Nou ja. Als je het weet valt ermee te leven lijkt mij.

    Greets,
    Peter.
    Carpe Diem !
    (Horatius)

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •