AGB  ·  Datenschutz  ·  Impressum  







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

EnumPrinters schlägt fehl

Ein Thema von Luckie · begonnen am 5. Jun 2006 · letzter Beitrag vom 6. Jun 2006
 
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: EnumPrinters schlägt fehl

  Alt 6. Jun 2006, 15:08
Sie IST beantwortet.

@Mackhack: Die Prozedur war noch nicht fertig. Wenn du, wie Christian hApp durch null ersetzte, siehst du immer eine Messagebox mit dem gefundenen Drucker. Hier der fertige Code:

Delphi-Quellcode:
TPrinterCallback = function(Printername: string): Boolean; stdcall;

// ...
// ...
// ...

function PrinterCallback(PrinterName: string): Boolean; stdcall;
begin
  SendDlgItemMessage(hApp, IDC_CB_PRINTERS, CB_ADDSTRING, 0, Integer(@Printername[1]));
  result := True;
end;

procedure GetPrinters(Callback: TPrinterCallback);
var
  dwNeeded : DWORD;
  dwReturn : DWORD;
  pinfo4 : PPrinterInfo4;
  pWork : PPrinterInfo4;
  i : Integer;
  s : string;
begin
  dwNeeded := 0;
  dwReturn := 0;
  EnumPrinters(PRINTER_ENUM_LOCAL, nil, 4, nil, 0, dwNeeded, dwReturn);
  GetMem(pinfo4, dwNeeded);
  try
    if EnumPrinters(PRINTER_ENUM_LOCAL, nil, 4, pinfo4, dwNeeded, dwNeeded, dwReturn) then
    begin
      pWork := pinfo4;
      for i := 0 to dwReturn - 1 do
      begin
        s := string(pWork.pPrinterName);
        if not Callback(s) then
          break;
        Inc(pWork);
      end;
    end
    else
      MessageBox(hApp, PChar(SysErrorMessage(GetLastError)), '', 0);
  finally
    FreeMem(pinfo4);
  end;
end;
Da ich das ganze ohne VCL läuft, ich daher keine StringListen zur Verfügung habe und ich auch das ganze nicht in eine Klasse gekapselt habe und somit keine Ereignisse habe, nutze ich die Funktionalität einer Callback Funktion. Du musst also entsprechend die Callback Funktion anpassen, wenn du es so nutzen willst. Ich würde es aber so umschreiben, dass entweder eine Stringliste mit den Druckern zurückgegeben wird oder aber es in eine Klasse kapseln und bei jedem Drucker ein Ereigniss auslösen oder so.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
 


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 21:50 Uhr.
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-2025 by Thomas Breitkreuz