Announcement

Collapse
No announcement yet.

StringGrid onClick

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • StringGrid onClick

    Hi
    ich bin zwar kein echter Neuling mehr aber ich denke mal mein Wissen ist nicht so gross dass ich mich als was anderes schimpfen darf. Also ich habe folgende Frage: Ist es möglich bei einem StringGrid bei einer OnClick Action die aktuelle Position der Markierung auszulesen oder gibt es andere bessere Objekte mit denen so etwas möglich ist??
    Um mal zu verdeutlichen was genau ich brauche: Ich wollte mir eine kleine eigene Adressenverwaltung schreiben. Hierbei werden alle Personen nach Namensortiert in ein Stringrid ausgegeben. Dort steht dann aber ausser dem Namen nur noch die Telefon Nummer, der Rest soll in einem extra Fenster erscheinen wenn man auf demn entsprechenden Namen klickt. Die Frage wäre also, wie und womit soetwas möglich ist.
    Würde mich sehr freuen wenn mir jemand helfen kann.

  • #2
    Hallo Chirstopher,<br>
    probiermal den Source aus. Ich persönlich bevorzuge das
    OnMouseUp-Event.<br>
    <pre><font size="1" face="Verdana">
    unit Unit1;

    interface

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

    type
    TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    procedure StringGrid1Click(Sender: TObject);
    procedure StringGrid1MouseUp(Sender: TObject; Button: TMouseButton;
    Shift: TShiftState; X, Y: Integer);
    private
    { Private-Deklarationen }
    public
    { Public-Deklarationen }
    end;

    var
    Form1: TForm1;

    implementation

    {$R *.DFM}

    procedure TForm1.StringGrid1Click(Sender: TObject);
    var
    MP : TPoint;
    CellCoords : TGridCoord;
    begin
    If RadioButton1.Checked then
    begin
    GetCursorPos(MP);
    MP:=StringGrid1.ScreenToClient(MP);
    CellCoords:=StringGrid1.MouseCoord(MP.X,MP.Y);
    ShowMessage('Du hast auf die Zelle ('+IntToStr(CellCoords.X)+'|'+IntToStr(CellCoords. Y)+') geklickt');
    end;
    end;

    procedure TForm1.StringGrid1MouseUp(Sender: TObject; Button: TMouseButton;
    Shift: TShiftState; X, Y: Integer);
    var
    CellCoords : TGridCoord;
    begin
    If RadioButton2.Checked then
    begin
    CellCoords:=StringGrid1.MouseCoord(X,Y);
    ShowMessage('Du hast auf die Zelle ('+IntToStr(CellCoords.X)+'|'+IntToStr(CellCoords. Y)+') geklickt');
    end;

    end;

    end.

    Hier das Formular
    object Form1: TForm1
    Left = 192
    Top = 110
    Width = 447
    Height = 330
    Caption = 'Form1'
    Color = clBtnFace
    Font.Charset = DEFAULT_CHARSET
    Font.Color = clWindowText
    Font.Height = -11
    Font.Name = 'MS Sans Serif'
    Font.Style = []
    OldCreateOrder = False
    PixelsPerInch = 96
    TextHeight = 13
    object StringGrid1: TStringGrid
    Left = 16
    Top = 16
    Width = 405
    Height = 221
    TabOrder = 0
    OnClick = StringGrid1Click
    OnMouseUp = StringGrid1MouseUp
    end
    object RadioButton1: TRadioButton
    Left = 16
    Top = 244
    Width = 113
    Height = 17
    Caption = 'OnClick'
    Checked = True
    TabOrder = 1
    TabStop = True
    end
    object RadioButton2: TRadioButton
    Left = 16
    Top = 268
    Width = 113
    Height = 17
    Caption = 'OnMouseUp'
    TabOrder = 2
    end
    end
    </font></pre>Jens Schuman

    Comment


    • #3
      Habe eine eigene Lösung gefunden. Man kann recht einfach mit onselectcells eine Variable setzen die die aktuelle Reihe wieder gibt.

      Dennoch Thx

      Comment


      • #4
        Wenn man es auf meine Variante jedoch macht, kann man keinen Klick auf die erste Zeile abfragen. Da muss man doch wieder onmouseup nutzen.
        Aber es geht nun. Also nochmal danke

        Comment

        Working...
        X