Einzelnen Beitrag anzeigen

dioony

Registriert seit: 18. Apr 2005
Ort: Oldenburg
18 Beiträge
 
Delphi 6 Enterprise
 
#1

StringGrid und Popupmenü

  Alt 8. Aug 2005, 15:15
Mittag!

Irgendwie hab ich nicht eine richtige Lösung hier gefunden, daher hoffe ich, dass ihr mir weiterhelfen könnt:

Ich habe ein StrinGrid und wenn man auf eine Zelle klickt öffnet sich durch das OnSelectCell- Ereignis ein dynamisches Popupmenü. Das funktioniert auch soweit. Das Problem besteht nun, wenn das Popupmenü länger ist als die Zeilen des StringGrids. Wenn ich dann nämlich nach unten gehen werden alle Zellen von dem angeklickten bis zum unteren Ende markiert.
Kann man das Markieren irgendwie unterdrücken?

So sieht das ganze aus:

Delphi-Quellcode:

procedure TForm5.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
var items : array of TMenuItem;
var i: Integer;
begin


   if ARow>0 then
   begin
     if ARow<> StringGrid1.RowCount-1 then
     begin
        PopupMenu1.Items.Clear;
        SetLength(items,1);
        if ACol = 1 then
        begin
            SetLength(items,12);
            for i:=1 to 10 do
            begin
              items[i]:=TMenuItem.Create(self);
              items[i].Caption:=inttostr(i);
              if i = strtoint(StringGrid1.Cells[ACol,ARow]) then
              begin
                 items[i].Checked:=true;
              end;
              PopupMenu1.Items.Add(items[i]);
            end;
            SetLength(items,(High(items)+1));
            items[high(Items)]:=TMenuItem.Create(self);
            items[high(Items)].Caption:='andere Anzahl';
            PopupMenu1.Items.Add(items[high(Items)]);
        end;

        if ACol = 2 then
        begin

           SetLength(items,Form2.ListBox6.Count);
           for i:=0 to Form2.ListBox6.Count-1 do
           begin
             items[i]:=TMenuItem.Create(self);
             items[i].Caption:=Form2.ListBox6.Items[i];
             if Form2.ListBox6.Items[i] = StringGrid1.Cells[ACol,ARow] then
             begin
               items[i].Checked:=true;
             end;
             PopupMenu1.Items.Add(items[i]);
           end;
        end;
        if ACol = 3 then
        begin
           SetLength(items,Form2.ListBox8.Count);
           for i:=0 to Form2.ListBox8.Count-1 do
           begin
             items[i]:=TMenuItem.Create(self);
             items[i].Caption:=Form2.ListBox8.Items[i];
             if Form2.ListBox8.Items[i] = StringGrid1.Cells[ACol,ARow] then
             begin
               items[i].Checked:=true;
             end;
             PopupMenu1.Items.Add(items[i]);
           end;
        end;

        SetLength(items,(High(items)+1));
        items[high(Items)]:=TMenuItem.Create(self);
        items[high(Items)].Caption:='-';
        PopupMenu1.Items.Add(items[high(Items)]);


        SetLength(items,(High(items)+1));
        items[high(Items)]:=TMenuItem.Create(self);
        items[high(Items)].Caption:='Bild Löschen';
        PopupMenu1.Items.Add(items[high(Items)]);


        PopupMenu1.Popup(Mouse.CursorPos.X,Mouse.CursorPos.Y);
     end;
   end;
end;
gruß
Dioony
Iterativ arbeiten ist menschlich, rekursiv dagegen göttlich
  Mit Zitat antworten Zitat