abrir janela de seleção com mouse
Bom dia. galera, tenho uma panel, e preciso com o mouse abrir uma janela (corner) para selecionar uma área deste panel e cálcular qual a porcentagem da área selecionada referente ao panel. Alguém tem idéia de como fazer isso ?
Cristianopintado
Curtidas 0
Respostas
Marcelo Saviski
17/03/2005
bom, se entendi vc quer clicar, arrastar e desehar um retângulo da area selecionada, do ponto inicial aonde foi clicadoa té aonde o mouse está no momento, isso da para fazer com a função
[color=green:7129c7eb79] DrawFocusRect(GetDC(Panel.Handle), Rect)[/color:7129c7eb79]
Rect é uma variavel do tipo TRect, ela armazena as coordenadas iniciais do ponto aonde foi clicado:
[color=darkblue:7129c7eb79][i:7129c7eb79]Rect.Left e Rect.Top (Rect.TopLeft)[/i:7129c7eb79][/color:7129c7eb79]
e o ponto corrente da posição do mouse:
[color=darkblue:7129c7eb79][i:7129c7eb79]Rect.Right e Rect.Bottom (Rect.BottomRight)[/i:7129c7eb79][/color:7129c7eb79]
então no OnMouseDown do Panel vc seta o Rect:
no OnMouseMove verifica se está clicado, muda os valores da segunta coordenada e desenha o retângulo coma função acima.
[color=green:7129c7eb79] DrawFocusRect(GetDC(Panel.Handle), Rect)[/color:7129c7eb79]
Rect é uma variavel do tipo TRect, ela armazena as coordenadas iniciais do ponto aonde foi clicado:
[color=darkblue:7129c7eb79][i:7129c7eb79]Rect.Left e Rect.Top (Rect.TopLeft)[/i:7129c7eb79][/color:7129c7eb79]
e o ponto corrente da posição do mouse:
[color=darkblue:7129c7eb79][i:7129c7eb79]Rect.Right e Rect.Bottom (Rect.BottomRight)[/i:7129c7eb79][/color:7129c7eb79]
então no OnMouseDown do Panel vc seta o Rect:
Rect.Left := X; Rect.Top := Y;
no OnMouseMove verifica se está clicado, muda os valores da segunta coordenada e desenha o retângulo coma função acima.
GOSTEI 0
Rômulo Barros
17/03/2005
[color=darkblue:87aea52b74][b:87aea52b74]Declare as seguintes variáveis na seção PUBLIC de sua Unit:[/b:87aea52b74][/color:87aea52b74]
[color=darkblue:87aea52b74][b:87aea52b74]Agora, no evento OnMouseDown do Panel faça:[/b:87aea52b74][/color:87aea52b74]
[color=darkblue:87aea52b74][b:87aea52b74]Agora, no evento OnMouseUp do seu Panel, faça:[/b:87aea52b74][/color:87aea52b74]
:wink: :wink: :wink: :wink: :wink:
_____________________________________________
[b:87aea52b74][color=blue:87aea52b74]Utilize a Ferramenta de Pesquisa do Fórum[/color:87aea52b74][/b:87aea52b74]
Pesquisar pelos termos
_____________________________________________
[b:87aea52b74]Veja como[url=http://forum.clubedelphi.net/viewtopic.php?t=16976] OBTER RESPOSTAR RÁPIDAS[/url][/b:87aea52b74]
[b:87aea52b74]Veja as novas [url=http://forum.clubedelphi.net/viewtopic.php?t=59817]MUDANÇAS NA ESTRUTURA[/url] do site[/b:87aea52b74]
[b:87aea52b74]Leia sempre as [url=http://forum.clubedelphi.net/viewtopic.php?t=6689]REGRAS DE CONDUTA[/url][/b:87aea52b74]
public Resultado : Real; BaseSelecionada : Real; AlturaSelecionada : Real; LarguraSelecionada : Real; AreaTotalSelecionada : Real; AreaTotalPanel : Real; end;
[color=darkblue:87aea52b74][b:87aea52b74]Agora, no evento OnMouseDown do Panel faça:[/b:87aea52b74][/color:87aea52b74]
procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin AlturaSelecionada := Y; LarguraSelecionada := X; end;
[color=darkblue:87aea52b74][b:87aea52b74]Agora, no evento OnMouseUp do seu Panel, faça:[/b:87aea52b74][/color:87aea52b74]
procedure TForm1.Panel1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin // AreaSelecinada = Base * Altura AreaTotalSelecionada :=(X - LarguraSelecionada) * (Y - AlturaSelecionada); AreaTotalPanel := Panel1.Width * Panel1.Height; // Abs: Método para convertar para positivo, caso o usuário selecione no sentido ESQUERDA --> DIREITA Resultado := Abs(((100 * AreaTotalSelecionada) / AreaTotalPanel)); ShowMessage(´Percentual da área Selecionada: ´ + FloatToStr(Resultado) + ´ ¬´); end; end.
:wink: :wink: :wink: :wink: :wink:
_____________________________________________
[b:87aea52b74][color=blue:87aea52b74]Utilize a Ferramenta de Pesquisa do Fórum[/color:87aea52b74][/b:87aea52b74]
Pesquisar pelos termos
_____________________________________________
[b:87aea52b74]Veja como[url=http://forum.clubedelphi.net/viewtopic.php?t=16976] OBTER RESPOSTAR RÁPIDAS[/url][/b:87aea52b74]
[b:87aea52b74]Veja as novas [url=http://forum.clubedelphi.net/viewtopic.php?t=59817]MUDANÇAS NA ESTRUTURA[/url] do site[/b:87aea52b74]
[b:87aea52b74]Leia sempre as [url=http://forum.clubedelphi.net/viewtopic.php?t=6689]REGRAS DE CONDUTA[/url][/b:87aea52b74]
GOSTEI 0
Cristianopintado
17/03/2005
muito bom o seu código, muito obrigado. Só mais uma coisa...existe uma forma do mause mostrar o que está sendo selecionado ? Só mostrar uma janela de um ponto ao outro?
GOSTEI 0
Rômulo Barros
17/03/2005
Então.. vamos lá:
Vamos fazer tudo novamente, Ok?
[color=red:145ca7e103][b:145ca7e103]1 - Declare as seguintes variáveis na seção PUBLIC de seu Unit:[/b:145ca7e103][/color:145ca7e103]
[color=red:145ca7e103][b:145ca7e103]2 - Codifique o método OnMouseDown do seu panel como segue:[/b:145ca7e103][/color:145ca7e103]
[color=red:145ca7e103][b:145ca7e103]3 - Codifique o método OnMouseMove do seu panel como segue:[/b:145ca7e103][/color:145ca7e103]
[color=red:145ca7e103][b:145ca7e103]4 - Codifique o método OnMouseUp como segue:[/b:145ca7e103][/color:145ca7e103]
[u:145ca7e103][b:145ca7e103]Prontinho....[/b:145ca7e103][/u:145ca7e103] :wink: :wink:
_____________________________________________
[b:145ca7e103][color=blue:145ca7e103]Utilize a Ferramenta de Pesquisa do Fórum[/color:145ca7e103][/b:145ca7e103]
Pesquisar pelos termos
_____________________________________________
[b:145ca7e103]Veja como[url=http://forum.clubedelphi.net/viewtopic.php?t=16976] OBTER RESPOSTAR RÁPIDAS[/url][/b:145ca7e103]
[b:145ca7e103]Veja as novas [url=http://forum.clubedelphi.net/viewtopic.php?t=59817]MUDANÇAS NA ESTRUTURA[/url] do site[/b:145ca7e103]
[b:145ca7e103]Leia sempre as [url=http://forum.clubedelphi.net/viewtopic.php?t=6689]REGRAS DE CONDUTA[/url][/b:145ca7e103]
Vamos fazer tudo novamente, Ok?
[color=red:145ca7e103][b:145ca7e103]1 - Declare as seguintes variáveis na seção PUBLIC de seu Unit:[/b:145ca7e103][/color:145ca7e103]
public Resultado : Real; BaseSelecionada : Real; AlturaSelecionada : Integer; LarguraSelecionada : Integer; AreaTotalSelecionada : Real; AreaTotalPanel : Real; MeuBevel : TBevel; end;
[color=red:145ca7e103][b:145ca7e103]2 - Codifique o método OnMouseDown do seu panel como segue:[/b:145ca7e103][/color:145ca7e103]
procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin MeuBevel := TBevel.Create(Self); MeuBevel.Parent := Panel1; MeuBevel.Height := 0; MeuBevel.Width := 0 ; MeuBevel.Top := Y; MeuBevel.Left := X; AlturaSelecionada := Y; LarguraSelecionada := X; end;
[color=red:145ca7e103][b:145ca7e103]3 - Codifique o método OnMouseMove do seu panel como segue:[/b:145ca7e103][/color:145ca7e103]
procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin If(Shift = [ssLeft])Then Begin MeuBevel.Height := Y - AlturaSelecionada; MeuBevel.Width := X - LarguraSelecionada; End; end;
[color=red:145ca7e103][b:145ca7e103]4 - Codifique o método OnMouseUp como segue:[/b:145ca7e103][/color:145ca7e103]
procedure TForm1.Panel1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin // AreaSelecinada = Base * Altura AreaTotalSelecionada :=(X - LarguraSelecionada) * (Y - AlturaSelecionada); AreaTotalPanel := Panel1.Width * Panel1.Height; // Abs: Método para convertar para positivo, caso o usuário selecione no sentido ESQURDA --> DIREITA Resultado := Abs(((100 * AreaTotalSelecionada) / AreaTotalPanel)); ShowMessage(´Percentual da área Selecionada: ´ + FloatToStr(Resultado) + ´ ¬´); FreeAndNil(MeuBevel); end;
[u:145ca7e103][b:145ca7e103]Prontinho....[/b:145ca7e103][/u:145ca7e103] :wink: :wink:
_____________________________________________
[b:145ca7e103][color=blue:145ca7e103]Utilize a Ferramenta de Pesquisa do Fórum[/color:145ca7e103][/b:145ca7e103]
Pesquisar pelos termos
_____________________________________________
[b:145ca7e103]Veja como[url=http://forum.clubedelphi.net/viewtopic.php?t=16976] OBTER RESPOSTAR RÁPIDAS[/url][/b:145ca7e103]
[b:145ca7e103]Veja as novas [url=http://forum.clubedelphi.net/viewtopic.php?t=59817]MUDANÇAS NA ESTRUTURA[/url] do site[/b:145ca7e103]
[b:145ca7e103]Leia sempre as [url=http://forum.clubedelphi.net/viewtopic.php?t=6689]REGRAS DE CONDUTA[/url][/b:145ca7e103]
GOSTEI 0
Rômulo Barros
17/03/2005
[color=darkblue:9564d7d76b][i:9564d7d76b][b:9564d7d76b]Resolveu o seu problema?[/b:9564d7d76b][/i:9564d7d76b][/color:9564d7d76b]
_____________________________________________
[b:9564d7d76b][color=blue:9564d7d76b]Utilize a Ferramenta de Pesquisa do Fórum[/color:9564d7d76b][/b:9564d7d76b]
Pesquisar pelos termos
_____________________________________________
[b:9564d7d76b]Veja como[url=http://forum.clubedelphi.net/viewtopic.php?t=16976] OBTER RESPOSTAR RÁPIDAS[/url][/b:9564d7d76b]
[b:9564d7d76b]Veja as novas [url=http://forum.clubedelphi.net/viewtopic.php?t=59817]MUDANÇAS NA ESTRUTURA[/url] do site[/b:9564d7d76b]
[b:9564d7d76b]Leia sempre as [url=http://forum.clubedelphi.net/viewtopic.php?t=6689]REGRAS DE CONDUTA[/url][/b:9564d7d76b]
_____________________________________________
[b:9564d7d76b][color=blue:9564d7d76b]Utilize a Ferramenta de Pesquisa do Fórum[/color:9564d7d76b][/b:9564d7d76b]
Pesquisar pelos termos
_____________________________________________
[b:9564d7d76b]Veja como[url=http://forum.clubedelphi.net/viewtopic.php?t=16976] OBTER RESPOSTAR RÁPIDAS[/url][/b:9564d7d76b]
[b:9564d7d76b]Veja as novas [url=http://forum.clubedelphi.net/viewtopic.php?t=59817]MUDANÇAS NA ESTRUTURA[/url] do site[/b:9564d7d76b]
[b:9564d7d76b]Leia sempre as [url=http://forum.clubedelphi.net/viewtopic.php?t=6689]REGRAS DE CONDUTA[/url][/b:9564d7d76b]
GOSTEI 0