Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Desarrollo en Delphi para Android
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos


Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-03-2016
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Poder: 17
jhonalone Va por buen camino
Más Bugs? El "Abogado del Diablo" de Embarcadero

Hola, Sufridores de Delphi para Android.
Aquí estoy de nuevo con mis problemas, que pueden ser los vuestros.
No sé si es que le "pido peras al olmo" , pero me encuentro muchos problemas con Delphi para Android.

No soy nuevo en esto. Pero tampoco soy un maestro. En la foto número 1 veréis algunos libros de Borland Turbo pascal 7 y de Borland Pascal With Objects (Por no remontarme a Pascal para DOS).
Foto
http://www.clubdelphi.com/foros/images/attach/jpg.gif

Bueno, no se ve la foto, me tendréis que creer.

Como no soy profesional en esto. Hasta ahora me había apañado con Delphi7 para windows.
Con la moda de los móviles, he querido actualizarme a Delphi 10 (DX) para entretenerme pasando algunos proyectos de VCL Windows a Android.

Con la experiencia que tenia sobre Pascal y Delphi, que han funcionado de maravilla para Windows, esperaba mucho más de DX.

A medida que quiero avanzar, me voy encontrando "dificultades" que no debería encontrar en los programas de desarrollo de aplicaciones de Embarcadero.

He encontrado otros dos ¿Bugs?

El primero consiste en que si en un TStringGrid le intentas ocultar las líneas de la rejilla, no te permite ni editar ni asignar strings en tiempo de ejecución.

El otro caso consiste en que si tienes un array de TStringGrids declarado y otro TStringGrid declarado fuera del array, si creas un evento OnClick del TStringGrid declarado fuera del array y le asignas el evento a otro TStringGrid perteneciente al array, el compilador te permite la asignación y te pasa los valores correctamente.

Pero no sucede igual con el evento OnDrawColumnCell. Te da un error al compilar informando de que no tienen los mismos parámetros. Aparentemente son los mismos, pero el parámetro State: TGridDrawStates, no es el mismo. En el evento OnDrawColumnCell del TStringGrid que no está dentro del array, (si posas el cursor sobre él) podrás ver que pertenece a FMX.Grid.TGridDrawStates. Pero si posas el cursor sobre el mismo evento de uno de los elementos del array, podrás ver que el TGridDrawStates pertenece a
la clase FMX.Grid.TStringGrid.TDrawColumnCellEvent.TGridDrawStates.

Y NO LO COMPILA.

Código Delphi [-]
ArrayDeStringGrid[X,Yl].OnDrawColumnCell := StringGridFueraDelArrayDrawColumnCell;

Esto es una faena, si tienes varios TStringGrids en el array y quieres que se comporten de la misma manera.

Me vais a llamar "quisquilloso", "pejiguero", "meticuloso", "exigente"... lo que queráis, PERO ESTO EN UN ENTORNO DE DESARROLLO CARO y de Embarcadero, me parece, (cuanto menos), "imperfecto".

¡Seguiremos peleando...!

No sé si me he explicado lo suficientemente claro. Si quedan dudas, me lo decís.

Perdón por el rollazo.

Saludos a todos/as.

Última edición por jhonalone fecha: 10-03-2016 a las 02:32:05. Razón: No se ve la foto
Responder Con Cita
  #2  
Antiguo 10-03-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
En este punto estoy de acuerdo con vos

Es una estupidez lo de los Scoped Enums

Basicamente, en VCL escribes esto:

Código Delphi [-]
  Align := alClient;
  MessageDlg('bla', mtInformation, [mbOk, mbCancel], 0);

En FMX no compila, ya que se traduce asi

Código Delphi [-]
  Align := TAlignLayout.Client;
  MessageDlg('bla', TMsgDlgType.mtWarning, [TMsgDlgBtn.mbYes, TMsgDlgBtn.mbNo], 0);

Y no podes cambiarlo, eso es porque FMX fue compilado con la directiva Scoped Enums en ON

El codigo es mas largo y molesto de escribir
Responder Con Cita
  #3  
