AGB  ·  Datenschutz  ·  Impressum  







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

TBitmap in Konsolen Anwendung

Ein Thema von bernhard_LA · begonnen am 9. Jun 2018 · letzter Beitrag vom 12. Jun 2018
Antwort Antwort
Seite 1 von 3  1 23      
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.136 Beiträge
 
Delphi 11 Alexandria
 
#1

TBitmap in Konsolen Anwendung

  Alt 9. Jun 2018, 15:23
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 ??????
  Mit Zitat antworten Zitat
Benutzerbild von timog
timog

Registriert seit: 26. Sep 2006
Ort: Landkreis Oldenburg (Oldb)
117 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: TBitmap in Konsolen Anwendung

  Alt 9. Jun 2018, 17:11
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.
Timo
Real Programmers are surprised when the odometers in their cars don't turn from 99999 to 9999A.
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.530 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: TBitmap in Konsolen Anwendung

  Alt 9. Jun 2018, 18:03
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.

Geändert von Harry Stahl ( 9. Jun 2018 um 18:07 Uhr)
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.050 Beiträge
 
Delphi 2009 Professional
 
#4

AW: TBitmap in Konsolen Anwendung

  Alt 9. Jun 2018, 18:59
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?
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: TBitmap in Konsolen Anwendung

  Alt 9. Jun 2018, 19:30
Zitat:
Und was macht eigentlich eine Frage zu Linux im Win32-Forum?
Du kannst es ja ignorieren wenn es dir Unbehagen bereitet.

gruss
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: TBitmap in Konsolen Anwendung

  Alt 9. Jun 2018, 20:04
Zitat:
Und was macht eigentlich eine Frage zu Linux im Win32-Forum?
Du kannst es ja ignorieren wenn es dir Unbehagen bereitet.

gruss
Ist doch eine berechtigte Frage.
Markus Kinzler
  Mit Zitat antworten Zitat
9. Jun 2018, 20:05
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.
EWeiss
(Gast)

n/a Beiträge
 
#8

AW: TBitmap in Konsolen Anwendung

  Alt 9. Jun 2018, 20:18
Zitat:
Und was macht eigentlich eine Frage zu Linux im Win32-Forum?
Du kannst es ja ignorieren wenn es dir Unbehagen bereitet.

gruss
Ist doch eine berechtigte Frage.
Nur wo sollen die User denn sonst posten?
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

Geändert von EWeiss ( 9. Jun 2018 um 20:36 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: TBitmap in Konsolen Anwendung

  Alt 9. Jun 2018, 21:40
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.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.136 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: TBitmap in Konsolen Anwendung

  Alt 10. Jun 2018, 01:36
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

Geändert von bernhard_LA (10. Jun 2018 um 01:39 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 12:28 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