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