Autor Tema: conociendo al C builder de uno que viene del visual basic  (Leído 31019 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
conociendo al C builder de uno que viene del visual basic
« en: 13 de Septiembre de 2007, 12:51:04 »
Indeciso al proponer el tema de este hilo, porque no se si me despegaré del visual basic, a ver como me va con el c builder. Parece increible pero programar c en las compus, es muy diferente al los micros. Bueno como soy de los que primero hace las cosas y después lee el manual, comienza la lanzadera de flechas: lo llamo el teorema del Force 8)

el primer programa se trata del mostrar el famoso "Hola Mundo" clicando en un botón. Colocaré los pasos realizados y mis comentarios salidos expontaneamente

- abro el c++ builder 6.0 -comparando el IDE, - se parece al vb 4.0 con ventanas 'hijas' independientes-

- clico file->new      -ayy que malvados, está todo en inglish - :(

- busco donde hay un dichoso commandbutton, ohh aquí se llama BitBtn que se encuentra en la pestaña Additional,

-por cierto y había visto BitBtn como api anteriormente, instuyo de que se trata.




bueno pego el botón en el formulario -por lo menos lo llaman Form1-

al darle doble click al botón para entrar en modo programación, me consigo:

Código: C++
  1. void __fastcall TForm1::BitBtn1Click(TObject *Sender)
  2. {
  3.  
  4. }

oh oh, aquí empiezan los problemas, no tengo idea que significará, pero nimporta, seguro debe ser un procedimiento que se ejecuta al click con el mause

- ahora viene la parte de mostrar el mensaje, a ver , en vb era MsgBox, explicitamente:

Código: C++
  1. MsgBox "Hola", vbOKOnly, "Mensaje1"
lo escribo y arranco con Run....



el segundo mensaje es cierto, en c se usa el ;

umm entonces como sería mostrar un mensaje...

en la ayuda aparece un tal messagebox explicado como una api, que tal si lo escribo siguiendo sus argumentos


int MessageBox(

    HWND hWnd,   // handle of owner window
    LPCTSTR lpText,   // address of text in message box
    LPCTSTR lpCaption,   // address of title of message box 
    UINT uType    // style of message box
   );   

 
 
 queda así:

Código: C++
  1. MessageBox ,"Hola", "Mensaje1", MB_OK;
         
 pos sigue los errores, porque me salte el manejador hwnd (compiló bien y no hace nada), umm y ¿como hago para decirle al compilador que será la ventana form1?


escribo como opción:

Código: C++
  1. MessageBox form1,"Hola", "Mensaje1", MB_OK;


otro fallido, hay que leer mas en la ayuda.

Para el primer argumento, tenemos:

hWnd
Identifies the owner window of the message box to be created. If this parameter is NULL, the message box has no owner window.


ahh, o sea, que lo puedo poner como NULL

Código: C++
  1. MessageBox NULL,"Hola", "Mensaje1", MB_OK;

arrrg sigue saliendo el bendito error:




piensa, piensa PalitroqueZ, ahhh y ¡si lo ponemos con entreparéntesis!

Código: C++
  1. MessageBox (NULL,"Hola", "Mensaje1", MB_OK);


 
¡¡funcionó!! seguro pensaran, y este tonto no sabe que en c se usan los (), es cierto, lo que sucede es que estaba pensando en visual basic, porque en éste último se pueden obviar los () si no usaras el resultado de una función.

conclusiones:

- que tengo que cambiar la costumbre de pensar en el otro lenguaje mientras le doy a c builder.

- a ojo porciento sospecho que éste compilador se mete con las apis de windows.

- no puedo sacar mas conclusiones hasta seguir ensayando...
« Última modificación: 13 de Septiembre de 2007, 12:59:33 por PalitroqueZ »
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: conociendo al C builder de uno que viene del visual basic
« Respuesta #1 en: 13 de Septiembre de 2007, 12:51:33 »
Bueno señor@s después de revisar, me enteré que existe un botón llamado button -se encuentra en las pestaña Standard- que pasé por alto ¿entonces que significa eso de BitBtn? umm


hay otra cosa interesante que "descubrí", éste tipo (el c builder) muestra el código fuente del formulario, de los botones, es decir de lo que se pueda pegar allí

código del Form:



código que ejecutará la acción dentro del Form:




« Última modificación: 13 de Septiembre de 2007, 13:00:44 por PalitroqueZ »
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado IAO

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 702
Re: conociendo al C builder de uno que viene del visual basic
« Respuesta #2 en: 13 de Septiembre de 2007, 15:39:23 »
Paliz... que tal

Mi pana te comento que, intente una vez trabajar con el Borland Builder, pero que va no di pie con el.
Solo pude trabajar medio, medio, con Visual C++.
Desesperado y renegando siempre de VB porque según yo era muy facil y era para flojos.
Me fui con el super poderoso MASM32(MacroAssembler). Logré cosas que nunca logré con lenguaje C o VC.
Te comento que luego me dije, para q' pierdo tanto tiempo haciendo toda una aplicacón visual si solo
requiero probar que algo funciona, dejé el bello y hermoso MASM32(lo adoro).

Me fui a QBasic 7 y Freebasic. Y sabes, ahora estoy donde comencé en VB.
Tantas vueltas para echarme en el mismo sitio. :)

