Zitat von
Angel4585:
ich hab jetz au grad alles angehakt wo en Haken dran iss.. des geht ewig mit dem JPEG erstellen... könnte man da nich en Fortschrittsbalken oder so reinmachen, damit man weis ob man schnell en Kaffee trinken gehn kann?(Mein dauert jetzt schon 2 Minuten
)
Solange die schwarze "Dos-Box" sichtbar ist wird auf jeden Fall das jpg erzeugt.
Falls die weg sein sollte, stimmt was nicht. (evtl ist wegen eines Fehlers kein jpg erzeugt worden.)
Ich habe das ganze in einer schnellen "quick and dirty" Methode geschrieben.
Ich kann nicht ausschliessen, dass noch Fehler enthalten sind.
Einen Fortschrittsbalken kann ich Dir nicht bieten, da ich "nur" ein externes Programm zur Erstellung aufrufe:
Code:
dot -Tjpg -otemp.jpg temp.dot
"temp.dot" enhällt den Inhalt des rechten Memos.
"temp.jpg" wird dann durch "dot.exe" erstellt.
Falls "dot.exe" beendet und die "temp.jpg" nicht erstellt wird, wartet das Programm endlos.
Deshalb habe ich den Cancel Button eingebaut.
Hier der Quellcode des Buttons:
Delphi-Quellcode:
...
procedure TForm1.btnDotClick(Sender: TObject);
begin
if Memo2.Lines.Count = 0 then exit;
btnDot.enabled := false;
btnCancel.Visible := True;
if fileexists('temp.jpg') then
begin
if not DeleteFile('temp.jpg') then
begin
MessageDlg('Can''t delete file "temp.jpg".', mtError, [mbCancel], 0);
btnDot.Enabled := True;
btnCancel.Visible := False;
exit;
end;
end;
StatusBar1.SimpleText := ' save temp dot file';
Memo2.Lines.SaveToFile('temp.dot');
StatusBar1.SimpleText := ' create jpg from dot file';
if not fileexists(StartPath+'dot.exe') then
begin
MessageDlg('Can''t find file "'+StartPath+'dot.exe".', mtError, [mbCancel], 0);
btnDot.Enabled := True;
btnCancel.Visible := False;
exit;
end;
shellapi.ShellExecute(Form1.Handle, 'open', PChar(StartPath+'dot.exe'),
'-Tjpg -otemp.jpg temp.dot', '.', SW_SHOWNORMAL);
StatusBar1.SimpleText := ' wait for jpg file';
while not (fileexists('temp.jpg') or myTerminate) do
begin
Application.ProcessMessages;
end;
StatusBar1.SimpleText := ' view jpg file';
shellapi.ShellExecute(Form1.Handle, 'open', 'temp.jpg', '', '', SW_SHOWNORMAL);
btnDot.Enabled := True;
btnCancel.Visible := False;
StatusBar1.SimpleText := ' finished';
end;
...
procedure TForm1.btnCancelClick(Sender: TObject);
begin
myTerminate := True;
btnCancel.Visible := False;
end;
Ich hoffe diese Infos helden Dir.
Ich werde nach meinem Urlaub noch etwas an dem Code formatieren und dokumentieren.
Wenn er dann den Ansprüchen einer Veröffentlichung genügt, werde ich ihn evtl komplett veröffentlichen.