Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-01-2006
Avatar de Jonnathan
Jonnathan Jonnathan is offline
Miembro
 
Registrado: may 2005
Ubicación: Isla de Margarita, Venezuela
Posts: 64
Poder: 19
Jonnathan Va por buen camino
URL en la barra de titulo???

Buen día amigos del foro, tenía una idea a ver si me pueden dar una sugerencia. Recuerdo que una vez probé una versión beta de Windows Whistler (Actualmente Windows XP), en esa versión las ventanas del sistema tenian una URL al lado de los botones de cerrar, minimizar... que decía "Enviar un Comentario" y cuando hacias clic ahi, te abría un formulario para llenar unos datos y enviar el comentario a la gente de Microsoft.

Voy a entrar en periodo de pruebas de un sistema que estoy haciendo y me parecio buena idea, ya que varias personas van a probar la aplicación en diferentes departamentos de la empresa, ¿alguna idea de como meter un componente en la barra de título o algun botón para hacer eso? .
__________________
"En el siglo de la estupidez todas las casas comienzan por la fachada" (Fuckowsky)
Planeta Insólito, La Pluma Inspirada
Responder Con Cita
  #2  
Antiguo 29-01-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

En Torry's aparecen no pocos resultados cuando buscamos por "caption button". Creo que puedes aprovechar alguno de los componentes que se te ofrecen. Empero, si tienes instalada la Jedi Library, cuentas también con un componente de nombre "TJvCaptionButton", en la pestaña "JvButtons" de la paleta de componentes: estoy jugando un poco con él ahora mismo y la verdad es que va muy bien y ofrece no pocas opciones.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 30-01-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿Y por qué no optas por soluciones más sencillas pero igualmente eficaces? No sé como tengas dispuestos tus formularios pero siempre habrá algún lugar donde poner el enlace que deseas sin complicarte la vida y sin salirte de los estándares de una interfaz Windows.

// Saludos
Responder Con Cita
  #4  
Antiguo 30-01-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por Román
No sé como tengas dispuestos tus formularios pero siempre habrá algún lugar donde poner el enlace que deseas sin complicarte la vida y sin salirte de los estándares de una interfaz Windows.
Puedo estar de acuerdo contigo, pero, me llamó la atención lo que dijiste, por lo que Jonnathan apunta más arriba:

Cita:
Empezado por Jonnathan
Recuerdo que una vez probé una versión beta de Windows Whistler (Actualmente Windows XP), en esa versión las ventanas del sistema tenian una URL al lado de los botones de cerrar, minimizar... que decía "Enviar un Comentario"
Es decir, el propio Windows utilizó ese lugar tan poco habitual (la barra de título) para insertar un enlace para obtener cierto "feedback"...

Por otro lado, y, para este caso, no me cae mal el "botoncito" en la barra de título, precisamente, porque deja claro (como el que no quiere la cosa) que se trata de algo temporal, que ese no es su lugar, pero bien visible para que alguien pueda aportar sus comentarios, tratándose de un programa en pruebas, o sea.

A lo mejor esto es un poco como el "estilo" de un programador a la hora de nombrar variables, identificadores, funciones, etc., etc. Comprendo que haya que mantener ciertas formas en la interfaz de los programas, pero acaso no esté mal romperlas de vez en cuando. ¿No? Pero, ya me callo, que me estoy poniendo muy pesadito con el tema.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 30-01-2006 a las 01:29:34.
Responder Con Cita
  #5  
Antiguo 30-01-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por dec
Es decir, el propio Windows utilizó ese lugar tan poco habitual (la barra de título) para insertar un enlace para obtener cierto "feedback"...
Bueno, ¿cuántos no hemos visto los estándares de código de Borland? Y basta darse una vuelta por el código fuente de la VCL para darse cuenta del sin número de violaciones que ellos mismos hacen.

Pero ciertamente, al final es una cuestión de gusto personal. A mi en lo particular me terminan pareciendo "menos profesionales" los programas que agregan elementos poco ortodoxos. Y por otro lado, un enlace de feedback ni siquiera tiene porque desaparecer aun terminado el periodo de pruebas. Los usuarios siempre agradecerán la posibilidad de enviar comentarios y sugerencias respecto de la interfaz.

// Saludos
Responder Con Cita
  #6  
Antiguo 30-01-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Ahora que, si insisten, aquí está lo básico para empezar:

Código Delphi [-]
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    LinkCaption: String;

    (*
      Windows pinta el título en cualquiera de estos dos mensajes, así
      que hay que interceptarlos para dibujar el título nosotros mismos
    *)
    procedure WMNCPaint(var Msg: TWMNCPaint); message WM_NCPAINT;
    procedure WMNCActivate(var Msg: TWMNCActivate); message WM_NCACTIVATE;
    procedure WMSetCursor(var Msg: TWMSetCursor); message WM_SETCURSOR;

  public
    (* Método para dibujar el título *)
    procedure PaintCaption;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  LinkCaption := 'Enviar sugerencia';
end;

procedure TForm1.WMNCActivate(var Msg: TWMNCActivate);
begin
  inherited;
  PaintCaption; // Pintar el título
end;

procedure TForm1.WMNCPaint(var Msg: TWMNCPaint);
begin
  inherited;
  PaintCaption; // Pintar el título
end;

