Übersetzungsfrage Delphi -> Builder



  • Hallo,
    könnte mir jemand sagen, wie ich die in Delphi geschriebenen unten stehenden Zeilen in C++ übertragen kann? Vor allem die Variablendeklarationen erzeugen bei mir immer wieder Fehlermeldungen, so als wenn es z. B. PDevMode nicht geben würde. Auch das ^. bereitet mir Schwierigkeiten.

    Kriege das leider einfach nicht hin. 😞

    Hier der Code:

    procedure TForm1.Button1Click(Sender: TObject);
    var
        device,driver,port : array [0..255] of Char;
    	hdmode             : THandle;
    	pdmode             : PDevMode;
    begin
    	Printer.PrinterIndex := -1;
        Printer.GetPrinter(device, driver, port, hdmode);
    	if hdmode <> 0 then begin
    		pdmode := GlobalLock(hdmode);
    		if pdmode <> nil then begin
    			pdmode^.dmFields := pdmode^.dmFields or dm_PaperSize;
    			//Werte gültig für HP LaserJet 2100 PCL6. Schacht 1 = 260
    			Printer.Orientation := poPortrait;
    			pDMode^.dmFields := pDMode^.dmFields or dm_PaperSize;
    			pDmode^.dmPaperSize := dmPaper_A4;
    			pDMode^.dmDefaultSource := 260;
    			Printer().BeginDoc();
    			Printer().Canvas.TextOut(100, 100, "Hallo");
                Printer().EndDoc();
            end;
    		GlobalUnlock(hdmode);
    	end;
    end;
    

    Ich danke für jede Antwort!!!



  • Hallo,

    PDevMode ist halt ein irgendwo definierter Typ (wahrscheinlich Pointer auf DevMode). Schau doch mal nach ob du die Deklaration dafür findest. Es scheint mir auf jeden Fall kein Standard zu sein. Das ^ ist die Pascal-Variante einer Pointer-Dereferenzierung.
    also mal als Beispiel

    pDMode^.dmFields := pDMode^.dmFields or dm_PaperSize;
    

    müsste wohl so aussehen

    pDMode->dmFields = pDMode->dmFields | dm_PaperSize;
    

    [edit]
    Ich hab noch etwas nachgeschaut und den Typen DEVMODE in der WinAPI gefunden. Ich vermute mal das PDevMode ein typedef auf einen Pointer auf DEVMODE ist.
    [\edit]

    Ciao



  • http://www.marquardtnet.info/cecke/quickies.1/1_quicky_30.html

    Könnte als Grundlage bessere Dienste leisten


Anmelden zum Antworten