Te comento que ahora para mí, lo más bello de VB es: lo facil que haces todo.  :mrgreen:
 ;----------------------------------------------

Bueno esto esto es lo que quería decirte:
Si buscas en el Directorio Samples de Borland encontrarás ejemplos miles. Y ojo que tiene diversas librerías
o creo que son clases (bueno ni recuerdo) que te pueden confundir.

Bye('_').
« Última modificación: 13 de Septiembre de 2007, 16:49:53 por IAO »
"No hay caminos para lograr la PAZ. La PAZ es el camino"... (Mahatma Gandhi).
Mentes Superiores discuten Ideas, Proyectos. Mentes Promedio discuten Acontecimientos y Sucesos. Mentes Pobres discuten sobre Personas.

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: conociendo al C builder de uno que viene del visual basic
« Respuesta #3 en: 14 de Septiembre de 2007, 15:50:55 »
que tal IAO,

te comento que desde hace un tiempito quería probar otro entorno de programación y había pasado por el DevC++ y el visual C y ambos me ganaron a la final  :?

continuando...

buscando por google conseguí un tutorial para empezar y leyendo entre los topicos me crucé con uno muy curioso llamado "Programación con hebras" debe ser a lo que se refiere el amigo Maunix acá

lo que voy entendiendo es que una aplicación se puede trabajar como una especie de rtos, para darle el turno a otros procesos. yo creo que un ejemplo típico son los programas recuperadores de password, ellos tienen una opción donde puedes darle prioridad a la ejecución donde se pretende hallar la clave a ciertos archivos (p.e. usando la fuerza bruta). si ponemos la prioridad alta, aumentará la velocidad del proceso, a cambio de que el cpu se pondrá lento para otros programas, no sucediendo así si colocamos baja prioridad.

supongo que en vb lo que se le aproxima es la función DoEvents pero no es tan flexible como lo que se maneja en c builder.


está super-interesante la forma de programar usando hebras (Thread), lo apartaré de momento (ya que quiero aprender lo básico primero).


mas detalles encontrados:

- es válido anteponer & en las cadenas para modos de atajos por teclados con Alt+&letra_asignada.

- existen los menues emergentes para conocer/agilizar las propiedades, funciones y metodos para un componente. Ojo si no se puede llamar a una propiedad les aparecerá este mensaje:



- en la creación de los menues (MainMenu), se reconoce como una línea de separación al escribir - en la propiedad caption.

