AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

E2003 Undefinierter Bezeichner: Form1

Ein Thema von ObLtpatriz · begonnen am 11. Mai 2006 · letzter Beitrag vom 11. Mai 2006
Antwort Antwort
ObLtpatriz

Registriert seit: 10. Mai 2006
Ort: Locarno /TI Schweiz
21 Beiträge
 
Delphi 2005 Personal
 
#1

E2003 Undefinierter Bezeichner: Form1

  Alt 11. Mai 2006, 16:44
Moin

Ich habe da ein problem bei meinem projekt:

Ich Möchte die CPU auslastung anzeigen lassen, aber ich kriege ne fehlermeldung für diesem bereich

Delphi-Quellcode:
      // Show Percentage
      Form1.Label1.Caption := FormatFloat('CPU Usage: 0.0 %',dbIdleTime);
Die Fehlermeldung ist E2003 Undefinierter Bezeichner: Form1

Auslösen will ich das so
Delphi-Quellcode:
procedure TWin2kAppForm.Button11Click(Sender: TObject);
  begin
  GetCPUUsage
end;

was habe ich falsch gemacht öder übersehen,sollte ich den ganzen quellcode(692 zeilen) kopieren müssen schreibts einfach rein

Verwendet habe ich diesen quellcode http://www.swissdelphicenter.ch/de/showcode.php?id=969

Mfg
patrick kurt
patrick
  Mit Zitat antworten Zitat
Benutzerbild von FBrust
FBrust

Registriert seit: 4. Okt 2002
Ort: Saarbrücken
654 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: E2003 Undefinierter Bezeichner: Form1

  Alt 11. Mai 2006, 16:46
Hi,

liegt Dein Label in "Form1" oder in "TWin2kAppForm"?


Gruß
Frank
"Ich habe Dinge gesehen, die ihr Menschen niemals glauben würdet. Gigantische Schiffe, die brannten, draußen vor der Schulter des Orion" - Roy Batty
  Mit Zitat antworten Zitat
ObLtpatriz

Registriert seit: 10. Mai 2006
Ort: Locarno /TI Schweiz
21 Beiträge
 
Delphi 2005 Personal
 
#3

Re: E2003 Undefinierter Bezeichner: Form1

  Alt 11. Mai 2006, 16:51
In TWin2kAppForm
patrick
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: E2003 Undefinierter Bezeichner: Form1

  Alt 11. Mai 2006, 16:52
Herzlich willkommen,

dann musst du es auch so aufrufen:

Win2kAppForm.Label1. ... Immer den Controlnamen angeben (Eigenschaft: Name).
  Mit Zitat antworten Zitat
ObLtpatriz

Registriert seit: 10. Mai 2006
Ort: Locarno /TI Schweiz
21 Beiträge
 
Delphi 2005 Personal
 
#5

Re: E2003 Undefinierter Bezeichner: Form1

  Alt 11. Mai 2006, 17:09
hm
habe es jetzt inWin2kAppForm.Label1. ... geändert nun bekomme ich dieses Fehler

E2096 Methodenbezeicher erwartet
Angehängte Grafiken
Dateityp: bmp mein_projekt_ii_563.bmp (518,7 KB, 21x aufgerufen)
Angehängte Dateien
Dateityp: pas w2kmain_184.pas (14,1 KB, 15x aufgerufen)
patrick
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: E2003 Undefinierter Bezeichner: Form1

  Alt 11. Mai 2006, 20:18
Wenn der Aufruf in einer Methode der selben Form geschieht solltest du den namen der Form weglassen, es reicht also Label1.Caption := ... Wo soll der Code hin (welche Funktion, Methode) Ich habe das Codekonstrkt in deinem Sourcecode nicht gefunden.
Markus Kinzler
  Mit Zitat antworten Zitat
ObLtpatriz

Registriert seit: 10. Mai 2006
Ort: Locarno /TI Schweiz
21 Beiträge
 
Delphi 2005 Personal
 
#7

Re: E2003 Undefinierter Bezeichner: Form1

  Alt 11. Mai 2006, 21:26
Also in Diesem Quellcode hatte ich das problem
Delphi-Quellcode:
const
  SystemBasicInformation = 0;
  SystemPerformanceInformation = 2;
  SystemTimeInformation = 3;

