05. januar 2006 - 00:34Der er
8 kommentarer og 1 løsning
Mouse over en Form & popup menu
Jeg har lavet en Top Menu (lidt hen af værktøjsline i bunden af windows), så der det det med musen hen over formen som ikke virker helt som det skal, jeg har lavet dette her :
procedure TTopMenuForm1.Timer1Timer(Sender: TObject); var pt: TPoint; begin GetCursorPos( pt ); With TopMenuForm1 do pt := TopMenuForm1.ScreenToClient( pt ); IF pt.y < Panel1.ClientHeight then Begin TopMenuForm1.Visible := True; end else Begin IF TopMenuForm1.Visible = True Then Begin GetCursorPos( pt ); pt := LMDButton1.ScreenToClient( pt ); With LMDButton1.DropDownMenu do Begin IF (pt.x < 450) and (pt.y < 270) Then Begin TopMenuForm1.Visible := True; end else Begin TopMenuForm1.Visible := False; end; end; end else Begin TopMenuForm1.Visible := False; end; end; end;
Er der en eller anden som kan hjælpe mig til at få det til at virke rigtigt.
jeg skal prøve, jeg har lavet en TopMenuForm1 som ligger i toppen af skærmen som er skjult og når jeg flytter musen hen over kommer TopMenuForm1 frem, MEN det gør den når musen er ca. 15mm fra toppen af skærmen, hvor jeg gerne have at TopMenuForm1 først kommer frem når musen er ca. 0-2mm fra toppen toppen af skærmen.
På TopMenuForm1 er der til venstre en LMDButton1 med en DropDownMenu og for at den ikke skal forsvinde og TopMenuForm1 når jeg flytter musen ud til en undermenu har jeg skrevet dette
IF (pt.x < 450) and (pt.y < 270) Then
det virker godt nok, men jeg mener ikke at det er lavet rigtigt på den måde jeg har lavet det på, forstådet på den måde at når jeg har musen på en undermenu så skal TopMenuForm1 ikke forsvinde før jag har trykket på et eller andet i den DropDownmenu, og for at den ikke gør det har jeg har jeg måtte tilføje dette IF (pt.x < 450) and (pt.y < 270) Then
hmm, tyder på at du bruger en selvstændig form - er jeg helt forkert? det ville gøres nemmere med en TPanel komponent, og så i OnMouseMove event, fange koordinanterne for makøren inde for formens grænse....
hvis du har lidt tid at vente, kan jeg fikse det til dig... :-)
har fundet en hel del Eks. som jeg ville kigge på om jeg kunne finde en løsning på mit problem, mener at jeg lavet det d. 13/12-2003 og prøvet at finde en løsning.
skal lige siges at jeg har været væk fra Delphi i lang tid pågrund af ny kærste og har fået en lille pige i mellem tiden, så det blever ikke til så meget Delphi.
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin StatusBar.Panels[0].Text := 'Mouse Pos: X=' + IntToStr(X) + ', Y=' + IntToStr(Y); with Panel1 do if Y < Panel1.ClientHeight then begin Panel1.Visible := True; end else Panel1.Visible := False; end;
her dettte virker, kortere kunne det ikke gøres... :D
Jeg takker for hjælpen, det vare lige lidt inde jeg kan prøve det, da den pcer jeg bruger til at programmer på lige er gået ned, er ved at køre det hele op igen.
men du skal jo have dine point for tak for hjælpen, så smid et svar.
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.