- la distinción entre mayúsculas y minúsculas todavía me crea desaciertos :) tengo que acostumbrarme. (sobre todo para las palabras reservadas).


La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: conociendo al C builder de uno que viene del visual basic
« Respuesta #4 en: 15 de Septiembre de 2007, 07:34:10 »
Hola Pedro! Felicitaciones por la migración. ;)

Me ofrezco para ayudarte en todo lo que pueda para ayudarte en tu proceso de transicion.

Al principio cuesta...pero con el tiempo se ven los beneficios ;)

Saludos!
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: conociendo al C builder de uno que viene del visual basic
« Respuesta #5 en: 15 de Septiembre de 2007, 14:32:24 »
Gracias Master  :-/



continuandini...  8)

veamos un error que me sucedió en la programación:

sea el componente TImage, he pegado uno en el formulario y le cambié el nombre por ima

resulta que estoy tratando de dibujar una línea, pués bien aquí se hace a través de la propiedad Canvas y LineTo. El código es:

Código: C++
  1. static int i;
  2.   If(i != cx){
  3.     ima->Canvas->LineTo(i, i * (117 / 253));
  4.     i = i + 1;
  5.   }

a lo que quiero llegar es que podemos saber si vamos por buen camino gracias a los menues emergentes, si escribo ima- al escribir > (para completar el operador ->) debe aparecer el menu emergente con las propiedades y funciones disponibles para ese componente



con el programa de arriba tenemos un error y es que el condicional está escrito indebidamente, pués debe ser if y no If

entonces para de código anterior no aparecerá el menú descrito, sino un mensaje en la parte inferior de este tipo:



La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: conociendo al C builder de uno que viene del visual basic
« Respuesta #6 en: 15 de Septiembre de 2007, 14:33:18 »
mas quebraderos de cabeza..

como parte de aprendizaje (y así me impongo retos para animarme con el c++) estoy llevando programas del vb al c, y para empezar probemos con los ejempitos de graficos.

recordemos que para dibujar una línea recta en el picturebox se hacía de esta manera

Código: Visual Basic
  1. Dim cx As Integer, cy As Integer
  2. Dim i As Integer, j As Integer
  3.  
  4.  
  5. Private Sub Command1_Click()
  6.     Timer1.Enabled = True
  7. End Sub
  8.  
  9. Private Sub Form_Load()
  10.     cy = Picture1.ScaleHeight ' 117
  11.    cx = Picture1.ScaleWidth   ' 253
  12.    Timer1.Interval = 10
  13.     Timer1.Enabled = False
  14. End Sub
  15.  
  16. Private Sub Timer1_Timer()
  17.     If Not i = cx Then  ' pregunta si i no ha llegado a cx
  18.    Picture1.Line (0, 0)-(i, i * (117 / 253))
  19.     i = i + 1  ' incrementa i
  20.    Else
  21.     Timer1.Enabled = False  ' ya llego, deja de dibujar
  22.    End If
  23. End Sub


llevarlo al c, me costó un poquito de trabajo, ya que hay ciertas reglas que cumplir, (en vb ya hay un montón de cosas que él te hace automático) pero en c hay que hacercelas saber al compilador.

por ejemplo, la propiedad que conseguí para dibujar una recta, en el c builder (en adelante lo llamaré BCB) es LineTo dentro de Canvas, viendo en la ayuda:



The LineTo function draws a line from the current position up to, but not including, the specified point.

BOOL LineTo(

    HDC hdc,   // device context handle
    int nXEnd,   // x-coordinate of line's ending point 
    int nYEnd    // y-coordinate of line's ending point 
   );   


éste me sirve para el primer programa, ahora bien las coordenadas son enteros, entonces no podría usar:

i, i * (117 / 253)

para indicarle las nuevas coordenadas x e y (que el método Line en vb las acepta como Single)

buscando y probando no sirvieron las funciones ceil y floor, parece ser que estas funciones aritméticas no aceptan variabes como argumento, bueno no se la razón.