type
  TPDWord = ^DWORD;

  TSystem_Basic_Information = packed record
    dwUnknown1: DWORD;
    uKeMaximumIncrement: ULONG;
    uPageSize: ULONG;
    uMmNumberOfPhysicalPages: ULONG;
    uMmLowestPhysicalPage: ULONG;
    uMmHighestPhysicalPage: ULONG;
    uAllocationGranularity: ULONG;
    pLowestUserAddress: Pointer;
    pMmHighestUserAddress: Pointer;
    uKeActiveProcessors: ULONG;
    bKeNumberProcessors: byte;
    bUnknown2: byte;
    wUnknown3: word;
  end;

type
  TSystem_Performance_Information = packed record
    liIdleTime: LARGE_INTEGER; {LARGE_INTEGER}
    dwSpare: array[0..75] of DWORD;
  end;

type
  TSystem_Time_Information = packed record
    liKeBootTime: LARGE_INTEGER;
    liKeSystemTime: LARGE_INTEGER;
    liExpTimeZoneBias: LARGE_INTEGER;
    uCurrentTimeZoneId: ULONG;
    dwReserved: DWORD;
  end;

var
  NtQuerySystemInformation: function(infoClass: DWORD;
    buffer: Pointer;
    bufSize: DWORD;
    returnSize: TPDword): DWORD; stdcall = nil;


  liOldIdleTime: LARGE_INTEGER = ();
  liOldSystemTime: LARGE_INTEGER = ();

function Li2Double(x: LARGE_INTEGER): Double;
begin
  Result := x.HighPart * 4.294967296E9 + x.LowPart
end;

procedure GetCPUUsage;
var
  SysBaseInfo: TSystem_Basic_Information;
  SysPerfInfo: TSystem_Performance_Information;
  SysTimeInfo: TSystem_Time_Information;
  status: Longint; {long}
  dbSystemTime: Double;
  dbIdleTime: Double;

  bLoopAborted : boolean;

begin
  if @NtQuerySystemInformation = nil then
    NtQuerySystemInformation := GetProcAddress(GetModuleHandle('ntdll.dll'),
      'NtQuerySystemInformation');

  // get number of processors in the system

  status := NtQuerySystemInformation(SystemBasicInformation, @SysBaseInfo, SizeOf(SysBaseInfo), nil);
  if status <> 0 then Exit;

  // Show some information
  with SysBaseInfo do
  begin
      ShowMessage(
      Format('uKeMaximumIncrement: %d'#13'uPageSize: %d'#13+
      'uMmNumberOfPhysicalPages: %d'+#13+'uMmLowestPhysicalPage: %d'+#13+
      'uMmHighestPhysicalPage: %d'+#13+'uAllocationGranularity: %d'#13+
      'uKeActiveProcessors: %d'#13'bKeNumberProcessors: %d',
      [uKeMaximumIncrement, uPageSize, uMmNumberOfPhysicalPages,
      uMmLowestPhysicalPage, uMmHighestPhysicalPage, uAllocationGranularity,
      uKeActiveProcessors, bKeNumberProcessors]));
  end;


  bLoopAborted := False;

  while not bLoopAborted do
  begin

    // get new system time
    status := NtQuerySystemInformation(SystemTimeInformation, @SysTimeInfo, SizeOf(SysTimeInfo), 0);
    if status <> 0 then Exit;

    // get new CPU's idle time
    status := NtQuerySystemInformation(SystemPerformanceInformation, @SysPerfInfo, SizeOf(SysPerfInfo), nil);
    if status <> 0 then Exit;

    // if it's a first call - skip it
    if (liOldIdleTime.QuadPart <> 0) then
    begin

      // CurrentValue = NewValue - OldValue
      dbIdleTime := Li2Double(SysPerfInfo.liIdleTime) - Li2Double(liOldIdleTime);
      dbSystemTime := Li2Double(SysTimeInfo.liKeSystemTime) - Li2Double(liOldSystemTime);

      // CurrentCpuIdle = IdleTime / SystemTime
      dbIdleTime := dbIdleTime / dbSystemTime;

      // CurrentCpuUsage% = 100 - (CurrentCpuIdle * 100) / NumberOfProcessors
      dbIdleTime := 100.0 - dbIdleTime * 100.0 / SysBaseInfo.bKeNumberProcessors + 0.5;

      // Show Percentage
      Form1.Label1.Caption := FormatFloat('CPU Usage: 0.0 %',dbIdleTime); // HIER WAR DAS PROBLEM!!!!

      Application.ProcessMessages;

      // Abort if user pressed ESC or Application is terminated
      bLoopAborted := (GetKeyState(VK_ESCAPE) and 128 = 128) or Application.Terminated;

    end;

    // store new CPU's idle and system time
    liOldIdleTime := SysPerfInfo.liIdleTime;
    liOldSystemTime := SysTimeInfo.liKeSystemTime;

    // wait one second
    Sleep(1000);
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  GetCPUUsage
end;
[code]
Habe Ihn aber nun durch diesen Quellcode ersetzt
Delphi-Quellcode:

