Programación
Notepad en GNU/Linux – Lazarus
31 mar
Estaba instalando el Lazarus en mi PC, y apenas finalizó la instalación me dió por estrenarlo programando un Notepad sencillo.
(* Programado por .:WindHack:. The Notepad GNU... Fecha de COmpilacion: 09 - 19 - 2009 IDE: Lazarus *) unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, Menus, StdCtrls, ActnList,unit2; type { TForm1 } TForm1 = class(TForm) MainMenu1: TMainMenu; MenuItem11: TMenuItem; MenuItem9: TMenuItem; MText: TMemo; MenuItem1: TMenuItem; MenuItem10: TMenuItem; MenuItem2: TMenuItem; MenuItem3: TMenuItem; MenuItem4: TMenuItem; MenuItem5: TMenuItem; MenuItem6: TMenuItem; MenuItem7: TMenuItem; MenuItem8: TMenuItem; Open: TOpenDialog; Save: TSaveDialog; procedure FormCreate(Sender: TObject); procedure MenuItem10Click(Sender: TObject); procedure MenuItem11Click(Sender: TObject); procedure MenuItem2Click(Sender: TObject); procedure MenuItem4Click(Sender: TObject); procedure MenuItem6Click(Sender: TObject); procedure MenuItem7Click(Sender: TObject); procedure MenuItem8Click(Sender: TObject); procedure MenuItem9Click(Sender: TObject); procedure MenuItem20Click(Sender: TObject); private { private declarations } public { public declarations } end; var Form1: TForm1; const Espacio = ' - '; implementation { TForm1 } procedure TForm1.MenuItem4Click(Sender: TObject); var FileName:String; begin if Open.Execute then MText.Lines.LoadFromFile(Open.FileName); FileName := Open.FileName; Caption := ExtractFileName(FileName+Espacio+'Ejemplo Notepad Ubuntu by .:WIndHack:.'); end; procedure TForm1.MenuItem6Click(Sender: TObject); begin MText.CopytoClipBoard; end; procedure TForm1.MenuItem7Click(Sender: TObject); begin MText.CutToClipboard; end; procedure TForm1.MenuItem8Click(Sender: TObject); begin MText.PasteFromClipboard; end; procedure TForm1.MenuItem9Click(Sender: TObject); begin MText.Undo; end; procedure TForm1.MenuItem20Click(Sender: TObject); begin Application.Terminate; end; procedure TForm1.FormCreate(Sender: TObject); begin MText.Align:=alClient; end; procedure TForm1.MenuItem10Click(Sender: TObject); begin MText.SelectAll; end; procedure TForm1.MenuItem11Click(Sender: TObject); begin Form2.ShowModal(); end; procedure TForm1.MenuItem2Click(Sender: TObject); var FileName:String; begin if Save.Execute then begin FileName := Save.FileName; MText.Lines.SaveToFile(SAve.FileName); Caption :=ExtractFileName(FileName+Espacio+'Ejemplo Notepad Ubuntu by .:WIndHack:.'); end else Exit; end; initialization {$I unit1.lrs} end.
Bien, solo hay una falla…¿Cuál?, el tamaño del compilado, pues Lazarus o mejor dicho FreePascal, genera ejecutables extremadamente grandes.
Si desean descargar el source, solo presionen aquí
Más >
Funciones sencillas y simples
31 mar
Aquí dejaré algunas funciones sencillas que me han sacado de varios apuros.
1º – Calcular múltiplo. Función para calcular los múltiplos en un rango determinado.
function CalcularMultiplo(Desde,Hasta,Multiplo:Integer):String; var I:Integer; begin for I:=Desde to Hasta do begin if I mod Multiplo = 0 then Result := Result + IntToStr(I) +',' end; end;
2º – Factorial. Función para calcular el factorial de un número.
function Factorial(Num:Integer):String; var I:Integer; B:Extended; begin B := Num; For I:=1 to Num - 1 do B := B * I; Result := FloatToStr(B); if Num > 170 then Result := 'Numero Infinito...' end;
3º – Par o Impar. Función para saber si un número es par o impar.
function ParOImpar(Num:Integer):String; begin if Num mod 2 = 0 then Result := IntToStr(Num)+' Es un número par' else Result := IntToStr(Num)+' Es un número impar' end;
4º – Es divisible. FUnción para saber si un número es divisible por otro.
function EsDivisible(Num1,Num2:Integer):String; begin if (Num1 mod Num2 = 0) then Result := 'Es divisible.' else Result := 'NO es divisible.'; End;
Espero les sea de ayuda.
Saludos,
Aplicación que habla [SAPI]
31 mar
Mirando por ahí me encontré con una librería de Microsoft muy interesante, es la “Microsoft Speech Object Library“, pero ¿Qué hace exactamente?, pues lo que hace ésta librería es permitirnos hacer o divertirnos con nuestra aplicación agregándole un “modulador” de voz.
En fin, me tomé el trabajo de hacer una aplicación de ejemplo:
Agrego el código…
unit Main; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, OleServer, SpeechLib_TLB, ComCtrls, Buttons, ShellAPI; type TFrm_Speech = class(TForm) SPVoice: TSpVoice; Memo_Hablar: TMemo; Track_Velocidad: TTrackBar; Lb_Rate: TLabel; Lb_Volume: TLabel; Track_Volume: TTrackBar; Btn_Speak: TBitBtn; Spd_Web: TSpeedButton; procedure Btn_HablarClick(Sender: TObject); procedure Track_VelocidadChange(Sender: TObject); procedure Track_VolumeChange(Sender: TObject); procedure Spd_WebClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Frm_Speech: TFrm_Speech; implementation {$R *.dfm} procedure TFrm_Speech.Btn_HablarClick(Sender: TObject); begin SPVoice.Speak(Memo_Hablar.Text,0) end; procedure TFrm_Speech.Spd_WebClick(Sender: TObject); begin ShellExecute(0,'open','http://foro.latinohack.com/',nil,nil,0); end; procedure TFrm_Speech.Track_VelocidadChange(Sender: TObject); begin SPVoice.Rate := Track_Velocidad.Position end; procedure TFrm_Speech.Track_VolumeChange(Sender: TObject); begin SPVoice.Volume := Track_Volume.Position end; end.
También pueden crearlo llamando a la función CreateOleObject que es idéntica a la función CreateObject de muchos lenguajes como VBS.
uses ComObj; var Voice: OLEVariant; begin Voice := CreateOLEObject('SAPI.SpVoice'); Voice.Speak('Hello LatinoHack!', 0); end;
Les dejo el link de descarga de la aplicación de ejemplo más la SAPI.
-Descarga:
http://www.box.net/shared/rdzuulmv14
Más >
Serie Fibonacci en Pascal
30 mar
Uno de los retos o mejor dicho ejercicio que realiza todo programador, es la famosa sucesión Fibonacci. Para los que no saben que es pueden visitar la Wikipedia.
He desarrollado una aplicación en consola que la realiza, espero les sea de utilidad.
program Fibonacci; {$mode objfpc}{$H+} uses {$IFDEF UNIX}{$IFDEF UseCThreads} cthreads, {$ENDIF}{$ENDIF} Classes { you can add units after this }; var A,B,C,D,I:Integer; Salir:Boolean = False; Opcion: ShortInt; J:String; begin Writeln('Obtener la serie Fibonacci'); Writeln; repeat I := 3; J := '.:WindHack:.'; Writeln; Writeln('Seleccione una opción'); Writeln; Writeln('1. - Calcular Fibonacci'); Writeln('2. - Salir'); Writeln; while 0 = 0 do begin Write('Introduce la opción: '); Readln(Opcion); if (Opcion > 0) and (Opcion <= 2) then Break; end; Case Opcion of 1:begin Writeln('Ingrese el número hasta donde se calculará...'); Readln(A); while A<1 do begin Writeln('Ingrese un número mayor a 0...'); Readln(A); Writeln; end; B := 0; C := 1; D := B+C; Writeln('Serie Fibonacci con ',A,' términos'); Writeln; if A=1 then Write(B); if A=2 then Write(B,' ',C); if A=3 then Write(B,' ',C,' ',D); if A>3 then while I<a></a>
Kryptix v1.0
30 mar
Kryptix es una aplicación que permite encriptar o desencriptar una cadena de texto usando algunos cifrados como el Caesar (César), Vigenère, XOR y un simple Reverser (mejor conocido como StringReverse).
Desarrollé dos nuevas funciones: la primera es una función que realiza exactamente lo mismo que la “ReverseString” encontrada en la unidad “StrUtils.pas“, pero esta es un poco más rápida.
ReverseStringM
function ReverseStringM(const AText:String):String; var I:Integer; Tmp:String; begin for I:= Length(AText) downto 0 do Tmp := Tmp + AText[I]; Result := Tmp; end;
Y la segunda, es una que genera una contraseña (Key) aleatoria con el número de caracteres deseados (Count).
function GenerateRandomString(Count:Integer):String; const Alphabet: Array [0..25] of Char = ('a','b','c','d','e','f','g','h','i','j', 'k','l','m','n','o','p','q','r','s','t', 'u','v','w','x','y','z'); var I:Integer; iTmp:String; begin Result := ''; Randomize; for I:=1 to Count do begin iTmp := iTmp + Alphabet[Random(25)]; Result := iTmp end; end;
Por último, les dejo algunas capturas del Kryptix…
Descargar
Efecto SplashForm
30 mar
Un efecto muy parecido al zumbido del MSN. El original estaba hecho en VB, por lo cual decidí traducirlo a Delphi.
(*-----------------------------------------------*) (*| - [Efecto] SplashForm *) (*| - [Autor Original (VB)] The Swash *) (*| - [Traducción a Delphi] .:WindHack:. *) (*| - [Fecha] 23/03/2010 *) (*-----------------------------------------------*) procedure SplashForm(hForm:TForm); var hTop,hLeft,I:Integer; begin hTop := hForm.Top; hLeft := hForm.Left; if (hForm.WindowState = wsNormal) And (hForm.Visible = True) then For I := 1 to 60 do begin hForm.Top := hForm.Top + 10; hForm.Left := hForm.Left + 10; hForm.Top := hTop; hForm.Left := hLeft; end; end;
Para usarlo es muy sencillo:
SplashForm(Form1);
Obtener el nombre de la ventana activa
30 mar
¿Alguna vez han querido obtener el nombre de la ventana activa?, pues si es así, les servirá ésta función, la cual emplea algunas API’s para obtener el título de la ventana que se está ejecutando.
Primero creemos nuestro proyecto y en él agregamos:
1 TTimer 1 TListBox 1 TLabel
Nos quedará algo como ésto:
Ahora vamos a la parte buena, programar.
Vamos a declarar una función que la llamaremos “GetActiveCaption” y pondremos el siguiente código…
function GetActiveCaption: string; var Handle: THandle; Len: LongInt; Title: String; begin Result := ''; Handle := GetForegroundWindow; if Handle <> 0 then begin Len := GetWindowTextLength(Handle) + 1; SetLength(Title, Len); GetWindowText(Handle, PChar(Title), Len); ActiveCaption := TrimRight(Title); end; end;
Con ésta función obtenemos el nombre de la ventana. Para obtener el nombre de la que está activa pues simplemente agregamos en el evento OnTimer del TTimer éste código.
procedure TForm1.Timer1Timer(Sender: TObject); begin ListBox1.AddItem(ActiveCaption,nil); end;
Listo, eso es todo.
Saludos,
Historia de Delphi. Desde los orígenes de la Informática hasta nuestros días
30 mar
La idea era narrar como ha evolucionado esta herramienta en estos 20 años (en realidad más), pero yendo más allá de una simple enumeración de fechas, versiones y características, sino exponiendo las cosas en su contexto, tratando de explicar porque en momentos dados las cosas se hicieron de un modo determinado y no de otro, y en que consitía lo que se hizo y lo que se dejó de hacer.
Sin embargo, al enfocarlo de este modo, el plan se mostró cada vez más ambicioso. Hablar de Borland Delphi es hablar de Turbo Pascal, y hablar de Turbo Pascal es hablar del lenguaje Pascal y es hablar de los PCs. Hablar de Delphi es hablar de Windows, pero también es hablar de MS-DOS (Borland Pascal, Turbo Pascal) y de Linux (Kilyx), y eso es hablar de Unix, y es hablar de CP/M, y es hablar de microinformática y de lenguajes, y es…
Por lo tanto se ha decidido empezar de la forma más genérica posible, desde la (pre)historia a grandes rasgos de la informática, para ir cerrando paulatinamente el círculo a modo de embudo entorno a la microinformática, al universo PC, a MS-DOS y Windows, y paralelamente, la aparición de Linux en Más >
Delphi vs Visual Basic
30 mar
¿Por qué Delphi?. Delphi versus Visual Basic.
Delphi comparte una filosofía con Visual Basic (de ahora en adelante VB), que es programar en un entorno totalmente visual. Pero es un único punto que tiene en común con VB. La principales diferencias estan en el lenguaje en el que se apoya cada uno. Delphi lo hace en Object Pascal que es Pascal orientado a objetos, y VB como su nombre indica se basa en Basic. El Basic por mucho que lo disfracen con palabras como visual, orientado a objetos, nunca dejara de ser basic, en cambio Pascal ya es un lenguaje compilado.
Para no enrollarme mas paso a describir, brevemente, las caracteristica del Delphi frente al VB.
* Delphi genera ficheros ejecutables compilados. VB no. Lo que repercute en su velocidad. * Delphi puede usar bibliotecas de enlace dinamiaco (fichero tipo dll) y los puede crear. VB solo usarlos * Delphi puede usar los controles OCX de VB. * Delphi permite crear sus propios controles (llamados VCL). * Para crear un control en VB tienes que usar otro lenguaje como C++ * Para crear un control para Delphi solo tienes que saber Delphi y tener el delphi. * Delphi tiene todos los controles de VB. Si Más >