entonces buscando y buscando en la ayuda, me conseguí otra muy curiosa llamada MulDiv


Description

MulDiv returns the result from multiplying Number by Numerator and then (integer) dividing by Denominator. If Denominator is 0, MulDiv returns –1.


¡que casualidad! justamente esa instrucción es la que me sirve, ya que tengo que multiplicar y después dividir y lo mejor de todo es que el resultado es un int. Quedaría así:

MulDiv(i,cy,cx)

reescribiendo el código completo:

Código: C++
  1. static int cx;
  2.  static int cy;
  3.  static int i;
  4.  
  5. void __fastcall TForm1::FormCreate(TObject *Sender)
  6. {
  7.         cy = ima->Height;
  8.         cx = ima->Width;
  9.         Timer1->Enabled=false;
  10. }
  11. //---------------------------------------------------------------------------
  12.  
  13. void __fastcall TForm1::Button1Click(TObject *Sender)
  14. {
  15.         Timer1->Enabled=true;
  16. }
  17. //---------------------------------------------------------------------------
  18.  
  19. void __fastcall TForm1::Timer1Timer(TObject *Sender)
  20. {
  21.   if(i != cx){
  22.     ima->Canvas->LineTo(i,MulDiv(i,cy,cx));
  23.     i++;
  24.     lbl->Caption= i;
  25.   }else{
  26.     Timer1->Enabled=false;
  27.   }
  28. }
  29. //---------------------------------------------------------------------------

fíjense que el algorítmo es el mismo, solo cambia la sintáxis



Bién!  :-/

hay un detalle, se observa un notorio refresco en el componente TImage (el equivalente al picturebox), tendré que averiguar de que se trata y solucionarlo. :(


« Última modificación: 15 de Septiembre de 2007, 15:22:10 por PalitroqueZ »
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado IAO

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 702
Re: conociendo al C builder de uno que viene del visual basic
« Respuesta #7 en: 15 de Septiembre de 2007, 15:17:59 »
Hola:

Pali...Z, me estás tentando a instalar el CBuilder, y serguirte de serca a ver si se me pega
algo bueno. De pana, pana, panita, me estas tentando.
Se me hizo agua la boca con este ejemplo.

Bye('_').
"No hay caminos para lograr la PAZ. La PAZ es el camino"... (Mahatma Gandhi).
Mentes Superiores discuten Ideas, Proyectos. Mentes Promedio discuten Acontecimientos y Sucesos. Mentes Pobres discuten sobre Personas.

Desconectado reiniertl

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 1187
Re: conociendo al C builder de uno que viene del visual basic
« Respuesta #8 en: 15 de Septiembre de 2007, 17:02:05 »
Los exhorto a mudarse del pobretón de BASIC al señorón de C, yo lo utilizo desde segundo año de la carrera, y la verdad ME ENCANTA, así que los convido a mudarse.

Ahora estoy intentando mudarme a algo OpenSource, porque el tema de las  licencias siempre es una molestia, y por supuesto el día que tenga que mudarme por cuestiones de presupuesto, ya estaría en adelanto respecto a mis compañeros en ese sentido. Pienso usar GCC o algo así, vamos a ver.

Pero sin dudas el Builder viene de perlas para cualquiera, Pedro Felicidades.

Saludos
Reinier

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: conociendo al C builder de uno que viene del visual basic
« Respuesta #9 en: 17 de Septiembre de 2007, 13:54:31 »
Hola:

Pali...Z, me estás tentando a instalar el CBuilder, y serguirte de serca a ver si se me pega
algo bueno. De pana, pana, panita, me estas tentando.
Se me hizo agua la boca con este ejemplo.

Bye('_').

jeje pués adelante.  :)



sigo con las trancas, no se como cambiar el color del fondo de un TPaintBox.

