Autor Beitrag
geilo
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Fr 25.06.04 23:57 
Hallo, bräuchte da eure hilfe:

Zwar hab ich mit einem Quelltext, den man häufig im Forum findet, eine art Net Send Client gemacht.

Hier ist der Quelltext:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
function NetSend(dest, Source, Msg: string): Longint; overload;    
type    
  TNetMessageBufferSendFunction = function(servername, msgname, fromname: PWideChar;    
    buf: PWideChar; buflen: Cardinal): Longint;     
  stdcall;    
var    
  NetMessageBufferSend: TNetMessageBufferSendFunction;    
  SourceWideChar: PWideChar;    
  DestWideChar: PWideChar;    
  MessagetextWideChar: PWideChar;    
  Handle: THandle;    
begin    
  Handle := LoadLibrary('NETAPI32.DLL');    
  if Handle = 0 then    
  begin    
    Result := GetLastError;       Exit;    
  end;    
    @NetMessageBufferSend := GetProcAddress(Handle, 'NetMessageBufferSend');    
  if @NetMessageBufferSend = nil then    
  begin    
    Result := GetLastError;    
    Exit;    
  end;    

 
  MessagetextWideChar := nil;    
  SourceWideChar      := nil;    
  DestWideChar        := nil;    

 
  try    
    GetMem(MessagetextWideChar, Length(Msg) * SizeOf(WideChar) + 1);    
    GetMem(DestWideChar, 20 * SizeOf(WideChar) + 1);    
    StringToWideChar(Msg, MessagetextWideChar, Length(Msg) * SizeOf(WideChar) + 1);    
    StringToWideChar(Dest, DestWideChar, 20 * SizeOf(WideChar) + 1);    

 
    if Source = '' then    
      Result := NetMessageBufferSend(nil, DestWideChar, nil,    
        MessagetextWideChar, Length(Msg) * SizeOf(WideChar) + 1)    
    else    
    begin    
      GetMem(SourceWideChar, 20 * SizeOf(WideChar) + 1);    
      StringToWideChar(Source, SourceWideChar, 20 * SizeOf(WideChar) + 1);    
      Result := NetMessageBufferSend(nil, DestWideChar, SourceWideChar,    
        MessagetextWideChar, Length(Msg) * SizeOf(WideChar) + 1);    
      FreeMem(SourceWideChar);    
    end;    
  finally    
    FreeMem(MessagetextWideChar);    
    FreeLibrary(Handle);    
  end;    
end;    

 
function NetSend(Dest, Msg: string): Longint; overload;    
begin    
  Result := NetSend(Dest, '', Msg);    
end;    

 
function NetSend(Msg: string): Longint; overload;    
begin    
  Result := NetSend('', '', Msg);    
end;    

 
   
 procedure TForm1.BitBtn1Click(Sender: TObject);
const
  NERR_BASE = 2100;
  NERR_NameNotFound = NERR_BASE + 173;
  NERR_NetworkError = NERR_BASE + 36;
  NERR_Success = 0;
var
  Res: Longint;
  sMsg: string;
begin
  Res := NetSend(edit1.text, edit2.text);

  case Res of
    ERROR_ACCESS_DENIED: sMsg := 'user does not have access to the requested information.';
    ERROR_INVALID_PARAMETER: sMsg := 'The specified parameter is invalid.';
    ERROR_NOT_SUPPORTED: sMsg := 'This network request is not supported.';
    NERR_NameNotFound: sMsg := 'The user name could not be found.';
    NERR_NetworkError: sMsg := 'A general failure occurred in the network hardware.';
    NERR_Success: sMsg := 'Message sent!';
  end;
  ShowMessage(sMsg);

end;



Soweit funktionierts auch.
Und jetzt brauch ich eure hilfe:

Ich möchte in einem Editfeld den Absendernamen eingeben und er soll dann logisch auch aufscheinen.
Es müsste in diesem Quelltext möglich sein! Da steht nämlich am Anfang:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
function NetSend(dest, Source, Msg: string): Longint; overload;
type
  TNetMessageBufferSendFunction = function(servername, msgname, fromname: PWideChar;
    buf: PWideChar; buflen: Cardinal): Longint;

nur wie kann ich jetzt irgendwie ein Editfeld auf das fromname übertragen?
Bitte helft mir!


