En este ejemplo se muestra de forma sencilla de realizar una búsqueda incremental sobre un campo y mostrar el resultado de la búsqueda sobre un DBGrid estandard. Para este ejempo se ha utilizado un TClientDataset, de forma que todos los datos estén cargados en memoria (en local). Hay que tener en cuenta que este método puede ser costoso si la tabla es muy grande o los datos datos no se encuentran en local (cursores server-side, por ejemplo).
Embarcadero MVP.
Analista y Programador de Sistemas Informáticos.
Estudios de Informática (Ingeniería Técnica Superior) en la UPC (Universidad Politécnica de Barcelona).
Llevo utilizando Delphi desde su versión 3. Especialista en diseño de componentes, Bases de Datos, Frameworks de Persistencia, Integración Continua, Desarrollo móvil,…
Sencillo ejemplo que muestra cómo utilizar packages dinámicos en una aplicación para obtener caraterísticas de plug-ins.
Los packages (BPL’s) con diferentes funcionalidades se crean de forma independiente y el programa se encarga de cargarlos al inicio y “colgarlos” o añadirlos a un menú en la aplicación principal.
Embarcadero MVP.
Analista y Programador de Sistemas Informáticos.
Estudios de Informática (Ingeniería Técnica Superior) en la UPC (Universidad Politécnica de Barcelona).
Llevo utilizando Delphi desde su versión 3. Especialista en diseño de componentes, Bases de Datos, Frameworks de Persistencia, Integración Continua, Desarrollo móvil,…
En este ejemplo se muestra de forma sencilla cómo “pasar” o convertir un Menu existente (componente TMainMenu) en un TTreeView; Conservando la jerarquía de los elementos y asignando las imágenes que ya existan en el ejemplo.
Embarcadero MVP.
Analista y Programador de Sistemas Informáticos.
Estudios de Informática (Ingeniería Técnica Superior) en la UPC (Universidad Politécnica de Barcelona).
Llevo utilizando Delphi desde su versión 3. Especialista en diseño de componentes, Bases de Datos, Frameworks de Persistencia, Integración Continua, Desarrollo móvil,…
var
i:Integer;
bContinue:BOOL;begin// Limpiar la lista
ListBox1.Items.Clear;// Recoge la lista de procesos en éste momento
aSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
aProcessEntry32.dwSize:=SizeOf(aProcessEntry32);// Acceder al primer proceso
bContinue := Process32First(aSnapshotHandle, aProcessEntry32);// Recorerr los procesos activoswhile(Integer(bContinue) <> 0)dobegin// Añadirlo a la lista
ListBox1.Items.Add(ExtractFileName(aProcessEntry32.szExeFile));// Hay más?
bContinue := Process32Next(aSnapshotHandle, aProcessEntry32);end;// cerrar la estructura
CloseHandle(aSnapshotHandle);
var
i: Integer;
bContinue: BOOL;
begin
// Limpiar la lista
ListBox1.Items.Clear;
// Recoge la lista de procesos en éste momento
aSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
aProcessEntry32.dwSize := SizeOf(aProcessEntry32);
// Acceder al primer proceso
bContinue := Process32First(aSnapshotHandle, aProcessEntry32);
// Recorerr los procesos activos
while (Integer(bContinue) <> 0) do begin
// Añadirlo a la lista
ListBox1.Items.Add(ExtractFileName(aProcessEntry32.szExeFile));
// Hay más?
bContinue := Process32Next(aSnapshotHandle, aProcessEntry32);
end;
// cerrar la estructura
CloseHandle(aSnapshotHandle);
Utilizando aProcessEntry32 se puede obtener más información de cada uno de los procesos, como:
* Identificador
* Nombre competo
* …
IntToHex(aProcessEntry32.th32ProcessID, 4)
aProcessEntry32.szExeFile
Embarcadero MVP.
Analista y Programador de Sistemas Informáticos.
Estudios de Informática (Ingeniería Técnica Superior) en la UPC (Universidad Politécnica de Barcelona).
Llevo utilizando Delphi desde su versión 3. Especialista en diseño de componentes, Bases de Datos, Frameworks de Persistencia, Integración Continua, Desarrollo móvil,…
Se trata de un sencillo ejemplo para mostrar el funcionamiento del componente TSelectOnRuntime que se encuentra en la sección de componentes de ésta página. De una forma muy burda (pero suficiente para ver el funcionamiento del componente) se ilustra con una imitación a IDE de Delphi cómo se pueden crear y modificar diferentes componentes en Runtime.
Se puede ver cómo se crean componenetes en “tiempo de ejecución” y cómo se mueven y redimensionan utilizando el componente TSelectOnRuntime.
Embarcadero MVP.
Analista y Programador de Sistemas Informáticos.
Estudios de Informática (Ingeniería Técnica Superior) en la UPC (Universidad Politécnica de Barcelona).
Llevo utilizando Delphi desde su versión 3. Especialista en diseño de componentes, Bases de Datos, Frameworks de Persistencia, Integración Continua, Desarrollo móvil,…
Creando tres sencillos procedimientos en un formulario se pueden mover controles visuales en Runtime colocados en un form siempre que deriven de TControl. Basta con definir los siguientes procedimientos y asignarlos a todos los controles que queramos mover; Además se deben definir dos variables en la parte privada del form:
NOTA: Los procedimientos se deben definir no en la parte privada, sino como eventos del form.
En la parte final de artículo se puede descargar un ejemplo compilado con Delphi 6.
procedure MouseMove;
procedure MouseUp;
procedure MouseDown;
// Definirlos como ventos del formprocedure MouseMove(Sender:TObject; Shift: TShiftState; X, Y:Integer);procedure MouseUp(Sender:TObject; Button: TMouseButton;
Shift: TShiftState; X, Y:Integer);procedure MouseDown(Sender:TObject; Button: TMouseButton;
Shift: TShiftState; X, Y:Integer);...// Definir éstas variables en la parte privada...private
Capturing:Boolean;
MouseDownSpot:TPoint;....// IMPLEMENTACION// Procedimintos a asignar a los eventos de los controles...procedure TForm1.MouseMove(Sender:TObject; Shift: TShiftState; X,Y:Integer);begin// Estamos capturando?if Capturing thenbegin// Mover el componente
TControl(Sender).Left:= TControl(Sender).Left-(MouseDownSpot.x- x);
TControl(Sender).Top:= TControl(Sender).Top-(MouseDownSpot.y- y);end;end;procedure TForm1.MouseUp(Sender:TObject; Button: TMouseButton;
Shift: TShiftState; X, Y:Integer);begin// Estamos capturando?if Capturing thenbegin
ReleaseCapture;// Liberar la captura
Capturing :=false;
TControl(Sender).Left:= TControl(Sender).Left-(MouseDownSpot.x- x);
TControl(Sender).Top:= TControl(Sender).Top-(MouseDownSpot.y- y);end;end;procedure TForm1.MouseDown(Sender:TObject; Button: TMouseButton;
Shift: TShiftState; X, Y:Integer);begin// Comenzar la captura y movimiento
Capturing :=true;
MouseDownSpot.X:= x;
MouseDownSpot.Y:= Y;end;
// Definirlos como ventos del form
procedure MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
...
// Definir éstas variables en la parte privada...
private
Capturing:Boolean;
MouseDownSpot:TPoint;
....
// IMPLEMENTACION
// Procedimintos a asignar a los eventos de los controles...
procedure TForm1.MouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
begin
// Estamos capturando?
if Capturing then begin
// Mover el componente
TControl(Sender).Left := TControl(Sender).Left - (MouseDownSpot.x - x);
TControl(Sender).Top := TControl(Sender).Top - (MouseDownSpot.y - y);
end;
end;
procedure TForm1.MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
// Estamos capturando?
if Capturing then begin
ReleaseCapture; // Liberar la captura
Capturing := false;
TControl(Sender).Left := TControl(Sender).Left - (MouseDownSpot.x - x);
TControl(Sender).Top := TControl(Sender).Top - (MouseDownSpot.y - y);
end;
end;
procedure TForm1.MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
// Comenzar la captura y movimiento
Capturing := true;
MouseDownSpot.X := x;
MouseDownSpot.Y := Y;
end;
Embarcadero MVP.
Analista y Programador de Sistemas Informáticos.
Estudios de Informática (Ingeniería Técnica Superior) en la UPC (Universidad Politécnica de Barcelona).
Llevo utilizando Delphi desde su versión 3. Especialista en diseño de componentes, Bases de Datos, Frameworks de Persistencia, Integración Continua, Desarrollo móvil,…