procedure TForm1.PaintCaption;
var
  ncCanvas: TCanvas;
  cxSmIcon: Integer;
  cxSizeFrame: Integer;
  cySizeFrame: Integer;
  cyCaption: Integer;
  cxText: Integer;
  cyText: Integer;

begin
  ncCanvas := TCanvas.Create;
  try
    { Obtener un canvas que incluya el área no-cliente }
    ncCanvas.Handle := GetWindowDC(Handle);
    with ncCanvas do
    begin
      { Usar fondo transparente }
      Brush.Style := bsClear;

      { Fuente del título }
      if Windows.GetForegroundWindow = Self.Handle
        then Font.Color := clCaptionText
        else Font.Color := clInactiveCaptionText;

      Font.Style := Font.Style + [fsBold, fsUnderline];

      { Medidas para colocar el título }
      cxSmIcon := GetSystemMetrics(SM_CXSMICON);
      cxSizeFrame := GetSystemMetrics(SM_CXSIZEFRAME);
      cySizeFrame := GetSystemMetrics(SM_CYSIZEFRAME);
      cyCaption := GetSystemMetrics(SM_CYCAPTION);
      cxText := TextWidth(LinkCaption);
      cyText := TextHeight(LinkCaption);

      { Pintar el título }
      TextOut(
        ClientWidth - (cxSizeFrame + 3*cxSmIcon + cxText),
        cySizeFrame + ((cyCaption - cyText) div 2) - 1,
        LinkCaption);
    end;
  finally
    ReleaseDC(Handle, ncCanvas.Handle);
    ncCanvas.Free;
  end;
end;

procedure TForm1.WMSetCursor(var Msg: TWMSetCursor);
var
  ncCanvas: TCanvas;
  cxSmIcon: Integer;
  cxSizeFrame: Integer;
  cxText: Integer;
  htPoint: TPoint;

begin
  inherited;

  if Msg.HitTest = HTCAPTION then
  begin
    htPoint := ScreenToClient(Mouse.CursorPos);

    ncCanvas := TCanvas.Create;
    try
      { Obtener un canvas que incluya el área no-cliente }
      ncCanvas.Handle := GetWindowDC(Handle);

      with ncCanvas do
      begin
        Font.Style := Font.Style + [fsBold, fsUnderline];

        cxSmIcon := GetSystemMetrics(SM_CXSMICON);
        cxSizeFrame := GetSystemMetrics(SM_CXSIZEFRAME);
        cxText := TextWidth(LinkCaption);
      end;

      if (htPoint.X >= ClientWidth - (2*cxSizeFrame + 3*cxSmIcon + cxText)) then
      begin
        SetCursor(Screen.Cursors[crHandPoint]);

        if Msg.MouseMsg = WM_LBUTTONDOWN then
          ShowMessage('Enviando comentario');
      end;
    finally
      ncCanvas.Free;
    end;
  end
  else
    Screen.Cursor := crDefault;
end;

end.

Está muy sucio y hay que refinar muchas cosas pero más o menos funciona. Se basa en un formulario con borde normal y sus tres botones que corresponden al 3 que aparece como factor en las fórmulas de arriba.

Aquí no estamos añadiendo un botón sino literalmente añadiendo una "url" en la parte derecha de la barra de título.

// Saludos
Responder Con Cita
  #7  
Antiguo 30-01-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Sigo estando de acuerdo contigo Román. Y, por cierto, el código fuente me parece magistral, incluso si puede limarse un poco.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #8  
Antiguo 30-01-2006
Avatar de Jonnathan
Jonnathan Jonnathan is offline
Miembro
 
Registrado: may 2005
Ubicación: Isla de Margarita, Venezuela
Posts: 64
Poder: 19
Jonnathan Va por buen camino
Hola amigos del foro, gracias por sus respuestas. Ciertamente me interesaba poner ese control en la barra de título y no en alguna otra parte del programa porque de ser asi tendría que buscarle espacio en todas las ventanas del sistema (unas 30 mas o menos) y despues de la fase de pruebas tendría que quitarlo de todas. Se me ocurrió que como estoy heredando todas mis ventanas de una clase llamada TFormGenerico, podía poner ese truquito solo en esa ventana y listo!!!! todas mis ventanas con URL de "Enviar comentario" con su respectivo código, y en un lugar que no molestrá a ningun otro componente.

Por motivos de tiempo roman no pude probar tu código, pero me parece que está excelente. Al final termine usando un componente "Button Caption" que encontre por ahí, pero voy a ver si se puede cambiar por una URL por cuestión de gusto (en Windows Xp el boton se ve como un boton cuadrado de Windows 2000/9x)
__________________
"En el siglo de la estupidez todas las casas comienzan por la fachada" (Fuckowsky)
Planeta Insólito, La Pluma Inspirada
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
"Cuarto" Boton en barra de titulo (como el EMule) DTAR Varios 3 05-01-2006 00:12:24
Deshabilitar boton de la barra de título abracadabra OOP 2 21-12-2005 23:51:46
Como quitar la barra de título a una ventana hija de una aplicación MDI abracadabra OOP 1 15-12-2005 00:59:29
Label en la Barra de Titulo... nicolasdom Varios 1 04-10-2004 23:46:31
barra de titulo [Internet explore] acertij022 API de Windows 5 27-10-2003 14:41:15


La franja horaria es GMT +2. Ahora son las 11:58:06.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi