Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Cómo se declara y usa el tipo "Enumeration" en Delphi (https://www.clubdelphi.com/foros/showthread.php?t=93579)

cesarsoftware 21-11-2018 14:07:31

Cómo se declara y usa el tipo "Enumeration" en Delphi
 
Buenas foreros

Estoy buscando como definir tipos de datos ENUM en Delphi

Un ejemplo en C

Código:

enum FILETYPE_E {FILE_PRG = 0,FILE_TAB,FILE_PAN,        FILE_SYM,};
Un ejemplo en VB

Código:

Public Enum FILETYPE_E
        FILE_PRG = 0
        FILE_TAB
        FILE_PAN
        FILE_SYM
End Enum

If resul <> FILETYPE_E.FILE_PAN Then …….

¿Sabeis como se define (y accede) estos "enum" en nuestro querido Delphi?

Gracias de antemano

dec 21-11-2018 14:33:48

Hola a todos,

Puede revisar este artículo de Delphi Basics y también este apartado de la documentación de Embarcadero Delphi. Este sería un ejemplo con varios "tipos enumerados":

Código Delphi [-]
type
  TSound = (tsClick, tsClack, tsClock);
  TMyColor = (mcRed, mcBlue, mcGreen, mcYellow, mcOrange);
  Answer = (ansYes, ansNo, ansMaybe)

Arriba "TSound", "TMyColor", "Answer", son "enumeraciones". Así podría usarse una de ellas, por ejemplo:

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
var
  Sound: TSound;
begin
  Sound := TSound.tsClick;

  //

  if Sound = TSound.tsClick then
    ShowMessage('Sound is tsClick');

  //

end;

movorack 21-11-2018 14:35:30

Enumerations in Delphi

En Delphi Basics: Enumerations, SubRanges and Sets

Edito: O lees lo que DEC ya te comentó :D

dec 21-11-2018 14:43:20

Cita:

Empezado por movorack (Mensaje 529623)
Enumerations in Delphi

En Delphi Basics: Enumerations, SubRanges and Sets

Edito: O lees lo que DEC ya te comentó :D

¡Hey! :D :D

Pero no... no puede conformarse con lo que dec comentó... :D En efecto, se ve cómo declarar (pero no completamente) un tipo "enumeración", y, se ve cómo se puede asignar un determinado valor a una variable de dicho tipo, empero, hay más cosas por aprender, como posibles funciones útiles para los tipos "enumeración", etc.

cesarsoftware 21-11-2018 15:32:05

Gracias chicos, rápidos y concretos, defino....
Código Delphi [-]
type FILETYPE_E = (
    FILE_PRG = 0,
    FILE_TAB,
    FILE_PAN,
    FILE_SYM);
la función a usar es esta (definida por mi para acceder a la librería)
function OpenNET(name: string; var hPort: integer): FILETYPE_E; cdecl; stdcall; external 'NetCom.dll';
_
y el código
Código Delphi [-]
var
  resultado: FILETYPE_E;
begin
  resultado := OpenNET(ip_cnc, hPort);
  if resultado <> FILETYPE_E.FILE_PAN then
    Exit;
Un saludo

cesarsoftware 21-11-2018 16:33:00

Holaaa, se puede pasar?

Siguiendo con la conversión y vuestra estimable ayuda....para convertir una definición de funcion

Basic
Código:

Public Declare Function ReadVar Lib "NETCOM" (ByVal hPort As Integer, ByVal variable As String, ByVal value As String) As Integer
C
Código PHP:

int __stdcall ReadVar(HPORT_T hPortcharvariablecharvalue); 

Delphi?
Código Delphi [-]
function ReadVar(hPort: integer; variable: string; var value: string): integer; cdecl; stdcall; external 'Netcom.dll';

No me da error, pero no me llega la variable, supongo que hay lio entre CHAR* y STRING

Una ayudita please

PD: hace tiempo que quiero "regalar" a la comunidad una utilidad (Delphi) para hacer PING a multiples destinos con thread, vamos, para hacer "un analizador de red", pero solose "pegar" código, si me echais otra mano os la paso, va muy bien y la uso mucho.


Gracias de antemano

cloayza 21-11-2018 17:29:46

A ver intenta de esta manera...
Código Delphi [-]
function ReadVar(hPort: integer; variable: PAnsichar; value:PAnsichar): integer; stdcall; external 'Netcom.dll';
Código Delphi [-]
var
   lpVariable, lpValor:PAnsiChar;
   hPort, retval:Integer;
begin
     lpVariable   :='La_Variable'';
     lpValor:='';

     retval:=ReadVar(hPort, lpVariable, lpValor);

Saludos cordiales

ecfisa 21-11-2018 17:32:30

Hola.

Un buen equivalente en Delphi a char * de C, es PChar.

Por favor no te olvides de usar etiquetas cuando incluyas código en tus mensajes:


(ya las agregué en tus mensajes)

Saludos :)

cesarsoftware 22-11-2018 10:08:14

Gracias
Ya he probado, sigo igual pero quizá sea otro problema de la librería, voy a investigar

cesarsoftware 26-11-2018 13:19:00

Buenas foreros
Tema resuelto
para que la librería me devuelva el valor, ella lo define internamente como
Código:

"char value[30];"
asi que en la definición de la función lo he pasado a un array dinamico de ansichar
Código Delphi [-]
function ReadVar(hPort: integer; variable: ansistring; var value: array of ansichar): DNCRESULT_E; cdecl; stdcall; external 'netcom.dll';

y para usarlo
Código Delphi [-]
var
  resultado: DNCRESULT_E;
  value: array[0..31] of ansichar;
begin
      resultado := ReadVar(hPort, variable[i], value);
      if resultado = DNCRESULT_E.DNC_SUCCESS then
         Lx.Caption := String(value);

end;

Gracias por vuestra colaboracion


La franja horaria es GMT +2. Ahora son las 19:52:43.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi