Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TstringGrid Problem (https://www.delphipraxis.net/84997-tstringgrid-problem.html)

donmarkus 24. Jan 2007 13:41


TstringGrid Problem
 
Hi,
ich habe jetzt eine Stunde lang nach einer lösung gesucht, aber nix gefunden/verstanden.
Ich habe ein Tstringgrid und möchte ein kleines Bildchen in eine Zelle reinsetzen..... geht das? Wenn ja WIE??
Wenn das nicht geht dann könnte ich das auch mit dem Zellenhintergrund umgehen. Ich weiß dass man den Hintergrund einer einzelnen Zelle mit ondrawcell verändern kann. Das habe ich aber auch nicht hinbekommen, da ich das nicht verstanden habe, was ich gecodet habe :P ....
Könnt ihr mir helfen? Mit einem kleinen Bildchen in einer zelle wäre es am einfachsten......
Mfg DonMarkus

smudo 24. Jan 2007 13:47

Re: TstringGrid Problem
 
Du kannst dazu die Objects-Eigenschaft verwenden. Schau mal in die Hilfe.

donmarkus 24. Jan 2007 13:53

Re: TstringGrid Problem
 
Ja das könnte gehen. Aber wie kann ich ein gif bildchen IN das Programm einbinden und dort dann aufrufen?

smudo 24. Jan 2007 15:38

Re: TstringGrid Problem
 
Einfach in eine Imagelist laden.

Hier gabs schon mal einen interessanten Thread dazu. So könnte das funktionieren:
Delphi-Quellcode:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var bm: TBitmap;
begin
  if Sender <> NIL then
  with Sender as TStringGrid do
  begin
    bm := TBitmap.Create;
    try
      ImageList1.GetBitmap(0, bm); //statt 0 müsste man hier einen entsprechenden Index angeben
      Canvas.Draw(Rect.Left + 5, Rect.Top + 5, bm);
    finally
      FreeAndNil(bm);
    end;
  end;
end;
Du musst die Images (keine Gifs, besser BMPs) zur Entwurfzeit in die Imagelist laden und im OnDrawCell die entsprechnde ID angeben.

Gruß René

donmarkus 24. Jan 2007 15:50

Re: TstringGrid Problem
 
Hallo! Danke für den Tipp. Genau das habe ich gesucht!
Ich verstehe nur noch 2 sachen im quelltext nicht:

<<if Sender <> NIL then
with Sender as TStringGrid do>>


<<Canvas.Draw(Rect.Left + 5, Rect.Top + 5, bm);
finally
FreeAndNil(bm); >>

Kannst du mir erklären was Delphi da genau macht und für was das gut ist?

Mfg Donmarkus

smudo 24. Jan 2007 15:57

Re: TstringGrid Problem
 
Na erstmal prüf ich, ob der Prozedur ein Sender übergeben wurde - bei manuellem Aufruf kann der fehlen, aber eigentlich kannste das auch weglassen.

Dann caste ich den Sender als TStringgrid, da Sender ja TObject ist.

mit Canvas.Draw wird das Bild gemalt

und finally gehört zum Create von bm, also
Delphi-Quellcode:
bm := TBitmap.Create; //Bitmap erstellen
try
...
finally
  FreeAndNil(bm);     //Zum Schluss Bitmap wieder freigeben
end;

donmarkus 24. Jan 2007 16:03

Re: TstringGrid Problem
 
ok gut danke!
Wo kann ich dann angeben in welche zelle er das Bild reinmachen soll?

und beim kompilieren kommt folgender fehler:

[Error] Unit1.pas(71): E2250 There is no overloaded version of 'Rect' that can be called with these arguments

DANKE!

Klaus01 24. Jan 2007 17:57

Re: TstringGrid Problem
 
Zitat:

Zitat von donmarkus
o
[Error] Unit1.pas(71): E2250 There is no overloaded version of 'Rect' that can be called with these arguments

DANKE!

Du solltest um TRect nutzen zu können die Unit Types einbinden.

Grüße
Klaus

donmarkus 24. Jan 2007 18:27

Re: TstringGrid Problem
 
aha? und wie mache ich das?

Klaus01 24. Jan 2007 18:29

Re: TstringGrid Problem
 
Zitat:

Zitat von donmarkus
aha? und wie mache ich das?

Unter uses im Interface Teil Types eintragen.

Grüße
Klaus

marabu 24. Jan 2007 18:40

Re: TstringGrid Problem
 
Hallo Klaus,

der Typ TRect wird schon gefunden, da die Unit Windows eingebunden ist.

Interessant wäre den fehlerhaften Aufruf von Rect() in Zeile 71 (wie vom Compiler gemeldet) zu sehen.

Freundliche Grüße

SaFu 24. Jan 2007 18:42

Re: TstringGrid Problem
 
Liste der Anhänge anzeigen (Anzahl: 1)
vielleicht hilft das

donmarkus 24. Jan 2007 18:49

Re: TstringGrid Problem
 
also habe jetzt "Types" eingebuden. Nun kommt eine andere Fehlermeldung: "not enough parameters" ->

Canvas.Draw(Rect.Left + 5, Rect.Top + 5, bm);

Wisst ihr weiter?

marabu 24. Jan 2007 19:04

Re: TstringGrid Problem
 
Hallo Markus,

die Zeile für sich genommen ist in Ordnung. Du musst mal den Kontext (die Funktion oder Prozedur) zeigen. Markiere die fehlerhafte Zeile mit einem Zeilenendekommentar. Und zeige auch deine Uses-Klausel.

Freundliche Grüße

donmarkus 24. Jan 2007 19:33

Re: TstringGrid Problem
 
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls, ImgList,Types, Menus;

Code:
procedure TMines.Button1Click(Sender: TObject);
var bm: TBitmap;
begin
  if Sender <> NIL then
  with Sender as TStringGrid do
  begin
    bm := TBitmap.Create;
    try
      ImageList1.GetBitmap(0, bm);
      Canvas.Draw(Rect.Left + 5, Rect.Top + 5, bm);   //hier kommt die oben genannte fehlermeldung
    finally
      FreeAndNil(bm);
    end;
  end;
end;
wie gesagt will ich in eine Zelle ein kleines bildchen einfügen.Eine Imagelist habe ich erstellt.

marabu 24. Jan 2007 19:38

Re: TstringGrid Problem
 
Mensch Markus,

hast du nicht bemerkt, dass dir René in Beitrag #4 den Code für das Ereignis OnDrawCell() gezeigt hat? Du kannst diesen Code nicht einfach in die ButtonClick() Prozedur einbauen.

Freundliche Grüße

smudo 25. Jan 2007 10:18

Re: TstringGrid Problem
 
Hallo donmarkus,

ich hoffe, dass klingt jetzt nicht oberlehrerhaft.
Aber wie wärs, erstmal mit etwas einfachem anzufangen.
Ich meine, das Ondraw-Ereignis einer Componente abzufangen und mit Canvas zu zeichnen ist ja nicht grad das kleine 1x1


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