PDA

Ver la Versión Completa : Cómo se declara y usa el tipo "Enumeration" en Delphi


cesarsoftware
21-11-2018, 14:07:31
Buenas foreros

Estoy buscando como definir tipos de datos ENUM en Delphi

Un ejemplo en C


enum FILETYPE_E {FILE_PRG = 0,FILE_TAB,FILE_PAN, FILE_SYM,};


Un ejemplo en VB


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 (http://www.delphibasics.co.uk/Article.asp?Name=Sets) y también este apartado de la documentación de Embarcadero Delphi (http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Simple_Types_(Delphi)#Enumerated_Types). Este sería un ejemplo con varios "tipos enumerados":


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:


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 (http://bfy.tw/KyFm)

En Delphi Basics: Enumerations, SubRanges and Sets (http://www.delphibasics.co.uk/Article.asp?Name=Sets)

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

dec
21-11-2018, 14:43:20
Enumerations in Delphi (http://bfy.tw/KyFm)

En Delphi Basics: Enumerations, SubRanges and Sets (http://www.delphibasics.co.uk/Article.asp?Name=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....

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

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

Public Declare Function ReadVar Lib "NETCOM" (ByVal hPort As Integer, ByVal variable As String, ByVal value As String) As Integer

C

int __stdcall ReadVar(HPORT_T hPort, char* variable, char* value);


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...

function ReadVar(hPort: integer; variable: PAnsichar; value:PAnsichar): integer; stdcall; external 'Netcom.dll';


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:

https://s9.postimg.cc/v9fxo14hb/TAGs.jpg
(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 "char value[30];"
asi que en la definición de la función lo he pasado a un array dinamico de ansichar
function ReadVar(hPort: integer; variable: ansistring; var value: array of ansichar): DNCRESULT_E; cdecl; stdcall; external 'netcom.dll';

y para usarlo
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