Autor Beitrag
Erzengel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 99

Win 2000, WinXP
Delphi 5 Enterprise
BeitragVerfasst: Do 02.09.04 11:30 
kleiner Erläuterung:

ich habe in meiner Form ein Bild geladen und im Memo Feld habe ich meine Text stehen.

Frage:
Wie kann ich das Bild abspeichern so das ich das Bild sehe und was im Memofeld steht.

Vorstellung:
Der Memotext soll unten ins Bild kopiert werden. Aber nicht dierekt ins Bild sondern es soll ein Platz unterm Bild geschaffen werden wo der Text drin steht.

Wäre nett wenn ihr mit Quelltext antwortet da ich ein Anfänger bin.

Ich danke im voraus.
_________________


Moderiert von user profile icontommie-lie: Topic mit "Text mit Bild abspeichern" aus dem OffTopic zusammengefasst

_________________
Ein Kreis ist ein rundes Quadrat
MartinPb
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 698



BeitragVerfasst: Do 02.09.04 11:41 
Zuerst mußt du ermitteln wie hoch die Platzbedarf für den Text ist. Dazu einfach die Anzahl der Zeilen nehmen und mit der Höhe der Einzel-Zeile multipizieren. Zeilenhöhe kannst du mit

MyBitmap.Canvas.TextHeight('Beispieltext');

ermitteln.

Dann die Höhe der der Bitmap merken und um die Gesamttexthöhe vergrößern. Dann pro Zeile mit

MyBitmap.Canvas.TextOut(x, y, MyMemo.Lines[i]);

übertragen.

Dabei sollte y eine Formel aus AlteBitmaphöhe + (i * EinzelTextHöhe) sein.

Viel Spaß.

_________________
Gruß
Martin
Erzengel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 99

Win 2000, WinXP
Delphi 5 Enterprise
BeitragVerfasst: Do 02.09.04 12:18 
    For any kind of inquiries,
    questions how to use,
    complains about the entire execution,
    packing, shipment,
    refer to the SerNo on the sticker + please contact
    info@arminius.de
    or go www.arminius.de and log into "Trouble shooting"/


Also der Text steht im Memofeld

Kleine bemerkung ich hab noch nie so richtig prog. und jetzt kommt de chef mit son kram an wovon ich voll kein Peil habe.
Wenn es geht bitte mit Queltext. Wäre echt dankbar.

_________________
Ein Kreis ist ein rundes Quadrat
.Chef
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1112



BeitragVerfasst: Do 02.09.04 12:29 
Bevor hier Quelltext kommt, musst du erstmal nochn paar Details rausrücken. Ursprünglich sprichst du von "abspeichern", was in meinen Augen bedeutet "in eine Datei". Meinst du das so, dass man hinterher das Bild laden kann (in ein Bitmap) und den Text extra aus der selben Datei (in strings)?
Im weiteren Verlauf könnte man deine Frage aber auch als "Darstellen" interpretieren. Meinst du z.B. das Bild als Hintergrund im Memo? Oder über dem Memo? Soll der Text einen Rand bzw. neutralen Hintergrund haben, wenn er das Bild überlappt?
Oder soll das Ganze nach der Darstellung wie eben beschrieben nur als einfaches Bitmap gespeichert werden?

Also wie jetzt?

_________________
Die Antworten auf die 5 häufigsten Fragen:
1. Copy(), Pos(), Length() --- 2. DoubleBuffered:=True; --- 3. Application.ProcessMessages bzw. TThread --- 4. ShellExecute() --- 5. Keine Vergleiche von Real-Typen mit "="!
Erzengel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 99

Win 2000, WinXP
Delphi 5 Enterprise
BeitragVerfasst: Do 02.09.04 13:27 
Sorry,

also ich lade eine .tif Bilddatei in das Programm. Unter dem BIld steht dann der Text(siehe lestztes posting)
So dann wird das BIld mit dem Text Ausgedruckt auf eine DIN A4 Seite.
Aber das ganze soll dann abgespeichert werden als BIlddatei (.tif bild + text vom memo feld) DAs daraus entstehnde Bild kann egal was für ein vormat haben. ab besten wär ja das jpeg-vormat.
naja und der hitnergrund soll dann weiss sein weil die schrifft dann ja schwarz ist.
hoffe das ich das jetzt verständlich ausgedrückt habe.

_________________
Ein Kreis ist ein rundes Quadrat
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Do 02.09.04 17:47 
Erzengel hat folgendes geschrieben:
Kleine bemerkung ich hab noch nie so richtig prog. und jetzt kommt de chef mit son kram an wovon ich voll kein Peil habe.
Um Gottes Willen! Als was hat der dich denn bitte angestellt?!?

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
.Chef
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1112



BeitragVerfasst: Do 02.09.04 18:21 
Du machst das tif in ein Image (frag mich nicht, wie ...). Und dann folgt in etwa sowas:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
var
  a, b : Integer;
  r : TRect;
begin
  a:=Image1.Height;
  with Image1.Canvas do
  begin
    Image1.Height:=a+Font.Height*Memo1.Lines.Count;
    Brush.Style:=bsSolid;
    Brush.Color:=clWhite;
    r.Left:=0;
    r.Top:=a;
    r.Right:=Image1.Width-1;
    r.Bottom:=Image1.Height-1;
    FillRect(r);
    Font.Color:=clBlack;
    for b:=0 to Memo1.Lines.Count-1 do
      TextOut(10,a+b*Font.Height,Memo1.Lines[b]);
  end;
  Image1.Picture.SaveToFile('bild.bmp');
end;

Benötigt sicher noch Feintuning.

Mach das erstmal, und dann sehen wir weiter.

_________________
Die Antworten auf die 5 häufigsten Fragen:
1. Copy(), Pos(), Length() --- 2. DoubleBuffered:=True; --- 3. Application.ProcessMessages bzw. TThread --- 4. ShellExecute() --- 5. Keine Vergleiche von Real-Typen mit "="!
Erzengel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 99

Win 2000, WinXP
Delphi 5 Enterprise
BeitragVerfasst: Fr 03.09.04 07:23 
Ich bin Produktionsleiter, und nicht programierer :shock:

Mal schauen ob ich das hinkriege. Wenn es das Projekt positiv verläuft hoffe ich nicht fütr mich das er noch mal mit soeinem Sch*** ankommt. :evil:

_________________
Ein Kreis ist ein rundes Quadrat
Erzengel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 99

Win 2000, WinXP
Delphi 5 Enterprise
BeitragVerfasst: Fr 03.09.04 08:08 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
procedure TForm1.Button3Click(Sender: TObject);

var
  a, b : Integer;
  r : TRect;
begin
  a:=Image1.Height;
  with Image1.Canvas do
  begin
    Image1.Height:= a + Font.Height*Memo1.Lines.Count;
    Brush.Style:=bsSolid;
    Brush.Color:=clWhite;
    r.Left:=0;
    r.Top:=a;
    r.Right:=Image1.Width-1;
    r.Bottom:=Image1.Height-1;
    FillRect(r);
    Font.Color:=clBlack;
    for b:=0 to Memo1.Lines.Count-1 do  
      TextOut(10,a+b*Font.Height,Memo1.Lines[b]);
  end;
  If SavePictureDialog1.Execute Then
Image1.Picture.SaveToFile(SavePictureDialog1.filename);

end;


Habe das jetzt im Button intigriert.
1.Das Problem ist. Wenn ich den Button drück wird das bild immer kürzer. Das heißt bei jedem Drücken schneidet er unten ein Stück ab.
2.Habe das SaveDialog genommen. Wenn ich anwähle das er das als jpeg oder ein sonstiges Format nehme speichert er mir das nicht so ab.
3. Er speichert das bild aber ohne denn Memo text. Achja und er speichert nur .bmp datei. Das heit wenn ich ein tiff geladen habe krieg ich eine Fehlermeldung

Sorry ich sitze schon seid 6 Uhr darn und krieg es nicht fertig. Wäre echt dankbar wenn hilfe zueilen würde.
Muß das heute um 12:15 präsentieren. HILFE

_________________
Ein Kreis ist ein rundes Quadrat
bms
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 735