Antiguo 10-03-2016
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Poder: 17
jhonalone Va por buen camino
Hola Agustín.
Tienes "más razón que un santo", (como se dice por aquí).
Me recuerda la tediosa notación de Java. ("System.out.Println()" o bien "java.awt.event.ActionEvent evento".
¡¡¡Con lo bonito y lo fácilmente legible que era el código Delphi!!! "PrintLn()" y ya. Añoranzas...
Ya podía Embarcadero haberse esforzado un poquito, y (respetando la notación de toda la vida) haber "traducido" internamente la notación a la hora de compilar el código.
Un saludo.
Responder Con Cita
  #4  
Antiguo 10-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
Poder: 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
Si bien parece que hubo por ahí alguna pifia de parte de Embarcadero, les sugiero que se tomen muy en serio los unit scopes, los namespaces la erradicación del With (a menos que por fin sea blindado) y procuren evitar toda referencia en código que se preste a ambigüedad o genere duda de procedencia.

Los identificadores calificados es probablemente una de las mejores prácticas que debemos adoptar. El mundo ya no es pequeño, las bibliotecas son muchas y muy vastas, los nombres tienden a colisionar.
Responder Con Cita
  #5  
Antiguo 11-03-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Con el with estoy de acuerdo, sin pensarlo; la unica excepcion para el with es este caso: The Either Type en el cual comparto con Stefan

Pero con el tema de los Scoped Enum no. Y es que el problema esta en que en la VCL seguimos "de la manera vieja" y en FMX esta "la manera nueva" y esto genera mucha confusion. Yo creo que Embarcadero deberia haber hecho el mismo cambio en sus dos framework, no solamente en uno

Por otro lado, el tema "ambiguedad", no estoy de acuerdo

Código Delphi [-]
uses
  System.SysUtils,
  Unit1 in 'Unit1.pas';

type
  TNumeros = (Uno, Dos, Tres);

  // declarado en seccion interface de Unit1, sino obtendria un Identifier redeclared: 'Uno'
//  TPalabras = (Uno, Delphi);

var
  Numero: TNumeros;
  Palabra: TPalabras;
begin
  Numero := Uno; // TNumeros.Uno
  Numero := Dos; // TNumeros.Dos
  Palabra := Uno; // E2010 Incompatible types: 'TPalabras' and 'TNumeros'
  Readln;
end.

Este codigo no compila, lo cual es algo bueno

Si hay colisiones de enumerativos, o bien se usan calificadores completos, o bien se usa otro prefijo. Pero no se puede decir que hay posibilidad de codigo ambiguo como en el caso del with que ya todos sabemos que puede desencadenar en un desastre
Responder Con Cita
  #6  
Antiguo 11-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
Poder: 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
https://twitter.com/algonzalez74/sta...35658950909953

https://twitter.com/algonzalez74/sta...36471987408896

Un saludo sin ánimo de debate.
Responder Con Cita
  #7  
Antiguo 11-03-2016
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Poder: 17
jhonalone Va por buen camino
Bueno.
No quería yo levantar tanta polémica.
Pero estoy de acuerdo con Al, el código debe ser lo más fácilmente inteligible por los humanos, aunque por parte de la máquina tenga que esforzarse un poquito más por traducir las expresiones.
Saludos.
Responder Con Cita
  #8  
Antiguo 11-03-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Yo me sigo inclinando por la variante #1 de las 2 que escribi en el mensaje #2

Soy un fanatico de escribir poco codigo, es decir, esto no me gusta para nada:

Código Delphi [-]
  Writeln(ExtractFileName(ParamStr(0))); // 
  Writeln(AppBinName); // 

De hecho, el escribir las distintas versiones de MessageDlg me terminaron resultando muy molestas, ademas no tienen opcion para enviar argumentos para aplicar Format (como si existe una ShowMessageFmt)

Y por eso me escribi unos propios metodos que invocan a MessageDlg pero apenas envio parametros:

Código Delphi [-]
  InfoMsg(const AMessage: string); // MessageDlg(AMessage, mtInformation, [mbOk], 0);
  InfoMsgFmt(const AMessage: string; Args: array of const); // MessageDlg(Format(AMessage, Args), mtInformation, [mbOk], 0);
  PromptMsg(const AMessage: string): Boolean; // MessageDlg(AMessage, mtConfirmation, mbOkCancel, 0);
  ...

No es mas facil y rapido de escribir, amigable, legible, el propio metodo intenta indicar su proposito (InfoMsg esta claro que va a mostrar un cuadro de dialogo con informacion, les dejo para adivinar: que haran los metodos ErrorMsg y WarningMsg? )

No entiendo porque el uso de enumerativos sin calificadores completos pueda llevar a ambiguedad, Al si puedes poner un ejemplo te lo agradeceria, porque no me doy cuenta
Responder Con Cita
  #9  
Antiguo 11-03-2016
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
Yo ando perdido porque no conozco las versiones recientes de delphi. Había escuchado que tenían ya (por fin) espacios de nombres, pero veo que eso de los unit scopes es diferente. ¿Que no bastan los espacios de nombres? ¿No es agregar más confusión? ¿O de que se tratan que no entiendo?

LineComment Saludos
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Usar TServerSocket y TClientSocket para enviar "streams" más o menos "grandes" dec Internet 9 04-08-2015 16:11:50
Existe algun componente "linea" y "vista miniatura"? DSK25 C++ Builder 6 09-06-2013 01:23:05
El programa se queda "colgado" mientras copia y luego "despierta" NeWsP OOP 5 10-03-2010 22:05:40
"OBJECT OR CLASS TYPE REQUIRED" en "APPLICATION EXENAME" Xavierator Varios 3 27-10-2008 09:09:50
Necesito llamar a métodos de clases "hija" desde su clase "padre" Flecha OOP 17 20-04-2007 00:03:53


La franja horaria es GMT +2. Ahora son las 12:55:15.


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