Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Einem Label (mit SS_BITMAP) eine tBitmap-Variable zuweisen? (https://www.delphipraxis.net/27114-einem-label-mit-ss_bitmap-eine-tbitmap-variable-zuweisen.html)

graphicar 4. Aug 2004 15:01


Einem Label (mit SS_BITMAP) eine tBitmap-Variable zuweisen?
 
Schönen sonnigen Tag euch. :)

Ich würde gerne folgende Erweiterung bewerkstelligen:

Vorher:

Habe ein Label mit u.a. dem Parameter "SS_BITMAP", welcher per Kombination
von einer Bildressource und der SendMessage-Funktion, zu einem funktionierenden
"Speedbutton" umfungiert wurde. Jegliche Routinen und Nachrichteninteraktionen
klappen auch zufriedenstellend.


Delphi-Quellcode:
(*******************************************)
(*     Hier ein Stückchen Beispielcode.   *)
(* Soweit klappt der Quellcode einwandfrei,*)
(*        ich habe keine Probleme.        *)
(*******************************************)

const
  IDC_Beispiel_Label = 123;
var
  Beispiel_Label    : DWord;
  Bitmap_handle     : HBITMAP;

[...]

  (* Erstellung eines Labels, mit einem Bildparameter. *)
  Beispiel_Label    := CreateWindowEx ( 0,
                                         'STATIC',
                                         '',
                                         WS_VISIBLE or WS_CHILD or SS_BITMAP or SS_REALSIZEIMAGE,
                                         0,
                                         0,
                                         200,
                                         200,
                                         FormMain.hWnd,
                                         IDC_Beispiel_Label,
                                         hInstance,
                                         nil
                                       );

  (* Das Handle (hier: Bitmap_handle) hat nun das Ressourcebild am Anker. *)
  Bitmap_handle := LoadBitmap( hInstance, MAKEINTRESOURCE(180));    

  (* Dem Label wird per Handle das Bild zugewiesen. *)
  SendMessage(Beispiel_Label,STM_SETIMAGE,IMAGE_BITMAP,Bitmap_handle);

[...]
Mein neuer Ansatz/mein Problem:

Ich würde gerne diesem Button, nicht direkt das
Ressourcebild zuweisen, sondern eine Variable von tBitmap.

Sinn dieser Idee:

Ich bastele mir ein schwarzes Rechteck (0,0,100,100) und setze dort
mein Ressourcebild(width=50,height=50) an der Stelle "left := 25" und
"top := 25" ein. Danach wird die tBitmap-Variable an meinen Button
gesendet. Ich habe jetzt schon einiges versucht und mir ewiges Zeugs
in Google durchgelesen. Weitergekommen bin ich leider nicht. :-|

Cii jaa©$me
graphicar

Muetze1 4. Aug 2004 22:08

Re: Einem Label (mit SS_BITMAP) eine tBitmap-Variable zuweis
 
Moin!

Ein TBitmap hat eine Property Handle die das Handle (HBITMAP) des Bitmaps zurück gibt.

MfG
Muetze1

graphicar 4. Aug 2004 23:07

Re: Einem Label (mit SS_BITMAP) eine tBitmap-Variable zuweis
 
Die Frage gilt weiterhin als unbeantwortet.

Danke für deine Antwort, sie bringt mir nur leider nichts.
In der exakten Welt der WinApi-Programmierung existiert
tBitmap nur als einfacher Record, welcher nicht das von
mir gewünschte Feldelement beinhaltet.

Delphi-Quellcode:
{$EXTERNALSYM tagBITMAP}
  tagBITMAP = packed record
    bmType: Longint;
    bmWidth: Longint;
    bmHeight: Longint;
    bmWidthBytes: Longint;
    bmPlanes: Word;
    bmBitsPixel: Word;
    bmBits: Pointer;
  end;
  TBitmap = tagBITMAP;
  {$EXTERNALSYM BITMAP}
  BITMAP = tagBITMAP;
Die Delphibibliothek-Graphics beinhaltet eine genormete
Klassenstruktur, welche u.a. das benannte Attribiut .handle
offenlegt. Danke für die Hilfe, doch das ist hier das Win32Api-Board.

Kann wer etwas mit dem record anfangen? Ist da vielleicht irgendwo
ein handle versteckt und ich bin so blauäugig und sehe es nicht? :-|

Cii jaa©$me
graphicar

Muetze1 5. Aug 2004 07:30

Re: Einem Label (mit SS_BITMAP) eine tBitmap-Variable zuweis
 
Moin!

1. Unabhängig ob es nun das WinAPI Board ist - du kannst doch trotzdem ein Graphics.TBitmap nutzen (wollen).
2. Diese Windows.TBitmap Struktur beinhaltet doch nicht das Handle - wie du schon festgestellt hast. Diese Struktur gibst du im Normalfall beim anlegen eines neuen Bitmap schon gefüllt mit an oder du besorgst sie dir für ein vorhandenes HBITMAP Handle über GetObject().

3. Ich kapier bis heute nicht was du willst.

MfG
Muetze1

graphicar 5. Aug 2004 08:47

Re: Einem Label (mit SS_BITMAP) eine tBitmap-Variable zuweis
 
Nee, du hast schon recht. So löse ich es auch bisher. Doch dies ist
nicht der der Weg, wie ich ihn mir dachte. Meine Exe-Datei gewinnt
(meines Erachtens: ) "unnötig" an Dateigröße, durch die Delphibilbiotheks-
einbindung der Graphics.pas (und dazu noch der Classes.pas).

Sinn der nonVCL-Programmierung war ja die Vermeidung der Delphi-
Standardbibliotheken und das Augenmerk auf die Dateigröße.

Es kann nicht sein, dass ich von einer 16 KB auf eine 86 KB-Anwendung
komme, nur da ich ein simples Bild zeichnen will. Habe gestern angefangen
die Graphics-Delphibibliothek auf meine Bedürfnisse umzubasteln. Bin nun
bei einer 64 KB-Anwendung und fange heute (oder morgen) mit der Classes.pas an.

Mein jetzigen Projekt hat 23 KB Spielraum, welcher durch die Nutzung
der Delphi-Bibliothek Graphics auf gut 39 Kb wächst - sinnlos wie ich
finde. Ich bekomme die Datei kleiner und wenn ich noch zehn weitere
Delphibibliotheken dafür umschreiben muss.

Ich bin vernarrt auf die Möglichkeit kleine Exen
zu schreiben, bitte verzeihe mir diese Passion.

Cii jaa©$me
graphicar

graphicar 6. Aug 2004 02:00

Die Frage gilt fortan als gelöst.
 
Die Frage gilt fortan als gelöst.

Habe erfolgreich gegen meinen inneren Schweinenhund die Oberhand
gewonnen und die Graphics-Standardbibliothek durch den Fleischwolf gejagt.

Mein Fazit:

Exe von 86,5 auf 23,0 KB runtergeschraubt. Eine Exa^10-Menge "sinnlos"
Zeit verschwendet und die Einsicht, dass ich doch recht hatte.
Es lebe nonVCL. :)

Cii jaa©$me
graphicar

:: member of Aitiba


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:17 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