Avatar billede x-masman Nybegynder
08. september 2003 - 18:04 Der er 8 kommentarer og
1 løsning

Popupmenu - tag et argument med

Mjello folks.

Jeg har en popup menu. I denne skal man kunne trykke på et felt. Når jeg har oprettet feltet og skal bestemme hvad der sker OnClick, kan man kun vælge de knapper der er i min form. Spørgsmålet er så: kan man ikke kalde en procedure istedet? Det jeg gerne vil, er at kalde en funktion eller procedure, der tager et argument ind, hvilket er den streng man har klikket på. Kan dette lade sig gøre?
Avatar billede Slettet bruger
08. september 2003 - 18:18 #1
Kan du ikke bare lave noget i den her stil:

procedure s(str:String);
begin
ShowMessage(str);
end;

procedure TForm1.felt1Click(Sender: TObject);
begin
s('hej');
end;
Avatar billede x-masman Nybegynder
08. september 2003 - 19:28 #2
jo. Men hvordan får jeg så den streng (som er i en TStringGrid) med? Jeg kan jo ikke bruge mouseToCell da mussepointeren er flyttet.
Avatar billede Slettet bruger
08. september 2003 - 19:49 #3
Prøv det her:

var
  Form1: TForm1;
  Pos: TPoint;

implementation

{$R *.dfm}

procedure s(str:String);
begin
ShowMessage(str);
end;

procedure TForm1.felt1Click(Sender: TObject);
var
P:TPoint;
begin
StringGrid1.MouseToCell(Pos.X, Pos.Y, P.X, P.Y);
s(StringGrid1.Cells[P.X, P.Y]);
end;

procedure TForm1.StringGrid1ContextPopup(Sender: TObject; MousePos: TPoint;
  var Handled: Boolean);
begin
Pos := MousePos;
end;
Avatar billede x-masman Nybegynder
09. september 2003 - 10:25 #4
Og hvor skulle jeg så kalde StringGrid1ContextPopup?
Endvidere er det ikke det fedeste med en global variabel, men det ser ud til at det er den eneste løsning.
Avatar billede x-masman Nybegynder
09. september 2003 - 10:38 #5
Jeg løste problemet ved at gemme en global variabel i min OnMouseDown hvis det var mbRight. Men du skal have tak for forsøget og spm er stadig åbent, hvis der er nogen der har en løsning uden globale variable.
Avatar billede Slettet bruger
09. september 2003 - 14:13 #6
procedure s(str:String);
begin
ShowMessage(str);
end;

procedure TForm1.gfn1Click(Sender: TObject);
var
P,Cell:TPoint;
begin
P := PopupMenu1.PopupPoint;
P := StringGrid1.ScreenToClient(P);
StringGrid1.MouseToCell(P.X, P.Y, Cell.X, Cell.Y);
s(StringGrid1.Cells[Cell.X, Cell.Y]);
end;

Det skulle virke :-)
Avatar billede x-masman Nybegynder
09. september 2003 - 17:53 #7
Tak. Nu er jeg kommet så langt med min egen løsning at jeg ikke gider at ændre det lige nu. Men det virker sikkert så derfor får du pointene.

Ved du iøvrigt hvordan jeg får en default value i en TDBLookupComboBox?
Avatar billede Slettet bruger
09. september 2003 - 17:55 #8
Nej, har kun delphi 7 personal, og der er ingen database komponeter med :-(
Avatar billede x-masman Nybegynder
09. september 2003 - 17:58 #9
Nå, men jeg fandt lige ud af at man ikke kan det i standard TDBLookuoComboBox. Så det løser jo det problem. :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

Seneste spørgsmål Seneste aktivitet
I går 10:21 Ny printer, men hvilken Af mort1 i Printere
13/0819:41 USB på Linux Af Uvanga i Linux
12/0818:26 Hvilken type mus Af mort1 i PC
11/0813:21 ms Forms Af leahcim i Andet software
10/0821:30 Blokeret på Snapchat? Af LineP i Chat & Messaging