Moderiert von user profile iconPeter Lustig: Code- durch Delphi-Tags ersetzt.
patrick
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1481

WIN2k, WIN XP
D6 Personal, D2005 PE
BeitragVerfasst: Sa 26.06.04 09:58 
da hilft dir dei funktion pwidechar weiter.

guck mal in der delphihilfe dannach.
dort gibts n haufen zusätzliche funktionen wie
WideCharToString(Source: PWideChar): string;
oder
StringToWideChar(const Source: string; Dest: PWideChar; DestSize: Integer): PWideChar;

und n paar beispiele dazu

_________________
Patrick
im zweifelsfall immer das richtige tun!!!
geilo Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Sa 26.06.04 10:57 
Ich versteh nicht ganz wo ich den einbauen soll und wie, so:

fromname:=StringToWideChar(const Source: string; Dest: PWideChar; DestSize: Integer): PWideChar;


aber wo gibt man hier das Editfeld an?

Wäre dir sehr dankbar wenn du mir nochmal helfen könntest!
patrick
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1481

WIN2k, WIN XP
D6 Personal, D2005 PE
BeitragVerfasst: Sa 26.06.04 12:25 
das sollte wohl mehr so aussehen:
das was da steht sind die parameter der fuktion. die du durch eine variablen erstetzten must
ausblenden Delphi-Quelltext
1:
StringToWideChar(edit1.text,fromname; sizeof(edit1.text));					


hier die beschreibung dazu aus der delphihilfe:
Zitat:

function StringToWideChar(const Source: string; Dest: PWideChar; DestSize: Integer): PWideChar;

Description

StringToWideChar converts the string given by Source from ANSI to UNICODE and stores the result in the buffer given by Dest and DestSize. Following the call, the Dest buffer contains at most DestSize - 1 characters from the source string, terminated by a NULL wide character. The function returns a pointer to Dest.

_________________
Patrick
im zweifelsfall immer das richtige tun!!!
obbschtkuche
Gast
Erhaltene Danke: 1



BeitragVerfasst: Sa 26.06.04 12:33 
patrick hat folgendes geschrieben:
ausblenden Delphi-Quelltext
1:
StringToWideChar(edit1.text,fromname; sizeof(edit1.text));					


eher so:

ausblenden Delphi-Quelltext
1:
StringToWideChar(edit1.text, fromname, length(edit1.text));					
geilo Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Sa 26.06.04 12:33 
Tschuldigung wenn ich nochmal frage, :oops:

Wo soll ich

StringToWideChar(edit1.text,fromname; sizeof(edit1.text));

einsetzen, in die Funktion, oder wenn man auf den Sende Button drückt?
geilo Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Sa 26.06.04 12:40 
Das problem ist folgendes:


StringToWideChar(edit1.text,fromname; sizeof(edit1.text));

Wenn ich das auf den Sende Button programmiere kennt mein Delphi 6 die Variable formname nicht, wenn ich es in den Begin - End teil des funktion Quellcodes einfüge kommt komischerweiße die Fehlermeldung bei edit1.text, genauer gesagt bei edit1
raziel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2453

Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
BeitragVerfasst: Sa 26.06.04 14:47 
Hi,

Ich hätt spontan gesagt, so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
{...}
procedure TForm1.BitBtn1Click(Sender: TObject);
const
  NERR_BASE = 2100;
  NERR_NameNotFound = NERR_BASE + 173;
  NERR_NetworkError = NERR_BASE + 36;
  NERR_Success = 0;
var
  Res: Longint;
  sMsg: string;
begin
  Res := NetSend(edit1.text, edit3.text , edit2.text); // <- in edit3.text steht die absenderinfo

  case Res of
    ERROR_ACCESS_DENIED: sMsg := 'user does not have access to the requested information.';
    ERROR_INVALID_PARAMETER: sMsg := 'The specified parameter is invalid.';
    ERROR_NOT_SUPPORTED: sMsg := 'This network request is not supported.';
{...}


raziel

_________________
JSXGraph
Hack Gott
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 409

Windows Vista
Delphi 2005 Personal, Delphi 7
BeitragVerfasst: Fr 28.01.05 15:17 
Titel: Edit???
Und was steht dann in edit1 bzw. edit2??? :oops:

_________________
"Je mehr Käse, desto mehr Löcher; Je mehr Löcher, desto weniger Käse. Daraus folgt: Je mehr Käse desto weniger Käse!"