Autor |
Beitrag |
Erzengel
      
Beiträge: 99
Win 2000, WinXP
Delphi 5 Enterprise
|
Verfasst: 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 tommie-lie: Topic mit "Text mit Bild abspeichern" aus dem OffTopic zusammengefasst
_________________ Ein Kreis ist ein rundes Quadrat
|
|
MartinPb
      
Beiträge: 698
|
Verfasst: 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 
      
Beiträge: 99
Win 2000, WinXP
Delphi 5 Enterprise
|
Verfasst: 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
      
Beiträge: 1112
|
Verfasst: 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 
      
Beiträge: 99
Win 2000, WinXP
Delphi 5 Enterprise
|
Verfasst: 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
      
Beiträge: 4373
Ubuntu 7.10 "Gutsy Gibbon"
|
Verfasst: 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
      
Beiträge: 1112
|
Verfasst: Do 02.09.04 18:21
Du machst das tif in ein Image (frag mich nicht, wie ...). Und dann folgt in etwa sowas:
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 
      
Beiträge: 99
Win 2000, WinXP
Delphi 5 Enterprise
|
Verfasst: Fr 03.09.04 07:23
Ich bin Produktionsleiter, und nicht programierer
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. 
_________________ Ein Kreis ist ein rundes Quadrat
|
|
Erzengel 
      
Beiträge: 99
Win 2000, WinXP
Delphi 5 Enterprise
|
Verfasst: Fr 03.09.04 08:08
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
      
Beiträge: 735
Win XP
Delphi 3, Delphi 6 PE, Delphi 2005 PE
|
Verfasst: 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  . 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 
      
Beiträge: 99
Win 2000, WinXP
Delphi 5 Enterprise
|
Verfasst: 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  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
      
Beiträge: 236
Erhaltene Danke: 1
|
Verfasst: Fr 03.09.04 09:55
Hier so gehts für Jpegs:
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 public 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. |
Download www.fatal-universe.de/Trans/TextInPic.zip
Moderiert von UGrohne: Code- durch Delphi-Tags ersetzt.
|
|
.Chef
      
Beiträge: 1112
|
Verfasst: 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 
      
Beiträge: 99
Win 2000, WinXP
Delphi 5 Enterprise
|
Verfasst: 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.
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
      
Beiträge: 735
Win XP
Delphi 3, Delphi 6 PE, Delphi 2005 PE
|
Verfasst: 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 
      
Beiträge: 99
Win 2000, WinXP
Delphi 5 Enterprise
|
Verfasst: Fr 03.09.04 12:15
Das will ich mal sehn wie du meinem CHEF nein sagt. Kriegt 100 Euro
Der ein Monster in Person. Aber ohne Scherz
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
|
|