Avatar billede Slettet bruger
13. juli 2004 - 22:45 Der 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
Avatar billede dkn Nybegynder
14. juli 2004 - 03:20 #1
du kunne jo lave en fælles function for alle mouseenter og leave beskeder.

fx
procedure OnMouseLeave(sender:tobject);
begin
// loop alle dine panels igennem og alle undtagen sender skal skifte til clwhite
end;

er sku for træt til at lave noget kode p.t. men kommer jo nok lidt senere idag så :)
Avatar billede eht Nybegynder
14. juli 2004 - 15:55 #2
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;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls;

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

//Erik
Avatar billede eht Nybegynder
14. juli 2004 - 15:55 #3
Det var et svar
Avatar billede dkn Nybegynder
14. juli 2004 - 17:35 #4
hvilken version af delphi bruger du sharon?
Avatar billede Slettet bruger
14. juli 2004 - 17:51 #5
dkn:
d5 interprise

eht:
Jeg bruger helst ikke componenter som ikke er standard
og onmousemove er god nok...
Avatar billede 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.
Avatar billede eht Nybegynder
14. juli 2004 - 20:49 #7
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.
Avatar billede Slettet bruger
24. januar 2005 - 13:35 #8
lukker
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