![]() |
TBitmap in Konsolen Anwendung
Wir versuchen gerade der Umstellung einer größeren VCL Delphi Anwendung in einen Teil nur Delphi Consolen Code und dann die GUI - entweder in FMX oder LCL neu programmiert - um auf UNIX/LINUX Arbeiten zu können.
Die alte VCL Anwendung verwendet die unit vcl.Graphics und die Klasse TBitmap. Ich habe jetzt den Code 1:1 in eine Konsolenanwendung kopiert, leider bekomme ich eine nicht verständliche AC. ( bin schon mit FASTMM4, Madshi etc. am debuggen alles bisher ohne Erfolg) . der Code führt in der neuen Konsolenanwendung 4 von 5 Prozess-Schritte (incl. Bitmap Operationen) ohne Probleme aus, beim letzten Schritt kommt es zur AV. Da ich die Ergebnisse für jeden Schritt abspeichere, wird beim einem Neustart der Anwendung erkannt, daß die Schritt 1..4 schon ausgeführt wurde, jetzt werden die Ergebnisse von der Festplatte geladen und Schritt 5 ohne Probleme / Bugs /Fehler ausgeführt. (alles sehr unlogisch) Frage : kann es sein, daß vcl.Graphis bzw. die Klasse TBitmap nicht in einer Konsolenanwendung verwendet werden darf?? Erklärt dies mein Fehlerbild ?????? |
AW: TBitmap in Konsolen Anwendung
Schreibst Du denn eine VCLmoser FMX Konsolenanwendung? Hast Du es mal mit FMX.Graphics und dem FMX Bitmap probiert? Ohne Quellcode ist es sonst schwer nachzuvollziehen, was genau passiert.
|
AW: TBitmap in Konsolen Anwendung
Wenn Du mal in die Liste der unterstützten Units unter Linux nachsiehst, wirst Du die FMX.Graphis.pas (wo das TBitmap deklariert ist) nicht finden.
Also: Nein, keine Grafik in der Konsolenanwendung. Wenn Du mit Grafiken arbeiten möchtest, brauchst Du FMXLinux. Da wird dann nahezu jede FMX-Delphi-Standard-Unit unterstützt. |
AW: TBitmap in Konsolen Anwendung
Na ja, aber es geht doch insgesamt.
Ohne Quelltext bzw. die genaue Stelle, an der es hakt, ist diese Frage wahrscheinlich nicht beantwortbar. Und was macht eigentlich eine Frage zu Linux im Win32-Forum? |
AW: TBitmap in Konsolen Anwendung
Zitat:
gruss |
AW: TBitmap in Konsolen Anwendung
Zitat:
|
Dieses Thema wurde am "09. Jun 2018, 20:05 Uhr" von "mkinzler" aus dem Forum "Win32/Win64 API (native code)" in das Forum "Cross-Platform-Entwicklung" verschoben.
|
AW: TBitmap in Konsolen Anwendung
Zitat:
Wenn sie hier angemeldet sind auch wenn es ein Win32 Forum ist. Von daher sehe ich diese Frage als nicht berechtigt an zumal er vergleiche zu Delphi sucht. gruss |
AW: TBitmap in Konsolen Anwendung
Ich weiß nicht in wie fern das umsetzbar ist, unter Windows mit der Winapi kann man sich auch selbst eine bitmap-ähnliche Funktionsweise zusammen Schustern ohne auf die Graphics Unit zurückgreifen zu müssen, Moderator Luckie hat da echt guten Code auf Lager.
Hier ein Beispiel was ich so gefunden habe, aber wie gesagt, ob ein Linux oder ein Mac solche Api Funktionen anbietet ist mir fremd, da musst Du selbst mal suchen wie eine Mögliche Portierung aussehen könnte!
Delphi-Quellcode:
{******************************************************************************}
{ } { Demo Bitmap-Menü } { } { Copyright (c) 2001 Michael Puff } { www.luckie-online.de } { mpuff@luckie-online.de } { } {******************************************************************************} program bitmapmenu; {$R resource.res} uses Windows, Messages; const ClassName = 'WndClass'; AppName = 'Bitmap-Menü-Demo'; WindowWidth = 500; WindowHeight = 350; IDM_KUCKUCK = 1; IDM_LERCHE = 2; IDM_SPATZ = 3; var hMenu, hPopupMenu: Cardinal; { GetLastError } function DisplayErrorMsg(hWnd: THandle): DWORD; var szBuffer: array[0..255] of Char; begin FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, nil, GetLastError, 0, szBuffer, sizeof(szBuffer), nil); MessageBox(hWnd, szBuffer, 'Fehler', MB_ICONSTOP); result := GetLastError; end; procedure MenuBmp(idBmpStart: DWORD; dc: HDC; cntItems, ItemHeight: Byte; hWnd: Cardinal); var i: Integer; hBmp: HBITMAP; bmp: Windows.BITMAP; hdcBmp: HDC; begin for i := 0 to cntItems-1 do begin hBmp := LoadBitmap(hInstance, MAKEINTRESOURCE(idBmpStart+i)); GetObject(hBmp, sizeof(BITMAP), @bmp); hdcBmp := CreateCompatibleDC(dc); SelectObject(hdcBmp, hBmp); StretchBlt(dc, 2, ItemHeight*i+2, 15, 15, hdcBmp, 0, 0, bmp.bmWidth, bmp.bmHeight, SRCCOPY); end; ReleaseDC(hWnd, hdcBmp); DeleteObject(hBmp); end; function WndProc(hWnd: HWND; uMsg: UINT; wParam: wParam; lParam: LParam): lresult; stdcall; var mi : PMEASUREITEMSTRUCT; di : PDRAWITEMSTRUCT; begin Result := 0; case uMsg of WM_CREATE: begin hMenu := CreateMenu; hPopupMenu := CreateMenu; AppendMenu(hPopupMenu, MF_OWNERDRAW, IDM_KUCKUCK, '&Kuckuck'); AppendMenu(hPopupMenu, MF_OWNERDRAW, IDM_LERCHE, '&Lerche'); AppendMenu(hPopupMenu, MF_OWNERDRAW, IDM_SPATZ, '&Spatz'); AppendMenu(hMenu, MF_POPUP, hPopupMenu, '&Datei'); SetMenu(hWnd, hMenu); end; WM_MEASUREITEM: begin mi := PMEASUREITEMSTRUCT(lParam); case mi.CtlType of ODT_MENU: begin mi.itemWidth := 100; mi.itemHeight := 19; end end; end; WM_DRAWITEM: begin di := PDRAWITEMSTRUCT(lParam); case di.CtlType of ODT_MENU: begin if (di.itemState and ODS_SELECTED = ODS_SELECTED) then begin FillRect(di.hDC, di.rcItem, GetSysColorBrush(COLOR_HIGHLIGHT)); SetTextColor(di.hDC, GetSysColor(COLOR_HIGHLIGHTTEXT)); end else begin FillRect(di.hDC, di.rcItem, GetSysColorBrush(COLOR_BTNFACE)); SetTextColor(di.hDC, GetSysColor(COLOR_WINDOWTEXT)); end; SetBkMode(di.hDC, TRANSPARENT); di.rcItem.Left := di.rcItem.left + 30; DrawText(di.hDC, PChar(di.itemData), lstrlen(PChar(di.itemData)), di.rcItem, DT_SINGLELINE or DT_VCENTER); MenuBmp(101, di.hDC, 3, 19, hWnd); end; end; end; WM_COMMAND: begin if HiWord(wParam) = 0 then case LoWord(wParam) of IDM_KUCKUCK: SendMessage(hWnd, WM_CLOSE, 0,0 ); end; end; WM_DESTROY: PostQuitMessage(0); else Result := DefWindowProc(hWnd, uMsg, wParam, lParam); end; end; var wc: TWndClassEx = ( cbSize : SizeOf(TWndClassEx); Style : CS_HREDRAW or CS_VREDRAW; lpfnWndProc : @WndProc; cbClsExtra : 0; cbWndExtra : 0; hbrBackground : COLOR_APPWORKSPACE; lpszMenuName : nil; lpszClassName : ClassName; hIconSm : 0; ); msg: TMsg; begin wc.hInstance := hInstance; wc.hIcon := LoadIcon(0, IDI_APPLICATION); wc.hCursor := LoadCursor(0, IDC_ARROW); RegisterClassEx(wc); CreateWindowEx(0, ClassName, AppName, WS_CAPTION or WS_VISIBLE or WS_SYSMENU, Integer(CW_USEDEFAULT),Integer(CW_USEDEFAULT), WindowWidth, WindowHeight, 0, 0, hInstance, nil); while true do begin if not GetMessage(msg, 0, 0, 0) then break; begin TranslateMessage(msg); DispatchMessage(msg); end; end; ExitCode := msg.wParam; end. |
AW: TBitmap in Konsolen Anwendung
die erste Frage war eigentlich : kann ich einer Win - Konsolenanwendung eine TBitmap verwenden
die Portierung auf LINUX kommt erst später, wäre der zweite teil der Frage ; portiert soll nur die Konsolenanwendung werden, den Datentyp TBitmap hätte ich halt gerne (oder einen Ersatz) Anzeige der Bitmap ist nicht nötig , nur der Zugriff auf die Pixel und deren Modifikation |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:11 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