13. juli 2004 - 22:45Der er
7 kommentarer og 1 løsning
fokus problem på Tpanels
På en form har jeg 7 Tpanels kaldet Hovedpaneler, på hver hovedpanel er der et forskelligt antal Tpanels (underpaneler)
spørgsmål 1
på formen er der 7 Tlabels, når musen er over label1 bliver hovedpanel1 visible := True forlades panelet med enten focus på formen
eller label2 bliver hovedpanel1.visible:= False.
Er der en bedre måde at gøre det på her tænker jeg på en funktion.?
spørgsmål 2
De underpaneler der er på hovedpanelerne skifter farve eftersom de har focus eller ikke focus. f.eks
bruger jeg den onmouseover Up1.color:= ($00f8ed8);
Når underpanel forlades med focus på andet underpanel eller form bruger jeg up1.color:= ClWhite;
Problemet er at når jeg i hovedpanelet har focus på de forskellige underpaneler, som jo ligger meget tæt, ikke altid skifter
farve på grund af focus ikke altid opstår, eller der er 2 paneler der har skiftet farve på samme tid.
er der en bedre må at gøre det på?
Det jeg forsøger er at lave er min egen mainmenu.
hovedpanel 1 er der 2 paneler hovedpanel 2 er der 4 paneler hovedpanel 3 er der 6 paneler hovedpanel 4 er der 3 paneler hovedpanel 5 er der 1 panel hovedpanel 6 er der 1 panel hovedpanel 7 er der 5 paneler
Det vil være meget nemmere hvis du laver et par nye komponenter TNewLabel og TNewPanel der har fået tilføjet OnMouseLeave og OnMouseEnter. Det gøres sådan:
Du laver et nyt component der bygger på TLabel (eller TPanel) hvor der er tilføjet følgende events: OnMouseEnter og OnMouseLeave.
Du laver en unit med følgende indhold:
//****************************************************** unit NewLabelunit;
type TEnterEvent = procedure(Sender: TObject) of object; TLeaveEvent = procedure(Sender: TObject) of object; TNewLabel = class(TLabel) private { Private declarations } FOnEnter: TEnterEvent; FOnExit: TLeaveEvent; procedure CMMouseEnter(var msg: TMessage); message CM_MOUSEENTER; procedure CMMouseLeave(var msg: TMessage); message CM_MOUSELEAVE; protected { Protected declarations } public { Public declarations } published { Published declarations } property OnMouseEnter: TEnterEvent read FOnEnter write FOnEnter; property OnMouseLeave: TLeaveEvent read FOnExit write FOnExit;
end;
procedure Register;
implementation
procedure TNewLabel.CMMouseEnter(var msg: TMessage); begin inherited;
if Assigned(FOnEnter) then FOnEnter(Self); end;
procedure TNewLabel.CMMouseLeave(var msg: TMessage); begin inherited; if Assigned(FOnExit) then FOnExit(self); end;
procedure Register; begin RegisterComponents('Additional', [TNewLabel]); end;
end. //****************************************************** Denne unit gemmer du og registrerer som et nyt component. Når det er installeret har du et component der hedder TNewLabel som findes under Additional, Det fungerer fuldstændigt som TLabel bortset fra de 2 nye events
eht: Jeg bruger helst ikke componenter som ikke er standard og onmousemove er god nok...
Synes godt om
Slettet bruger
14. juli 2004 - 18:01#6
dit eksempel løser ikke mit problem, da det ikke er et focus problem på labels men på panels. da jeg bruger onmousemove når label har focus, og onmousemove på form når jeg forlader label, og det virker perfekt, det jeg var ude efter var en bedre styring uden at skulle lave en masse junkcoding, og for at optimere koden og gøre den hurtigere.
Jeg forstår godt din skepsis over for komponenter. De mange komponenter man kan finde, har da en blandet kvalitet. Men den ændring af komponenterne jeg foreslår, er blot en lille bitte tilføjelse til standardkomponenterne, og det har aldrig givet problemer. Jeg har ofte undret mig over at det ikke er standard med mouseEnter og mouseLeave.
Synes godt om
Slettet bruger
24. januar 2005 - 13:35#8
lukker
Synes godt om
Ny brugerNybegynder
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.