"¡Los programadores inteligentes usan Delphi ahora, cada vez más personas comienzan a usar Delphi. Sin embargo, después de todo, hay algunos expertos, y los novatos como yo están en todas partes, jaja. Como soy un novato, naturalmente tengo muchas preguntas muy buenas, como cómo configurar esto y cómo escribir eso ... Entonces, a continuación, haré un discurso resumido basado en la pequeña experiencia que he acumulado y Las pequeñas preguntas comunes en el foro.
== Aplicaciones del sistema ==
A. Delphi ha reemplazado una gran cantidad de controles de uso común, como Delphi5, y el Delphi6 publicado este año es 1.5 veces mayor que el de Delphi5. Con tantos controles, incluso a la resolución de 1024*768, no pueden mostrar todos sus paneles de componentes, ¡y es realmente inconveniente presionar esos dos botones pequeños para mostrar más paneles cada vez! Sin embargo, al agregar el siguiente valor de clave de registro, el panel de componentes se puede ampliar automáticamente:
[HKEY_CURRENT_USER/Software/Borland/Delphi/X.0/Extras]
"AutoPaletTeselect" = "1"
(Nota: X.0 indica el número de versión de su Delphi; si no hay una clave primaria de extras, solo cree una nueva, lo mismo a continuación)
B. Cada vez que creo una nueva forma y luego configura su fuente y tamaño ... ¡es realmente problemático! Luego agregue el siguiente valor de clave y deje que el sistema lo configure automáticamente:
[HKEY_CURRENT_USER/Software/Borland/Delphi/X.0/Formdesign]
"DefaultFont" = "宋体, 9, _"
(Nota: _ representa el espacio, y también puede ser reemplazado por Bold (Bold) etc.)
DO. Personalice el entorno de trabajo para que sea más adecuado para usted.
• Barra de herramientas de configuración. Haga clic con el botón derecho en la barra de herramientas de Delphi, seleccione Personalizar, luego seleccione el botón requerido y arrastre la herramienta, y arrastre los no deseados. Lo que a menudo uso es: abrir el proyecto, guardar, guardar todo, deshacer, rehacerse en la barra de herramientas estándar; Barra de herramientas de paleta de componentes.
• Establezca el diseño de la ventana. Para poder escribir programas de manera eficiente, es importante organizar cada ventana razonablemente. Mis ventanas comúnmente utilizadas son: Inspector de objetos, Administrador de proyectos (Ver | Administrador de proyectos), Lista de vigilancia (Ejecutar | Agregar reloj ...).
Después de configurar cada formulario, presione el botón Guardar escritorio actual en la barra de herramientas de escritorio para guardar.
• Establezca el color de la pantalla. Haga que el color del código esté más en línea con sus hábitos, lo cual es propicio para un pensamiento claro al escribir. Herramientas | Opciones del editor Abrir propiedades del editor, seleccione la pestaña Color y configure el color del código. Aquí hay solo unos pocos usados comúnmente:
Whitespace: El espacio en blanco, es decir, el fondo;
Comentario: Comentario;
Palabra reservada: palabras reservadas;
Cadena: cadena;
Número: número;
Punto de ejecución: la línea actual que se está ejecutando (es decir, la línea que llega cuando F7 entra);
Break habilitado: punto de interrupción;
Línea de error: el error ocurrió en línea;
D. Dominar algunas teclas de atajo en la programación de Delphi puede mejorar enormemente la eficiencia y no lo aburrirá con demasiadas configuraciones aburridas. Aquí hay algunas teclas de acceso directo que a menudo uso:
ESC: seleccione el contenedor del componente seleccionado actualmente (generalmente panel, caja de grupo, formulario, etc.);
CTRL+Clave de flecha: mueve el componente seleccionado por un píxel;
Ctrl+Shift+Keys de flecha: mueva el componente seleccionado por una cuadrícula grande (similar al efecto de retener el desplazamiento en los fuegos artificiales y luego moverse con las teclas de flecha);
Shift+Dragon Keys: ajuste el tamaño del componente seleccionado, un píxel a la vez;
Shift+Seleccionar componentes: mantenga presionado la tecla de cambio y haga clic en el componente con el mouse.
Botón CTRL+Left Mouse: use otras funciones en el procedimiento (como un proceso personalizado). Vaya directamente a la parte de implementación de esta función llamada. ¡He usado esta función más, por lo que es muy conveniente para mí encontrar módulos!
Ctrl+Shift+C: Declare un método en un objeto, luego coloque el cursor en él, presione Ctrl+Shift+C para establecer un marco básico para su implementación, como:
TForm1 = class (tForm)
Privado
{Declaraciones privadas}
público
{Declaraciones públicas}
procedimiento mío;
fin;
Coloque el cursor en la línea de la mina del procedimiento, presione Ctrl+Shift+C, y el siguiente código se insertará automáticamente en la unidad:
procedimiento tForm1.Mine;
Comenzar
fin;
== Operaciones de formulario ==
En programas con múltiples formularios, Delphi predetermina crearlos todos cuando se inicia el programa (solo está oculto, solo se muestra una forma principal), de modo que aquellos formularios que son temporalmente innecesarios para comenzar a ocupar mucho espacio de memoria. Por lo tanto, necesitamos transferir los formularios que no se inician por el momento de "formularios de creación automática" a "formularios disponibles" en la pestaña Formularios del proyecto de menú | Opciones ... De esta manera, la creación y la liberación de estos formularios requieren que el código implemente.
A. Comparación de dos formas de crear un formulario. Para estos formularios no automáticamente creados, debemos crearlos antes de mostrar (self) o crear (aplicación). Por ejemplo, form2.creat (self) y form2.create (aplicación), pero ¿cuál es la diferencia entre ellos? En realidad, no hay mucha diferencia entre los dos.
Pero si el propietario pertenece a otra ventana o control, cuando se libera a su propietario, lo que tiene el propietario será liberado. La diferencia clave es quién administra los recursos del formulario. Creado en el primer método, los recursos del formulario son administrados por el programador;
B. Varias formas de liberar formularios. Dado que es para guardar la memoria, el formulario utilizado debe "pasar" la memoria. Aquí enumeraré algunos métodos similares:
(1)
procedimiento tForm1.Button1Click (remitente: tobject);
Comenzar
......
Si form2 = nil entonces
Form2: = tform2.create (aplicación);
Form2.showmodal;
......
fin;
procedimiento tform2.close (remitente: tobject; var acción: tcLoseAction);
Comenzar
Modalresult: = mrnone;
Acción: = CaFree;
Form2: = nil;
fin;
(2)
procedimiento tForm1.Button1Click (remitente: tobject);
Comenzar
Si no se asigna (form2) entonces
Comenzar
Application.CreateForm (TForm2, Form2);
intentar
Form2.showmodal;
Finalmente
Form2.free;
Form2: = nil;
fin;
fin
demás
Form2.showmodal;
fin;
(3)
procedimiento tForm2.Button1Click (remitente: tobject);
Comenzar
Form2.close;
Form2.lelease;
fin;
== Uso de control
A. ¡El famoso paquete de control RXLib está escrito por tres expertos rusos y es muy excepcional! Sin embargo, hay demasiado contenido, y no es fácil usarlo bien. Solo diré algunos puntos aquí a Rxrichedit.
• Muchas personas han preguntado cómo instalar rxlib, parece ser un poco complicado, jaja, así que también lo diré por cierto:
Ejecute rxinst.exe para instalar rxlib en/archivos de programa/borland/delphi5 (o 6)/rx, luego abra delphi, seleccione archivo/abrir ... y gire rxctl5.dpk, rxdb5.dpk, rxbde5.dpk después de abrir , presione compilar, continuar abriendo: dclrx5.dpk, dclrxdb5.dpk y dclrxbd5.dpk.
• PROPIEDAD DE PETEROBECTOS. La configuración predeterminada de Win98 es verdadera. Pero cuando sea falso, se mostrará normalmente. Por lo tanto, para la compatibilidad del sistema, es necesario determinar la versión actual del sistema operativo:
procedimiento tFormMain.FormCreate (remitente: tobject);
varilla
OSVI: OsversionInfo;
......
Comenzar
OSVI.DWOSVERSIONInfosize: = sizeof (OsversionInfo);
GetVersionEx (OSVI);
caso OSVI.DWPLATFORMID de
1: rxrichedit1.lowObjects: = true;
2: rxrichedit1.lowObjects: = false;
fin;
.........
fin;
Pero no sé por qué este atributo tiene ese problema, así que espero que el experto me dé algunos consejos.
• Evento OnurlClick. RxRichedit convierte automáticamente las direcciones de la página web en formato de hipervínculo, pero el comportamiento específico aún requiere escribir código por sí solo; de lo contrario, estas direcciones se convertirán en capas vacías:
procedimiento tFormMain.rxrichedit1UrlClick (remitente: tobject; const urltext: string; botón: tmouseButton);
Comenzar
if botón = mbleft entonces
ShellexCute (mango, nulo, pchar (urltext), nulo, nil, sw_show);
fin;
B. Para guardar la memoria y optimizar la operación, siempre creamos componentes dinámicamente. Pero después de usarlo, si no se borra de la memoria en el tiempo, irá en contra de nuestra intención original. Pero, ¿cómo "matar" el componente creado, por ejemplo, creé un control de edición y ahora quiero que desaparezca, pero después de usar edit.free, llamando edit.text todavía existe ... Sabemos que no es posible, Esto simplemente libera el espacio de memoria señalado por edición, pero el puntero no está configurado en nulo. Generado .... Por lo tanto, necesitamos nilar el puntero después de la edición gratuita: = nil o freeandnil (solo válido bajo Delphi5) para garantizar el funcionamiento normal en el futuro.
DO. Muestra el texto de inmediato de cada control en la línea de estado. Se puede utilizar el evento inquieto de esta aplicación, pero dado que la aplicación es un objeto incompatible, se puede utilizar el siguiente método:
......
público
procedimiento DisplayHint (remitente: tobject);
fin;
......
procedimiento tform1.displayhint (remitente: tobject);
Comenzar
Statusbar1.simpletext: = getLOnghint (Application.hint);
fin;
procedimiento tForm1.FormCreate (remitente: tobject);
Comenzar
Application.Onhint: = DisplayHint;
fin;
De esta manera, el texto que se muestra en la barra de estado es el mismo que el cuadro de solicitud (el cuadro amarillo pequeño que aparece automáticamente). ¿Qué pasa si desea que el texto rápido en la barra de estado sea más detallado? De hecho, mientras la propiedad del control esté escrita así: Myhint | ¡Es solo un myhint!, El contenido antes de "| "se muestra en la barra de estado ahora.
D. Algunos puntos clave en el uso de ListView. La siguiente es una View de dos columnas como ejemplo.
→ Agregar una línea:
con listView1 do
Comenzar
ListItem: = items.add;
ListItem.caption: = 'Primera columna contenido';
ListItem.subitems.add ('Contenido de segunda columna');
fin;
→ Borrar ListView1:
ListView1.items.clear;
→ Obtenga el número de línea de la fila seleccionada actualmente y elimine la fila actual:
Para i: = 0 a listView1.items.count-1 do
If listView1.Items [i] .selected entonces //i=listview1.selected.index
Comenzar
ListView1.items.delete (i);
fin;
Por supuesto, ListView tiene un evento ONSelectitem, que puede determinar qué fila seleccionó y asignarla a una variable global.
→ Operación de leer una fila y una columna:
Edit1.text: = listView1.Items [i] .caption;
Edit2.Text: = listView1.Items [i] .subitems.strings [0];
Edit3.Text: = listView1.Items [i] .subitems.strings [1];
Por analogía, toda la columna se puede leer usando un bucle.
→ Mueva el enfoque de una línea:
Para i: = 0 a listView1.items.count-1 do
If (listView1.Items [i] .selected) y (i> 0) entonces
Comenzar
ListView1.setFocus;
ListView1.items.item [i-1] .selected: = true;
fin;
Sin embargo, en Delphi6, ListView tiene un atributo itemIndex, así que solo
ListView1.setFocus;
ListView1.ItemIndex: = 3;
Puedes establecer el foco.
== Otros ==
• Para optimizar el software y hacerlo más perfecto, las matrices dinámicas a menudo se usan cuando se usa matrices. Al declarar, como: a: matriz de cadena, y luego antes de usar la matriz, setLength (a, 3) establece la longitud de la matriz en 3, es decir, a [0], a [1], a [2], Entonces eso es todo. Cuando es necesario expandir la longitud de la matriz, nuevamente: se agregan la longitud de la frontera (a, 5), luego a [3] y a [4], y en el anterior a [0], a [1], a [2] El valor de, no se despejará de manera similar, si la longitud de franja (a, 3) y la longitud de fracción (a, 1) son luego de la frontera (a, 1), solo se queda un [0], y a [1] y a [ 2] se borran automáticamente de la memoria. Nota: Las matrices dinámicas comienzan con "0", así que después de setLength (a, 1) alto (a) = 0! ¡!
Finalmente, cuando esta matriz dinámica ya no se usa y el programa aún no ha salido, para guardar la memoria, use: a: = nil para liberar esta matriz, y ahora realmente logra "protección verde y ambiental" :)
• La pregunta "cómo hacer que se ejecute el camino al programa actual" se puede ver en foros. De hecho, esta función se usa de vez en cuando en la programación. En realidad, hay varias funciones que pueden lograr este efecto:
→ getCurrentDirectory (): función de Winapi, el uso específico es el siguiente:
varilla
MyCurrentDir: Array [0..144] de Char;
Comenzar
GetCurrentDirectory (sizeOf (mycurrentdir), mycurrentdir);
MyCurrentDir: = myCurrentDir+'/mysoftname.exe';
fin;
→ getCurrentDir (): una función encapsulada por getCurrentDirectory por Delphi, el uso es simple: mycurrentdir: = getCurrentDir. El formato final es: c:/windows/sistema
También hay funciones que pueden obtener directamente la ruta: ExtractFilepath (Paramstr (0)), ExtractFilepath (Application.ExeName), etc.
• Mensajes de apagado del sistema, reiniciar, etc. Esta es también una pregunta que la gente hace, y lo mencionaré aquí:
Apagado: ExitWindowsex (EWX_SHUTDOWN, 32);
Reiniciar: ExitWindowsex (EWX_REBOOT, 32);
LOGAR: EXITWINDOWSEX (EWX_LOGOFF, 32);
Apagado: ExitWindowsex (EWX_POWEROFF, 32);
• En Delphi, además de usar el #39, ¿cómo lidiar con "citas individuales" en un programa (como ShowMessage)? Tanto '' 'como' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' De hecho, cuatro citas individuales representan una sola cita, es decir, '' '', la segunda y la tercera indican que este es un "'", y el primero y el cuarto indican que este es un tipo de carácter. Jaja, muy interesante :)
• Problemas chinos en ShowMessage. Los botones en ShowMessage están todos en texto electrónico, lo que hace que las personas se sientan incómodas. De hecho, después de nuestro bricolaje, podemos convertirlos en chinos.
Primero, guarde el proyecto actual y luego seleccione Proyecto | Lenguajes | Agregue ... Aparece el cuadro de diálogo Agregar lenguaje, seleccione el proyecto que desea chino (también puede personalizar la carpeta), a continuación, seleccione el último elemento "(Chino ( China) ", Siguiente; Encuentre el elemento "const_smsgdlgok" en la lista, cambie su patrón "chino (traducido)" a "ok" (original)) y salga después de guardar. Ahora, ejecute el programa nuevamente, jaja, ¿es solo el botón chino?
Sin embargo, un cuadro de diálogo de mensajes de ShowMessage es muy simple y se puede mostrar a los desarrolladores durante la depuración del sistema. Pero debido a que es demasiado simple, recomiendo no usar dichos cuadros de diálogo en la versión oficial del software. Además, es mejor usar MessageBox en lugar de ShowMessage para reducir el tamaño del software. ¡!