en la ayuda dice que es PaintBox1->Color = clLime; no funciona :(

el código:

Código: C++
  1. void __fastcall TForm1::FormActivate(TObject *Sender)
  2. {
  3.         PaintBox1->ParentColor=true;
  4.         PaintBox1->Color=clBlue;
  5.        
  6. }

¿podría alguien decirme como?

ahh el adjunto.

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado reiniertl

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 1187
Re: conociendo al C builder de uno que viene del visual basic
« Respuesta #10 en: 17 de Septiembre de 2007, 19:54:27 »
PaintBox1->Canvas->Color = clLime;

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: conociendo al C builder de uno que viene del visual basic
« Respuesta #11 en: 18 de Septiembre de 2007, 18:22:16 »
pués no funciona, mira el error que sale:



seguiré investigando, (no puede ser que no se pueda cambiar  :?)
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado El_Guitre

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1046
Re: conociendo al C builder de uno que viene del visual basic
« Respuesta #12 en: 18 de Septiembre de 2007, 23:59:50 »
PalitroqueZ, en este momento no tengo instalado el builder pero hace esto:

Al principio de tu rutina de dibujo comienzas con las siguientes lineas

PaintBox1->Canvas->Brush->Color=clGreen;                         //seleccionas el color para pintar
PaintBox1->Canvas->FillRect(PaintBox1->Canvas->ClipRect); //Pintas todo el PaintBox

Probalo y cualquier cosa avisame, yo mientras voy a buscar los cds del builder 6 para instalarlo

Desconectado El_Guitre

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1046
Re: conociendo al C builder de uno que viene del visual basic
« Respuesta #13 en: 19 de Septiembre de 2007, 00:14:44 »
Te paso un pedazo de código del programa que uso para graficar la señal de ECG de mi Holter digital

el paintbox se llama zona

void __fastcall TForm1::Dibujar(int x)
{
 int k;
 
 zona->Canvas->Brush->Color=clBlack;
 zona->Canvas->FillRect(zona->Canvas->ClipRect);
 zona->Canvas->Pen->Color=clLime;
 for (k=0;k<512;k++)
     {
      zona->Canvas->Pixels[k][255-(v[k+x])]=clLime;
      zona->Canvas->MoveTo  (k,(255-(v[k+x])));
      zona->Canvas->LineTo  (k+1,(255-(v[k+x+1])));
      // zona->Canvas->Pixels[k][medio]=clYellow;
     }

}



Los datos son precargados en un vector cuando se abre el archivo donde esta la señal, para dibujar la linea de señal nula por ejemplo lo podria cargar con ceros:

for(int s=0;s<10240;s++)   { v=0; }



Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: conociendo al C builder de uno que viene del visual basic
« Respuesta #14 en: 19 de Septiembre de 2007, 14:05:40 »
Te paso un pedazo de código del programa que uso para graficar la señal de ECG de mi Holter digital

el paintbox se llama zona

void __fastcall TForm1::Dibujar(int x)
{
 int k;
 
 zona->Canvas->Brush->Color=clBlack;
 zona->Canvas->FillRect(zona->Canvas->ClipRect);
 zona->Canvas->Pen->Color=clLime;
 for (k=0;k<512;k++)
     {
      zona->Canvas->Pixels[k][255-(v[k+x])]=clLime;
      zona->Canvas->MoveTo  (k,(255-(v[k+x])));
      zona->Canvas->LineTo  (k+1,(255-(v[k+x+1])));
      // zona->Canvas->Pixels[k][medio]=clYellow;
     }

}



Los datos son precargados en un vector cuando se abre el archivo donde esta la señal, para dibujar la linea de señal nula por ejemplo lo podria cargar con ceros:

for(int s=0;s<10240;s++)   { v=0; }



 ahh, entonces con estas propiedades es que se hacen..
 
     zona->Canvas->FillRect(zona->Canvas->ClipRect);
     zona->Canvas->Pixels[k][medio]=clYellow;

voy a probarlas.

Gracias El_Guitre
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek


 

anything