iki StringGrid için aynı satırın seçilmesi

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
manzume
Üye
Mesajlar: 4
Kayıt: 12 Eyl 2016 04:06
Konum: Izmir

iki StringGrid için aynı satırın seçilmesi

Mesaj gönderen manzume »

Merhaba Arkadaşlar,

Form'da bulunan iki stringgrid'ten birinin satırını seçince diğerinde de aynı satırı seçebiliyorum ancak StringGrid1'de satırları aşağıya doğru indirdiğimde StringGrid2'deki satırlar aşağıya doğru inmiyor. bu sorunu nasıl çözebilirim yardımcı olursanız sevinirim, bir süre araştırma yaptım ancak iki stiringgrid için bir uygulama örneğine rastlamadım maalesef.
ertank
Kıdemli Üye
Mesajlar: 1716
Kayıt: 12 Eyl 2015 12:45

Re: iki StringGrid için aynı satırın seçilmesi

Mesaj gönderen ertank »

Merhaba,

Ekteki projede çalışan örnek mevcuttur. Kod örnekleri ise aşağıdadır.
Kaynak: http://stackoverflow.com/questions/3302 ... nts-delphi

Kod: Tümünü seç

...
  private
    { Private declarations }
    GridXWndProc, GridXSaveWndProc: Pointer;
    GridYWndProc, GridYSaveWndProc: Pointer;
    procedure GridXCustomWndProc(var Msg: TMessage);
    procedure GridYCustomWndProc(var Msg: TMessage);
...

Kod: Tümünü seç

procedure TForm15.FormCreate(Sender: TObject);
begin
  GridXWndProc := MakeObjectInstance(GridXCustomWndProc);
  GridXSaveWndProc := Pointer(GetWindowLong(GridX.Handle, GWL_WNDPROC));
  SetWindowLong(GridX.Handle, GWL_WNDPROC, LongInt(GridXWndProc));

  GridYWndProc := MakeObjectInstance(GridYCustomWndProc);
  GridYSaveWndProc := Pointer(GetWindowLong(GridY.Handle, GWL_WNDPROC));
  SetWindowLong(GridY.Handle, GWL_WNDPROC, LongInt(GridYWndProc));
end;

procedure TForm15.GridXCustomWndProc(var Msg: TMessage);
begin
   Msg.Result := CallWindowProc(GridXSaveWndProc, GridX.Handle, Msg.Msg, Msg.WParam, Msg.LParam);
   case Msg.Msg of
      WM_KEYDOWN:
      begin
         case TWMKey(Msg).CharCode of VK_UP, VK_DOWN, VK_PRIOR, VK_NEXT:
            GridY.Perform(Msg.Msg, Msg.WParam, Msg.LParam);
         end;
      end;
      WM_VSCROLL:
         GridY.Perform(Msg.Msg, Msg.WParam, Msg.LParam);
      WM_HSCROLL:
         GridY.Perform(Msg.Msg, Msg.WParam, Msg.LParam);
      WM_MOUSEWHEEL:
      begin
         ActiveControl := GridY;
         GridY.Perform(Msg.Msg, Msg.WParam, Msg.LParam);
      end;
      WM_DESTROY:
      begin
         SetWindowLong(GridX.Handle, GWL_WNDPROC, Longint(GridXSaveWndProc));
         FreeObjectInstance(GridXWndProc);
      end;
  end;
end;

procedure TForm15.GridXMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
   GridY.Row := GridX.Row;
end;

procedure TForm15.GridYCustomWndProc(var Msg: TMessage);
begin
   Msg.Result := CallWindowProc(GridYSaveWndProc, GridY.Handle, Msg.Msg, Msg.WParam, Msg.LParam);
   case Msg.Msg of
      WM_KEYDOWN:
      begin
         case TWMKey(Msg).CharCode of VK_UP, VK_DOWN, VK_PRIOR, VK_NEXT:
            GridX.Perform(Msg.Msg, Msg.WParam, Msg.LParam);
         end;
      end;
      WM_VSCROLL:
         GridX.Perform(Msg.Msg, Msg.WParam, Msg.LParam);
      WM_HSCROLL:
         GridX.Perform(Msg.Msg, Msg.WParam, Msg.LParam);
      WM_MOUSEWHEEL:
      begin
         ActiveControl := GridX;
         GridX.Perform(Msg.Msg, Msg.WParam, Msg.LParam);
      end;
      WM_DESTROY:
      begin
         SetWindowLong(GridY.Handle, GWL_WNDPROC, Longint(GridYSaveWndProc));
         FreeObjectInstance(GridYWndProc);
      end;
   end;
end;

procedure TForm15.GridYMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  GridX.Row := Gridy.Row;
end;
Dosya ekleri
gridsync.rar
İki dtring grid senkronizasyonu
(66.82 KiB) 34 kere indirildi
Kullanıcı avatarı
manzume
Üye
Mesajlar: 4
Kayıt: 12 Eyl 2016 04:06
Konum: Izmir

Re: iki StringGrid için aynı satırın seçilmesi

Mesaj gönderen manzume »

Çok teşekkür ederim ilginiz için. Gerçekten işime yaradı. Hoşçakalın.
Cevapla