Ver Mensaje Individual
  #8  
Antiguo 27-03-2016
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Reputación: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Cita:
Empezado por jhonny Ver Mensaje
¿ghStopWhen es algún método de algún ayudante de TEnumProcResult?
La idea es que en efecto lo sea. Es la primera vez que oigo hablar del tipo TEnumProcResult, pero en cuanto tenga que usarlo no dudaré en crearle su extensión, es decir, su ayudante, escribiendo un método como ghStopWhen o algún nombre similar (se aceptan sugerencias de otros posibles identificadores).

En cuanto a la forma de escribir ese método, una manera simple podría ser como en el siguiente código. Uso para este ejemplo el tipo enumerado TEnumControlsResult, el cuál sí está presente en mi versión de Delphi (esto sí lo he probado):
Código Delphi [-]
Type
  TEnumControlsResultHelper = Record Helper For TEnumControlsResult
    Function ghStopWhen (Const ACond :Boolean) :Boolean;
  End;

//...

  Function TEnumControlsResultHelper.ghStopWhen (Const ACond :Boolean) :Boolean;
  Begin
    If ACond Then
      Self := TEnumControlsResult.Stop
    Else
      Self := TEnumControlsResult.Continue;

    Result := ACond;
  End;

Y ya en estas, considerando que los valores ordinales de System.False, System.True, TEnumControlsResult.Continue, TEnumControlsResult.Discard y TEnumControlsResult.Stop son 0, 1, 0, 1 y 2, respectivamente, una implementación más programadoril, que consume menos ciclos de CPU sería:
Código Delphi [-]
  Function TEnumControlsResultHelper.ghStopWhen (Const ACond :Boolean) :Boolean;
  Begin
    Self := TEnumControlsResult (Ord (ACond) * 2);
    Result := ACond;
  End;

Además el método podría ser declarado Inline, aunque en ese caso modificaría un poco su implementación a fin de resolver cierta impericia del compilador (ese tema me gustaría discutirlo en otro hilo):
Código Delphi [-]
  Function TEnumControlsResultHelper.ghStopWhen (Const ACond :Boolean) :Boolean;
  Begin
    Self := TEnumControlsResult (Ord (ACond) * 2);
    Result := Self = TEnumControlsResult.Stop;
  End;

Cita:
Empezado por jhonny Ver Mensaje
[...]le he hecho click al enlace que tienes en la firma, con el animo de ver su magia pero me sale una página en blanco.
Esto es porque suspendí ese enlace hasta que libere la nueva versión de mi biblioteca, la cual fue redefinida por completo. Ahora es 100% orientada a objetos y los únicos elementos globales que declaro son clases e interfaces (incluso a varios ayudantes los declaro en la sección pública de clases de uso general, como TghSys). Ha sido toda una revolución y un crecimiento personal el aplicar mucho de lo nuevo que trae Delphi y erradicando viejos vicios de mi técnica. La GHF de hace tres años me da vergüenza.

Espero ya pronto subir la nueva GH Freebrary a algún repositorio, y tener la satisfacción de ofrecérselas y recibir productiva retroalimentación. Quizá esta vez sí la uses, Jhonny. Intentaré que sea digna de ello.

Última edición por Al González fecha: 27-03-2016 a las 06:21:53.
Responder Con Cita