Algunos pensamientos sobre hábitos de desarrollo se sienten como si estuvieran atascados en tu garganta y no podrás escupirlos. En cuanto a la motivación para publicar, por supuesto no descarto la posibilidad de hacer trampa para ganar puntos de participación, pero por otro lado, también espero brindar algunas sugerencias o referencias a los compañeros practicantes (Nian Xing) (espero no engañes a los demás). Al mismo tiempo, también espero que puedan expresar sus opiniones sobre estos malos hábitos míos y brindar críticas y correcciones. Gracias.
uno. Crear directorio de proyecto
En primer lugar, el primer paso es, por supuesto, crear un directorio separado para el nuevo proyecto (no te rías). El nombre del directorio debe tener el mismo nombre que el nombre del proyecto, o se puede utilizar otro nombre, siempre que sea claro y conciso. Luego, cree cada uno de los siguientes directorios dentro de este directorio:
<Doc>: se utiliza para almacenar documentos de desarrollo relacionados con el proyecto (descripción de requisitos, diseño de esquema, diseño detallado, etc.);
<Fuente>: se utiliza para almacenar ".DPR", ".Pas", ".Dfm" y otros archivos en el programa fuente de Delphi;
<Dcu>: Los archivos ".Dcu" se almacenan en este directorio. El propósito de almacenar los archivos ".Pas" y ".Dcu" por separado es aclarar el contenido del directorio Fuente;
<Bin>: Almacena los archivos de salida del proyecto, como ".Exe", ".Dll" o ".Ocx", etc.;
<Registro>: se utiliza para almacenar archivos de registro; normalmente colocaré un archivo "<Nombre del proyecto>Programmer Log.Txt" en este directorio.
<Imágenes>: Por supuesto, es el directorio donde se almacenan las imágenes utilizadas en el proyecto. En circunstancias normales, este directorio es indispensable. Si también se utilizan otros recursos, cree también sus propios directorios, como Wav, Avi, etc.
dos. Establecer opciones de proyecto
Cree un nuevo proyecto en Delphi, guarde este proyecto en el directorio Fuente y al mismo tiempo:
a. Elija un ícono que sea llamativo y algo relacionado con el proyecto como ícono para este proyecto. Por supuesto, este ícono solo se puede usar temporalmente, pero debe ser mejor que el feo que Delphi usa por defecto. De lo contrario, ¿cómo puedes ser digno de ti mismo?
b. Establezca el Directorio de salida en la página Opciones del proyecto -> Directorios/Condicionales en el directorio Bin;
c. Configure el directorio de salida de la unidad en el directorio Dcu.
tres. Agregar unidad constante
Agregue una nueva Unidad y guárdela como "unt<nombre del proyecto> Consts.Pas" para guardar las constantes utilizadas en el proyecto.
Cuatro. Acerca de la forma y la unidad
Asigne un nombre al formulario según la convención de nomenclatura húngara. Un formulario utilizado para iniciar sesión puede denominarse 'FrmLogin' y el nombre de su unidad puede ser 'untLogin'. En general, los nombres de dos Formularios y Unidades correspondientes deben ser consistentes excepto por la abreviatura de 'Frm' o 'unt'.
Agregue un comentario para esta unidad al principio de la Unidad. El formato del comentario puede hacer referencia al código fuente de Delphi, pero debe incluir al menos los siguientes elementos: descripción de la función, hora de creación del copyright; historial de modificaciones, etc.
Establezca el título del formulario recién creado con el nombre de la clase de formulario en lugar de usar el predeterminado de Delphi. Por ejemplo, después de cambiar el nombre de Form1 a FrmLogin, obtenemos la nueva clase de formulario TFrmLogin y Delphi actualiza automáticamente el título del formulario a 'FrmLogin'. En mi opinión, el título debería ser 'TFrmLogin', porque estamos diseñando una clase de formulario TFrmLogin, en lugar de simplemente operar en FrmLogin.
Para una clase de formulario con funciones claras como TFrmLogin, muchas personas tienen la costumbre de configurar su título con un nombre como "Inicio de sesión del operador" durante la etapa de diseño. Mi costumbre es que las constantes como "inicio de sesión del operador" generalmente se almacenan en unt<nombre del proyecto>Consts.Pas y se definen con ResourceString o Const. En cuanto al nombre del título del formulario, debería ser una tarea en tiempo de ejecución. Por lo tanto, a menudo opero Caption solo cuando se activa el evento TForm.OnCreate, como por ejemplo:
procedimiento TFrmLogin.FormCreate(Remitente: TObject);
comenzar
Título: = csLoginTitle;
....
fin;
cinco. Acerca del uso de la función Formato
Hay tres datos: iYear, iMonth y iDay Para mostrar información como "Cumpleaños: 1976/3/18", ¿qué hace habitualmente? Utilice s := 'Cumpleaños:'+IntToStr(iYear)+'.'+IntToStr(iMonth)+'.'+IntToStr(iDay);? Esto es realmente agotador. Mi costumbre es agregar una constante csBirthDayFormat = 'Cumpleaños: %d/%d/%d' en unt<nombre del proyecto>Consts.Pas para guardar el formato de visualización y luego usar s := Format(csBirthDayFormat, [iYear, iMonth , iDay]); tales declaraciones completan el conjunto de datos. La ventaja de hacer esto es obvia, es decir, solo necesita mantener el formato de visualización de los datos en un solo lugar.
La función Formatear es poderosa y la recomiendo mucho. ¿Y tú?
seis. Acerca del almacenamiento de archivos de registro o INI
Originalmente, normalmente usaba TRegistry para acceder al registro y TIniFile para acceder a los archivos Ini. El uso de estas dos clases es diferente, por lo que es casi imposible utilizar el mismo código para acceder tanto al registro como al archivo Ini. ¡Qué dolor de cabeza!
¡Finalmente encontré un salvador! Es la clase TRegistryIniFile. Mirando la unidad de Registro, encontramos que TRegistryIniFile hereda de TCusomIniFile. TIniFile también hereda de TCusomIniFile. Por lo tanto, utilizar la clase abstracta TCusomIniFile para lograr acceso al registro o al archivo Ini es matar dos pájaros de un tiro. Por ejemplo:
var
csmIniFile:TCusomIniFile;
comenzar
si blUseIniFile entonces//Si usa un archivo Ini
csmIniFile:= TIniFile.Create(csRootKey)
demás
csmIniFile:= TRegistryIniFile.Create(csRootKey);
// Luego puedes usar csmIniFile para acceder al archivo Ini.
//O acceder al registro de forma similar a como se accede al archivo Ini.
Siete. Acerca de las transmisiones de TStream y TFileStream, TMemoryStream, etc.
Tanto TFileStream como TMemoryStream heredan de la clase abstracta TStream, lo que significa que podemos usar un conjunto de códigos para completar operaciones de acceso a archivos y memoria. Por lo tanto, al definir algunas interfaces, tiendo a definir los tipos de parámetros como clases abstractas en lugar de clases concretas. Por ejemplo, una función para completar la función de guardar se define como
función Guardar (AStream: TStream): booleano;
que definido como
función Guardar (AStream: TFileStream): booleano;
Sea mucho más flexible.
La primera definición es prospectiva porque puede aplicarse a nuevos tipos de flujos que puedan aparecer en el futuro. La última definición sólo se aplica a flujos como TFileStream (incluidas las subclases de TFileStream, por supuesto), que es mucho más rígido.
Mi hábito: si hay una clase abstracta, intente definir los parámetros como el tipo de clase abstracta. Después de todo, no podemos prever el futuro.
ocho. Utilice TAction más
Delphi 4 y posteriores introdujeron el concepto de Acción y agregaron el componente TActionList a la barra de componentes Estándar. ¡La ventaja de usar Action es que las preocupaciones sobre la sincronización del estado de control desaparecieron!
Más artículos
Musicwind®@HangZhou.Zj.China