Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Anstatt ID den Namen verwenden? (https://www.delphipraxis.net/72223-anstatt-id-den-namen-verwenden.html)

Christian Seehase 29. Jun 2006 18:01

Re: Anstatt ID den Namen verwenden?
 
Moin Mirco,

Result ist eine Variable, die der Compiler implizit zur Verfügung stellt, wenn Du eine Funktion deklarierst.
Sie hat den Typ des Rückgabewertes der Funktion.

Um den Typ zu ändern, müsstest Du also die Deklaration der Funktion ändern, und keine Variable mit diesem Namen deklarieren:

Code:
function EnumProc(StHandle: HWND; lines: TStrings): [b]Longbool[/b]; stdcall;

// oder

function EnumProc(StHandle: HWND; lines: TStrings): [b]BOOL[/b]; stdcall;

Mirco 29. Jun 2006 18:48

Re: Anstatt ID den Namen verwenden?
 
Okay, danke.
Mirco

capo 12. Jul 2006 22:46

Re: Anstatt ID den Namen verwenden?
 
hallo

ich habe noch eine frage zum folgenden beispiel:

Delphi-Quellcode:
function EnumProc(StHandle: HWND; lines: TStrings): boolean; stdcall;
var
  buffer, desc: array[0..100] of char; // max. 101 Zeichen
begin
  GetClassname(StHandle, buffer, 100); // 100
  GetWindowText(StHandle, desc, 100); // 100
  lines.add(format('ID: %d, Class: %s, Text: %s', [GetDlgCtrlID(StHandle), buffer, desc]));
  EnumChildWindows(StHandle, @EnumProc, Integer(Lines));
  Result := true;
end;
und zwar hierzu
Delphi-Quellcode:
  buffer, desc: array[0..100] of char; // max. 101 Zeichen
ich muss viel mehr text auslesen, habe schon alles mögliche versucht, die zahl erhöhen anderes array (obwohl ich mit den arrays bestimmt fehler gemacht habe).
bekomme immer nur eine bestimmte menge angezeigt, nie alles.


capo

3_of_8 12. Jul 2006 22:59

Re: Anstatt ID den Namen verwenden?
 
Delphi-Quellcode:
function EnumProc(StHandle: HWND; lines: TStrings): boolean; stdcall;
const
  MAXLENGTH: Integer = 200;
var
  buffer, desc: array[0..MAXLENGTH] of char;
begin
  GetClassname(StHandle, buffer, MAXLENGTH);
  GetWindowText(StHandle, desc, MAXLENGTH);
  lines.add(format('ID: %d, Class: %s, Text: %s', [GetDlgCtrlID(StHandle), buffer, desc]));
  EnumChildWindows(StHandle, @EnumProc, Integer(Lines));
  Result := true;
end;

himitsu 12. Jul 2006 23:17

Re: Anstatt ID den Namen verwenden?
 
Code:
function EnumProc(StHandle: HWND; lines: TStrings): longbool; stdcall;
var
  buffer: array[0..100] of char;
  [b]desc: array[0..1000] of char;[/b]
begin
  GetClassname(StHandle, buffer, [b]SizeOf(buffer)[/b]);
  GetWindowText(StHandle, desc, [b]SizeOf(dest)[/b]);
  lines.add(format('ID: %d, Class: %s, Text: %s', [GetDlgCtrlID(StHandle), buffer, desc]));
  EnumChildWindows(StHandle, @EnumProc, Integer(Lines));
  Result := true;
end;

Zitat:

Zitat von capo
und zwar hierzu
Delphi-Quellcode:
  buffer, desc: array[0..100] of char; // max. 101 Zeichen

max. 100 Zeichen :warn:

also 100 Zeichen plus die abschließende #0 :zwinker:


[add]
@3_of_8:
entweder
Code:
buffer, desc: array[0..MAXLENGTH[b] - 1[/b]]; of char;
oder
Code:
GetClassname(StHandle, buffer, MAXLENGTH[b] + 1[/b]);

capo 12. Jul 2006 23:36

Re: Anstatt ID den Namen verwenden?
 
hallo
danke für eure antworten,interssiert mich auch.
:-D :-D capo

Mirco 15. Jul 2006 18:12

Re: Anstatt ID den Namen verwenden?
 
ich verwende das nun so

Delphi-Quellcode:
function EnumProc(StHandle: HWND; lines: TStrings): boolean; stdcall;
const
  MAXLENGTH: Integer = 200;
var
buffer, desc: array[0..MAXLENGTH - 1]; of char;
begin
   GetClassname(StHandle, buffer, MAXLENGTH + 1);
  GetWindowText(StHandle, desc, MAXLENGTH);
  lines.add(format('ID: %d, Class: %s, Text: %s', [GetDlgCtrlID(StHandle), buffer, desc]));
  EnumChildWindows(StHandle, @EnumProc, Integer(Lines));
  Result := true;
end;
bekomme eine Fehlermeldung:
Zitat:

[Fehler] Unit1.pas(182): Konstantenausdruck erwartet
:wall:

grüße, Mirco

Mirco 16. Jul 2006 23:37

Re: Anstatt ID den Namen verwenden?
 
Hallo,
kann mal jemand was dazu sagen, wäre echt schöööön.
Grüsse
Mirco

Hawkeye219 16. Jul 2006 23:54

Re: Anstatt ID den Namen verwenden?
 
Hallo Mirco,

die Syntaxfehler kannst du so beheben:

Delphi-Quellcode:
function EnumProc(StHandle: HWND; lines: TStrings): boolean; stdcall;
const
  MAXLENGTH = 200; // <-- korrigiert
var
buffer, desc: array[0..MAXLENGTH - 1] of char; // <-- korrigiert
begin
   GetClassname(StHandle, buffer, MAXLENGTH + 1);
  GetWindowText(StHandle, desc, MAXLENGTH);
  lines.add(format('ID: %d, Class: %s, Text: %s', [GetDlgCtrlID(StHandle), buffer, desc]));
  EnumChildWindows(StHandle, @EnumProc, Integer(Lines));
  Result := true;
end;
Statische Arrays kann man nicht mit einer initialisierten Variablen dimensionieren. Das überflüssige Semikolon war wohl nur ein Schreibfehler.

Gruß Hawkeye

Mirco 30. Jul 2006 19:33

Re: Anstatt ID den Namen verwenden?
 
Hallo und vielen Dank.
Grüsse Mirco


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:46 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz