Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   teechartgrafik in groupbox speichern (https://www.delphipraxis.net/185209-teechartgrafik-groupbox-speichern.html)

Der schöne Günther 22. Mai 2015 13:37

AW: teechartgrafik in groupbox speichern
 
Liste der Anhänge anzeigen (Anzahl: 2)
Ich glaube, das meinte er auch nur eher als Witz. Aber wenn ich dich nicht falsch verstehe können wir uns ein "SaveToFile" doch so selber bauen, oder?

Delphi-Quellcode:
type
   TWinControlHelper = class helper for Vcl.Controls.TWinControl
      public
         procedure SaveToFile(const fileName: String); virtual;
   end;

procedure TWinControlHelper.SaveToFile(const fileName: String);
var
   DC:    HDC;
   bmp:   TBitmap;
begin
   DC := GetWindowDC(Handle);
   try
      bmp := TBitmap.Create();
      try
         bmp.SetSize(ClientWidth, ClientHeight);
         BitBlt(
            bmp.Canvas.Handle,
            0, 0, bmp.Width, bmp.Height,
            DC, 0, 0,
            WinApi.Windows.SRCCOPY
         );
         bmp.SaveToFile(fileName);
      finally
         bmp.Destroy();
      end;
   finally
      ReleaseDC(Handle, DC);
   end;
end;
Der Button2 sagt
Delphi-Quellcode:
procedure TForm15.Button2Click(Sender: TObject);
begin
   GroupBox1.SaveToFile('x:\myGroupbox.bmp);
end;
. Was dabei herauskommt siehst du im Anhang. Ist doch richtig so, oder?

bernerbaer 22. Mai 2015 13:42

AW: teechartgrafik in groupbox speichern
 
Na ja, so ab und zu wäre doch bei einigen Antworten doch ein kleines Smiley sinnvoll gewesen, oftmals nimmt man die Antworten sonst zu ernst.

Nun zur Frage und eine mögliche Lösung:

1. Bei der Groupbox ist Canvas (leider) nicht published, also müssen wir als erstes eine Ableitung der Groupbox erstellen und den Canvas als published definieren:

Delphi-Quellcode:
type TNewGroupBox = class(TGroupBox)
  public
    property Canvas;
  end;
2. Jetzt sollte das Speichern der Groupbox als Bild eigentlich keine Probleme mehr darstellen:

Delphi-Quellcode:

var
  Bitmap: TBitmap;
  Rect: TRect;
begin
   Rect.Left:= 0;
   Rect.Top:= 0;
   Rect.bottom:= groupbox1.Height;
   Rect.Right:= groupbox1.Width;
   Bitmap := TBitmap.Create;
   Bitmap.SetSize(Groupbox1.Width, Groupbox1.Height);
   Bitmap.Canvas.CopyRect(Rect,TNewGroupBox(groupbox1).Canvas, Rect);
   Bitmap.SaveToFile(filename); //irgendetwas.bmp

...
Bitmap.free;

mkinzler 22. Mai 2015 13:50

AW: teechartgrafik in groupbox speichern
 
Zitat:

Zitat von Hartfrid Krause (Beitrag 1302580)
Das sieht ja ganz gut aus, aber der Befehl PaintToCanvas wird bei mir nicht übernommen.

Delphi-Quellcode:
BitBlt(GroupBox1.Canvas.Handle, 0, 0, Bitmap.Width, Bitmap.Height, Bitmap.Canvas.Handle,
    0, 0, SrcCopy);

bernerbaer 22. Mai 2015 13:58

AW: teechartgrafik in groupbox speichern
 
Zitat:

Zitat von mkinzler (Beitrag 1302586)
Delphi-Quellcode:
BitBlt(GroupBox1.Canvas.Handle, 0, 0, Bitmap.Width, Bitmap.Height, Bitmap.Canvas.Handle,
    0, 0, SrcCopy);

Ab welcher Delphiversion ist das Canvas bei der Groupbox public?

Der schöne Günther 22. Mai 2015 14:33

AW: teechartgrafik in groupbox speichern
 
Ab keiner. Einfach Klassenhelfer machen (siehe oben) und gut ist ;-)

bernerbaer 22. Mai 2015 14:36

AW: teechartgrafik in groupbox speichern
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1302594)
Ab keiner. Einfach Klassenhelfer machen (siehe oben) und gut ist ;-)

Das habe ich ja in meinem Beispiel auch gemacht.

Aber: Eigentlich erwarte ich in einem Beispielcode eines Moderators schon entweder Code der funktioniert, oder der Hinweis, wie der Code zum funktionieren gebracht werden kann. So wie der Code da steht, wird jeder Anfänger verzweifeln, wenn er das Beispiel umsetzen möchte.

Perlsau 22. Mai 2015 14:52

AW: teechartgrafik in groupbox speichern
 
Offensichtliche Witze müssen also ab jetzt gekennzeichnet werden, Moderatoren haben gefälligst funktionierenen Code zu posten und du bist hier der Chef. Alles klar, Boß, dein Wunsch ist mir Befehl :P Vielleicht sollte man bei derartigen Ansprüchen einfach eine Gebühr einführen: Du willst funktionierenen Code? Kein Problem, was zahlst du? :lol:

Mit einer ausgeprägten Verzweiflungsneigung steht man sich beim Lernen selbst im Weg. Letztendlich kommt die Verzeiflung daher, daß man ohne Basiskenntnisse einfach drauflosklickt und die unbehandelte Verzeiflungsneigung dann sofort zuschlägt, wenn's nicht gleich auf Anhieb klappt. Anders ausgedrückt: Anfänger, denen man immer nur funktionierenden Code präsentiert, den sie nicht verstehen, lernen nichts dazu. Copy&Paste <> Umsetzen.

Woher nur kommt diese ausufernde Anspruchshaltung?

Der schöne Günther 22. Mai 2015 15:05

AW: teechartgrafik in groupbox speichern
 
Wir haben jetzt schon drei Leute die, im Kern, den selben Code posten. Hartfrid könnte sich darüber freuen. Wir könnten alle das schöne Wetter genießen. Stattdessen fangen wahrscheinlich wieder gleich alle an sich zu bewerfen. :|

bernerbaer 22. Mai 2015 15:08

AW: teechartgrafik in groupbox speichern
 
Zitat:

Zitat von Perlsau (Beitrag 1302598)
Offensichtliche Witze müssen also ab jetzt gekennzeichnet werden, Moderatoren haben gefälligst funktionierenen Code zu posten und du bist hier der Chef. Alles klar, Boß, dein Wunsch ist mir Befehl :P Vielleicht sollte man bei derartigen Ansprüchen einfach eine Gebühr einführen: Du willst funktionierenen Code? Kein Problem, was zahlst du? :lol:

Mit einer ausgeprägten Verzweiflungsneigung steht man sich beim Lernen selbst im Weg. Letztendlich kommt die Verzeiflung daher, daß man ohne Basiskenntnisse einfach drauflosklickt und die unbehandelte Verzeiflungsneigung dann sofort zuschlägt, wenn's nicht gleich auf Anhieb klappt. Anders ausgedrückt: Anfänger, denen man immer nur funktionierenden Code präsentiert, den sie nicht verstehen, lernen nichts dazu. Copy&Paste <> Umsetzen.

Woher nur kommt diese ausufernde Anspruchshaltung?

Sorry! Was für ein Teufel hat dich geritten? Ich will hier gar nichts, ich habe ein funktionierendes Beispiel auf eine gestellte Frage vorgelegt und darauf hingewiesen, dass der Code des Moderators (mindestens mit meiner Delhiversion) nicht funktionieren wird.

Ich fühle mich angegriffen von Dir und erwarte eine Entschuldigung!

Grundsätzlich bin ich aber der Meinung, wer etwas Konstruktives zu einem Beitrag beisteuern kann soll dies auch tun, wer nicht bereit ist auf eine Frage einzugehen soll doch besser schweigen. Was ist falsch daran andere darauf hinzuweisen, dass ein Code nicht funktioniert? Nicht funktionieren kann ohne weiteres Grundwissen?

Vorwürfe an konstruktive Teilnehmer im Forum, ist es wirklich das was du wolltest?

Perlsau 22. Mai 2015 15:48

AW: teechartgrafik in groupbox speichern
 
Sorry, ich habe dich nicht angegriffen, das ist dein subjektives Empfinden, entspricht jedoch nicht meiner Intention. Dennoch hattest du geschrieben:

Zitat:

Zitat von bernerbaer (Beitrag 1302597)
Eigentlich erwarte ich in einem Beispielcode eines Moderators schon entweder Code der funktioniert, oder der Hinweis, wie der Code zum funktionieren gebracht werden kann. So wie der Code da steht, wird jeder Anfänger verzweifeln, wenn er das Beispiel umsetzen möchte.

Das empfand ich als unverschämt und habe daher mein Empfinden auf lustige und nicht ganz ernstzunehmende Weise (man beachte die Smilys) zum Ausdruck gebracht. Dasselbe gilt auch für den obigen Hinweis mit dem GroupBox.SaveToFile. Das war ganz eindeutig ein Witz, der TE hätte spätestens beim Eintippen erkennen müssen, daß es diesen Befehl nicht gibt und er selbst etwas programmieren muß, um sein Ziel zu erreichen. Einige hatten den Witz sofort verstanden, andere vermutlich nicht.

Meiner Ansicht nach hat hier keiner einen Anspruch auf funktionierenden Code. Es gibt hier nicht einmal einen Anspruch darauf, daß Anfragen beantwortet werden. Wenn du der Meinung bist, du müßtest den gepostesten Code eines Users korrigieren, damit er funktioniert, steht dir das jederzeit frei. Hier zeigst du ganz eindeutig eine Überreaktion :-D

Des weiteren habe ich auf die Tatsache hingewiesen, daß gerade Anfänger durch Code, den sie lediglich in der Erwartung, er funktioniere auf Anhieb, kopieren, nicht wirklich etwas lernen. Das würde nämlich darauf hinauslaufen, daß die User hier einem Anfänger die Programmierarbeit abnehmen und für ihn das Programm schreiben. Diese Thematik wurde nicht nur in diesem Forum bereits bis zum Abwinken durchgekaut und sollte jedem, der hier bereits ein paar Jahre dabei ist, geläufig sein. Wieso du dich dadurch angegriffen fühlst, ist mir zwar ein Rätsel, aber letztendlich deine Sache – ich muß es nicht verstehen.

Es ist aber wohl noch gestattet, sich über gewisse überzogene Ansprüche lustig zu machen. Auch wenn du hier im Grunde nicht wirklich der Boß bist, möchte ich dich darum bitten, mir weiterhin zu gestatten, hin und wieder eine Aussage in witziger Form zu kommentieren und nicht sofort alles auf dich zu beziehen.

Wie gesagt kann ich hier keinen persönlichen Angriff erkennen und sehe daher auch keine Veranlassung, irgend eine erzwungene und damit geheuchelte Entschuldigung auszusprechen. Wieso schreibst du mir nicht einfach via PM, wodurch du dich nun so angegriffen gefühlt hast, sondern schreist* stattdessen hier das Forum zusammen? Dann können wir das nämlich in Ruhe klären und müssen damit nicht die User belästigen.

* Fettschrift wird gewöhnlich als Schreien interpretiert, insbesondere dann, wenn damit ein Vorwurf formuliert wird.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:06 Uhr.
Seite 2 von 3     12 3      

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