Win XP
Delphi 3, Delphi 6 PE, Delphi 2005 PE
BeitragVerfasst: Fr 03.09.04 09:17 
Kannst du überhaupt programmieren? Scheint mir nicht so zu sein, denn bei deinen Bemerkungen läufts mir kalt über den Rücken. Sehr schön finde ich diese Bemerkung

Erzengel hat folgendes geschrieben:
2.Habe das SaveDialog genommen. Wenn ich anwähle das er das als jpeg oder ein sonstiges Format nehme speichert er mir das nicht so ab.


SaveDialog ist dumm. Das ist nur eine dumme Komponente. Nur weil du da Jpeg angibst, wird noch lange kein Jpeg draus :shock: . Wenn du das willst, dann solltest du PaintBrush nehmen. Wenn nicht, dann muß du selbst ein Jpeg Format nehmen und speichern, SaveDialog ist nur dazu da, damit du ein Dateinamen komfortabel eingeben kannst. Es ist nicht dazu da 1000000 Dateiformate zu kennen. SaveDialog hat nichts mit Jpeg zu tun.

Anscheinend bist du noch meilenweit davor entfernt überhaupt zu verstehen wie man programmiert.

Aber wenn man schon nicht programmieren kann und seinem Chef irgendwas erzählt hat, dann Hilfe in einem Forum sucht, so sollte man sich unheimlich viel Mühe mit der Beschreibung des Problems geben. Man läßt die Leute nicht raten. Man nimmt sich mindestens eine halbe Stunde Zeit und beschreibt das Problem so ausführlich, daß keine Fragen mehr da sind. Eventuell erstellt man Bilder und zeigt was man meint.

Du bist also selbst schuld wenn das in die Hose gibt. Es gab schon soviele Leute hier die mit der Hilfe angefangen haben, aber es stellte sich immer heraus, daß sie was falsches gemacht haben.

Also: du kannst nicht programmieren und zu faul ein Problem zu beschreiben bist du auch. Was erwartest du? Sollen 10 Leute raten und 10 Lösungen liefern von denen 1 vielleicht dem entspricht was du brauchst?



Jetzt so eine kleine Bemerkung. Bildformate sind nicht dazu gedacht Bild, dann Bild mit Text und dann noch den Text extra abzuspeichern, so daß nach einem erneutem laden du den Text wieder hast. Dann auch noch ein Wunschformat, d.h. mal Tif, mal Bmp, am besten aber Jpeg.

Wenn du das haben willst was du willst, dann machst du entweder ein eigenes Format oder du bestimmst ein Format (z.B. es muß JPEG sein). In diesem Fall könnte man (mit viel Mühe) vielleicht eine Info als Bagage an das Jpeg packen. Wie gesagt: vielleicht. Ich weiß nicht ob man an Jpeg was anhängen kann. Dann könnte man zwar dieses Jpeg mit einem belibigen Programm öffnen und speichern, wodurch die Infos verloren gehen, oder mit dem eigenem Programm, welches die Info aus der Bagage extrahiert, daß Bild auf die alte Größe stutzt und den Text in der Memo ausgibt.

Ich glaube das willst du haben, aber beschwören würde ich es nicht.

_________________
VORSICHT: Ich behersche seit heute die Fünf-Finger-Handflächen-Herz-Explodier-Schlag-Kampf-Technik >:(
Erzengel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 99

Win 2000, WinXP
Delphi 5 Enterprise
BeitragVerfasst: Fr 03.09.04 09:30 
Weiße wenn ich dein Posting lese kommt mir es so vor als wenn du hier Leute fertigmachen willst anstad zuhelfen.
Ich habe mein Problem ausführlich beschrieben. Und die erste Lösung ist ja auch ok aber noch nicht perfekt. Sondern nur ein ansatz vom ganzen.
Soll ich dir mal was sagen. Ich bin Kaufmann und nicht irgendein Programierer. Und ich habe meinem Chef nicht erzählt das ich das kann. Ich find das echt zum :puke: von dir mir sowas zu unterstellen. Wo sind wir hier eigendlich???
Ich habe noch NIE in Delphi ein Prog geschrieben. Und schlimm??? Komm ich deswegen jetzt in die Hölle oder was???


So zu den anderen falls ich mein Probelm schlecht beschrieben habe.
Also:
Es ist doch egal welches Format das Bild hat das ich öffne. Und es sollte auch egal sein in welches Format er das Bild abspeichert. Hauptsache ist das ich das geladene Image mit dem Memotext zusammenfügen kann und das auch abspeichern kann. Meinet wegen können sowohl das Image und der Menotext in ein Worddok. abgespeicher werden. Aber ich denke dies icht noch schwieriger.

_________________
Ein Kreis ist ein rundes Quadrat
Simon Joker
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 236
Erhaltene Danke: 1



BeitragVerfasst: Fr 03.09.04 09:55 
Hier so gehts für Jpegs:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Jpeg, ExtDlgs;

type
  TForm1 = class(TForm)
    ScrollBox1: TScrollBox;
    Splitter1: TSplitter;
    Panel1: TPanel;
    Img: TImage;
    BuLoad: TButton;
    BuSave: TButton;
    Memo: TMemo;
    BuAddText: TButton;
    OpenDLG: TOpenPictureDialog;
    SaveDLG: TSavePictureDialog;
    CBCenterText: TCheckBox;
    ShapeBG: TShape;
    Label1: TLabel;
    Label2: TLabel;
    ShapeText: TShape;
    ColorPic: TColorDialog;
    ImgOrg: TImage;
    procedure BuLoadClick(Sender: TObject);
    procedure BuSaveClick(Sender: TObject);
    procedure BuAddTextClick(Sender: TObject);
    procedure ShapeMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.BuLoadClick(Sender: TObject);
begin
  if OpenDLG.Execute then begin
    ImgOrg.Picture.LoadFromFile(OpenDLG.FileName);
    Img.Picture.Assign(ImgOrg.Picture);
  end;
end;

procedure TForm1.BuSaveClick(Sender: TObject);    
var
  JP : TJpegImage;
begin
  if SaveDLG.Execute then begin
    JP := TJpegImage.Create;
    try
      JP.Assign(Img.Picture.Bitmap);
      JP.JPEGNeeded;
      JP.SaveToFile(SaveDLG.FileName);
    finally  
      JP.Free;
    end;
    
  end;
end;

procedure TForm1.BuAddTextClick(Sender: TObject);
var
  BM : TBitmap;
  JP : TJpegImage;
  i:integer;
  TH,IH,TW:integer;
begin
  BM := TBitmap.Create;
  JP := TJpegImage.Create;
  try
    BM.Canvas.Brush.Color := ShapeBG.Brush.Color;
    JP.Assign(ImgOrg.Picture);
    JP.DIBNeeded;
    BM.Width := JP.Width;
    TH:= BM.Canvas.TextHeight('DummyStringForHigh');
    IH:= JP.Height;
    BM.Height := IH + (Memo.Lines.Count+1) * TH;
    BM.Canvas.Font.Color := ShapeText.Brush.Color;

    BM.Canvas.Draw(0,0,JP);
    for i:=0 to Memo.Lines.Count-1 do
      if CBCenterText.Checked then begin
        TW := BM.Canvas.TextWidth(Memo.Lines.Strings[i]);
        BM.Canvas.TextOut((JP.Width div 2) - (TW div 2),IH + (TH div 2) + (i*TH),Memo.Lines.Strings[i]);
      end else begin
        BM.Canvas.TextOut(5,IH + (TH div 2) + (i*TH),Memo.Lines.Strings[i]);
      end;
    Img.Picture.Assign(BM);
  finally
    BM.Free;
    JP.Free;
  end;
end;

procedure TForm1.ShapeMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if ColorPic.Execute then
    TShape(Sender).Brush.Color := ColorPic.Color;
end;

end.


Downloadwww.fatal-universe.de/Trans/TextInPic.zip

Moderiert von user profile iconUGrohne: Code- durch Delphi-Tags ersetzt.
.Chef
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1112



BeitragVerfasst: Fr 03.09.04 10:07 
Erzengel hat folgendes geschrieben:
1.Das Problem ist. Wenn ich den Button drück wird das bild immer kürzer. Das heißt bei jedem Drücken schneidet er unten ein Stück ab.

Font.Height ist negativ. Mach mal überall ein Abs() drum, wo das steht.

Erzengel hat folgendes geschrieben:
2.Habe das SaveDialog genommen. Wenn ich anwähle das er das als jpeg oder ein sonstiges Format nehme speichert er mir das nicht so ab.

Dazu wären wir als nächstes gekommen ...

Erzengel hat folgendes geschrieben:
. Er speichert das bild aber ohne denn Memo text. Achja und er speichert nur .bmp datei. Das heit wenn ich ein tiff geladen habe krieg ich eine Fehlermeldung

Keine Ahnung, hab noch nie ein tiff geladen.

Sag mal bescheid, ob du überhaupt noch Hilfe brauchst, oder ob der Code vom Simon ausgereicht hat.

Uns so hart es klingt: Ich bin Student für Informations- und Kommunikationstechnik im 8 bzw. ab Oktober 9. Semester. Und obwohl es nicht unbedingt in meinen Fachbereich fällt, wird von mir ständig verlangt, über irgendwelchen Kram Powerpoint-Präsentationen zu machen. Und wenn ich sowas machen muss, dann können Produktionsleiter auch mal programmieren. Ausgleichende Gerechtigkeit!

_________________
Die Antworten auf die 5 häufigsten Fragen:
1. Copy(), Pos(), Length() --- 2. DoubleBuffered:=True; --- 3. Application.ProcessMessages bzw. TThread --- 4. ShellExecute() --- 5. Keine Vergleiche von Real-Typen mit "="!
Erzengel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 99

Win 2000, WinXP
Delphi 5 Enterprise
BeitragVerfasst: Fr 03.09.04 10:20 
Hast auch recht. Es macht auch Spass zu programieren aber auf die dauer kann ich mir das nicht vorstellen. Aber wenn mann nicht weiter kommt mit programieren dann könnte ich den ganzen PC aus Fenster schmeisen. :D

Naja das was von Simon kommt ist perfekt. Vielen Dank dir. Solche leute schätz ich sehr.

Jetzt muß ich nur noch rausfiden wie ich das Bild drucken kann und wie mann den rest der Bild-Formate öffen bzw speichern kann. Hab ja noch 2 Stunden Zeit

_________________
Ein Kreis ist ein rundes Quadrat
bms
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 735

Win XP
Delphi 3, Delphi 6 PE, Delphi 2005 PE
BeitragVerfasst: Fr 03.09.04 10:56 
Zitat:
Jetzt muß ich nur noch rausfiden wie ich das Bild drucken kann und wie mann den rest der Bild-Formate öffen bzw speichern kann. Hab ja noch 2 Stunden Zeit


Das ist es was ich meine. Ich bin dir nicht böse weil du nicht programmieren kannst, aber wenn man es nicht kann, dann sagt man Nein zum Chef.

Bild drucken, bzw. vernünftig drucken, ist auch ein Problem für sich. Und Rest der Bildformate ist ist auch ein Problem, da Delphi nur Bmp von sich aus öffnen und speichern kann. Mit der Unit Jpeg kann man noch Jpegs öffnen und speichern. Und hier ist erst ein mal schluß. Tif, Png, Gif usw. kannst du nur mit Zusasatzkomponenten öffnen und speichern. Und gute Kostenlose Bildformate kriegt man nicht so schnell gefunden. Da es aber für eine Firma ist, würde ich eine Komponente kaufen. Sparst du dir sehr viel Zeit.

Ich hoffe das kriegst du so schnell hin.

_________________
VORSICHT: Ich behersche seit heute die Fünf-Finger-Handflächen-Herz-Explodier-Schlag-Kampf-Technik >:(
Erzengel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 99

Win 2000, WinXP
Delphi 5 Enterprise
BeitragVerfasst: Fr 03.09.04 12:15 
Das will ich mal sehn wie du meinem CHEF nein sagt. Kriegt 100 Euro :D

Der ein Monster in Person. Aber ohne Scherz :twisted:

Habs endlich geschaft. Danke die mitgeholfen haben. Den Quelltext falls es jemanden interesiert poste ich in 4 wochen. Weil ich gleich die Präsie halte und dann zu den AMIS fahre. Habe da eine Messe.
Also allen ein schönes Wochenende

_________________
Ein Kreis ist ein rundes Quadrat