Thema: SysInfo

Einzelnen Beitrag anzeigen

MathiasSimmack
(Gast)

n/a Beiträge
 
#6
  Alt 27. Jan 2003, 11:17
So, Chakotay: 23,5k ist das Ergebnis. Das hier ist von den Units übrig:
Delphi-Quellcode:
uses
  Windows, Messages, JwaLm, CommCtrl;
Dadurch musst du natürlich auf typische SysUtils-Funktionen verzichten, etwa
Code:
[b]function[/b] IntToStr([b]const[/b] i: integer): [b]string[/b];
[b]begin[/b]
  Str(i,Result);
[b]end[/b];

[b]function[/b] StrLen([b]const[/b] Str: PChar): Cardinal; [b]assembler[/b];
[b]asm[/b]
  MOV    EDX,EDI
  MOV    EDI,EAX
  MOV    ECX,0FFFFFFFFH
  XOR    AL,AL
  REPNE  SCASB
  MOV    EAX,0FFFFFFFEH
  SUB    EAX,ECX
  MOV    EDI,EDX
[b]end[/b];
Für die Zeitanzeige des Logins habe ich mich im Code von Luckie bedient. Frag ihn mal, ob er dir den entsprechenden Part zukommen lässt. (@Luckie: "Int32x32To64" und "SecsToDateTime".) Dafür fiel die "UnixToDateTime" komplett raus, und die entsprechende Anweisung sähe mit Luckies Code dann so aus:
Delphi-Quellcode:
if aCurUserBuffer.usri11_last_logon = 0 then
  TempS := 'Letzer LogIn: (nie)'
else
  TempS := SecsToDateTime(aCurUserBuffer.usri11_last_logon);
Dann -anfangs!- konnte ich dein Programm nicht mal kompilieren. Der Fehler lag hier:
Code:
[b]if[/b] NetUserEnum([b]nil[/b], 11, FILTER_NORMAL_ACCOUNT, [color=#ff0000]@aUserBuffer[/color],
  MAX_PREFERRED_LENGTH, dwEntriesRead, dwEntriesRead, ...
Nachdem ich das rot markierte durch "pointer(aUserBuffer)" ersetzt habe (an anderer Stelle wird das noch mal bemängelt!), ging´s dann. Vielleicht solltest du deinen diesbezüglichen FAQ-Eintrag ausbessern?!

Tja, und zu guter Letzt ein kleiner Bugfix, weil der untere Teil des Treeview nicht zu sehen ist, wenn man ein paar Knoten aufklappt. Also, dies hier steckt im "WM_CREATE":
Delphi-Quellcode:
{ ... }

GetWindowRect(hwndTitleLab,r1);
GetClientRect(hWnd,r2);

hWndTV := CreateWindowEx(WS_EX_CLIENTEDGE, 'SysTreeView32', 'Tree View',
  WS_VISIBLE or WS_CHILD or TVS_HASBUTTONS or TVS_HASLINES or TVS_LINESATROOT,
  0, 50, { --> } r2.Right - r2.Left,
  { --> } (r2.Bottom - r2.Top) - (r1.Bottom - r1.Top),
  hwnd, IDC_LISTVIEW, hInstance,
  nil);

  { ... }
"r1" und "r2" sind zwei TRect-Variablen. Die holen die Größe des Fensters und des Banners und setzen abhängig davon die korrekte TV-Größe, so dass der horizontale Scrollbalken dann auch komplett zu sehen ist.


So, wenn ich jetzt nichts vergessen habe, dann solltest du dein Programm auch "klein kriegen".
Und dann kann man´s als NonVCL durchgehen lassen.

Gruß.


PS: Als humorvoller Mensch, dessen Interesse insbesondere den kleinen Doppeldeutigkeiten des Alltags gilt, vergebe ich hiermit den Preis für den Variablennamen des Monats:
Delphi-Quellcode:
var
  fTitFont: HFONT;
  Mit Zitat antworten Zitat