var
  Form: TForm;
  nOldIdleTime: Int64 = 0;
  nOldSystemTime : INT64 = 0;
  nNewCPUTime : ULONG = 0;

const
  SYS_BASIC_INFO = 0;
  SYS_PERFORMANCE_INFO = 2;
  SYS_TIME_INFO = 3;

type
  SYSTEM_BASIC_INFORMATION = packed record
    dwUnknown1 : DWORD;
    uKeMaximumIncrement : ULONG;
    uPageSize : ULONG;
    uMmNumberOfPhysicalPages: ULONG;
    uMmLowestPhysicalPage : ULONG;
    uMmHighestPhysicalPage : ULONG;
    uAllocationGranularity : ULONG;
    pLowestUserAddress : POINTER;
    pMmHighestUserAddress : POINTER;
    uKeActiveProcessors : POINTER;
    bKeNumberProcessors : BYTE;
    bUnknown2 : BYTE;
    wUnknown3 : WORD;
  end;

  SYSTEM_PERFORMANCE_INFORMATION = packed record
    nIdleTime : INT64;
    dwSpare : array[0..75]of DWORD;
  end;

  SYSTEM_TIME_INFORMATION = packed record
    nKeBootTime : INT64;
    nKeSystemTime : INT64;
    nExpTimeZoneBias : INT64;
    uCurrentTimeZoneId : ULONG;
    dwReserved : DWORD;
  end;

  function NTQuerySystemInformation(SystemInformationClass: Longint;
                                    SystemInformation: Pointer;
                                    SystemInformationLength: Longint;
                                    ReturnLength: Longint): Longint; stdcall;
                                    external 'ntdll.dllname 'NtQuerySystemInformation';




function GetCPUUsage: Integer;
var
  spi : SYSTEM_PERFORMANCE_INFORMATION;
  sti : SYSTEM_TIME_INFORMATION;
  sbi : SYSTEM_BASIC_INFORMATION;
begin
  result := 0;
  if (NTQuerySystemInformation(SYS_BASIC_INFO, @sbi, sizeof(SYSTEM_BASIC_INFORMATION), 0) = NO_ERROR) then
  begin
    if (NTQuerySystemInformation(SYS_TIME_INFO, @sti, sizeof(SYSTEM_TIME_INFORMATION), 0) = NO_ERROR) then
    if (NTQuerySystemInformation(SYS_PERFORMANCE_INFO, @spi, sizeof(SYSTEM_PERFORMANCE_INFORMATION), 0)= NO_ERROR) then
    begin
      if (nOldIdleTime <> 0) then
      begin
        nNewCPUTime:= trunc(100-((spi.nIdleTime-nOldIdleTime)/(sti.nKeSystemTime-nOldSystemTime)*100)/sbi.bKeNumberProcessors+0.5);
        if (nNewCPUTime <> nOldIdleTime) then
        begin
          Result := nNewCPUTIME;
        end;
      end;
      nOldIdleTime := spi.nIdleTime;
      nOldSystemTime := sti.nKeSystemTime;
    end;
  end;
end;




procedure TWin2kAppForm.FormClick(Sender: TObject);
begin
  Label19.Caption := IntToStr(GetCPUUsage());
end;

procedure TWin2kAppForm.Button11Click(Sender: TObject);
begin
  Label19.Caption := IntToStr(GetCPUUsage());
end;

Bin mir nicht Sicher ob ich das ideal gelöst habe aber es funktioniert
Danke an alle die versucht haben zu helfen

das einzige was mir jetzt noch fehlt ist das die CPU Auslastung auch in der ProgressBar angezeigt wird habe da aber noch nicht die passende Variable gefunden.


mfg
patrick
Am 08.05.2006 gestartet mit Delphi
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz