Autor |
Beitrag |
thecloser_
Hält's aus hier
Beiträge: 7
|
Verfasst: Mo 12.11.12 21:00
Hallo community,
ich versuche mich an einem Tool, das von einer Datei die Dateiabschnitte in einer Listbox anzeigt.
Nur ist mein Problem, dass ich ehrlich gesagt keine Ahnung habe, wie soetwas funktioniert.
Hier die Datei:
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: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211:
| ColSetInf "default"
# 0x0000 MatClass 00 00 00 04 Diffuse 0x000000 Ambient 0x000000 Specular 0xffffff Reflect2 0xffffff Specular2 0x323232 XDiffuse 0x000000 XSpecular 0x000000 Tex1Name "" Tex2Name "" Tex3Name "" TexFlags 0x11 0x00 0x00 0x00 TexOffset 0.000000 0.000000 TexScale 1.000000 1.000000 TexAngle 0.000000 Alpha 000 SpecProps 079 010 050 Fresnel 065 025 060 FallOff 000 030
# 0x0001 MatClass 00 02 00 04 Diffuse 0xffffff Ambient 0x000000 Specular 0xffffff Reflect2 0xffffff Specular2 0x323232 XDiffuse 0x000000 XSpecular 0x000000 Tex1Name "Misk.tga" Tex2Name "" Tex3Name "" TexFlags 0x11 0x00 0x00 0x00 TexOffset 0.000000 0.000000 TexScale 1.000000 1.000000 TexAngle 0.000000 Alpha 000 SpecProps 079 010 050 Fresnel 065 025 060 FallOff 000 030
# 0x0002 MatClass 00 02 00 04 Diffuse 0xffffff Ambient 0x000000 Specular 0xffffff Reflect2 0xffffff Specular2 0x323232 XDiffuse 0x000000 XSpecular 0x000000 Tex1Name "Lights.tga" Tex2Name "" Tex3Name "" TexFlags 0x11 0x00 0x00 0x00 TexOffset 0.000000 0.000000 TexScale 1.000000 1.000000 TexAngle 0.000000 Alpha 000 SpecProps 079 010 050 Fresnel 065 025 060 FallOff 000 030
# 0x0003 MatClass 00 01 01 04 Diffuse 0x000000 Ambient 0x000000 Specular 0xa0aac8 Reflect2 0xffffff Specular2 0x0f0f19 XDiffuse 0x000000 XSpecular 0x000000 Tex1Name "Shattglass.tga" Tex2Name "" Tex3Name "" TexFlags 0x11 0x00 0x00 0x00 TexOffset 0.000000 0.000000 TexScale 1.000000 1.000000 TexAngle 0.000000 Alpha 050 SpecProps 120 010 050 Fresnel 095 035 075 FallOff 000 030
# 0x0004 MatClass 00 01 01 04 Diffuse 0x120000 Ambient 0x000000 Specular 0x550407 Reflect2 0xffffff Specular2 0x550407 XDiffuse 0x000000 XSpecular 0x000000 Tex1Name "" Tex2Name "" Tex3Name "" TexFlags 0x11 0x00 0x00 0x00 TexOffset 0.000000 0.000000 TexScale 1.000000 1.000000 TexAngle 0.000000 Alpha 010 SpecProps 120 010 050 Fresnel 095 035 035 FallOff 000 030
# 0x0005 MatClass 00 00 00 04 Diffuse 0x6e6e6e Ambient 0x000000 Specular 0x323232 Reflect2 0xffffff Specular2 0x000000 XDiffuse 0x000000 XSpecular 0x000000 Tex1Name "" Tex2Name "" Tex3Name "" TexFlags 0x11 0x00 0x00 0x00 TexOffset 0.000000 0.000000 TexScale 1.000000 1.000000 TexAngle 0.000000 Alpha 000 SpecProps 079 000 040 Fresnel 097 050 001 FallOff 100 050
# 0x0006 MatClass 00 02 00 04 Diffuse 0xffffff Ambient 0x000000 Specular 0xffffff Reflect2 0xffffff Specular2 0x323232 XDiffuse 0x000000 XSpecular 0x000000 Tex1Name "Kennzeichen.tga" Tex2Name "" Tex3Name "" TexFlags 0x11 0x00 0x00 0x00 TexOffset 0.000000 0.000000 TexScale 1.000000 1.000000 TexAngle 0.000000 Alpha 000 SpecProps 079 010 050 Fresnel 065 025 060 FallOff 000 030
# 0x0007 MatClass 00 02 00 04 Diffuse 0xffffff Ambient 0x000000 Specular 0xffffff Reflect2 0xffffff Specular2 0x323232 XDiffuse 0x000000 XSpecular 0x000000 Tex1Name "Lights.tga" Tex2Name "" Tex3Name "" TexFlags 0x11 0x00 0x00 0x00 TexOffset 0.000000 0.000000 TexScale 1.000000 1.000000 TexAngle 0.000000 Alpha 000 SpecProps 079 010 050 Fresnel 065 025 060 FallOff 000 030
# 0x0008 MatClass 00 04 00 05 Diffuse 0x000000 0x9e9fa5 0x43464b 0x10274b 0x000d19 0x64000f 0x320000 0x96803d 0x64341f 0x14321f Ambient 0x000000 0x000000 0x000000 0x000000 0x000000 0x000000 0x000000 0x000000 0x000000 0x000000 Specular 0xc8c8c8 0xc8c8c8 0x8a8f96 0x646464 0x646464 0xe5e5e5 0x646464 0x646464 0x646464 0x646464 Reflect2 0x969696 0x969696 0x969696 0x969696 0x969696 0x969696 0x969696 0x969696 0x969696 0x969696 Specular2 0x000000 0x000000 0x878d96 0x2564af 0x003064 0x000000 0x4b0000 0x000000 0x4b3a17 0x1e3227 XDiffuse 0xc8c8c8 0xc8c8c8 0xc8c8c8 0xc8c8c8 0xc8c8c8 0xc8c8c8 0xc8c8c8 0xc8c8c8 0xc8c8c8 0xc8c8c8 XSpecular 0x000000 0x000000 0x000000 0x000000 0x000000 0x000000 0x000000 0x000000 0x000000 0x000000 Tex1Name "Body.tga" Tex2Name "" Tex3Name "" TexFlags 0x11 0x00 0x00 0x00 TexOffset 0.000000 0.000000 TexScale 1.000000 1.000000 TexAngle 0.000000 Alpha 000 SpecProps 200 010 059 Fresnel 095 025 080 FallOff 000 010
# 0x0009 MatClass 00 00 00 04 Diffuse 0x191919 Ambient 0x000000 Specular 0x323232 Reflect2 0xffffff Specular2 0x191919 XDiffuse 0x000000 XSpecular 0x000000 Tex1Name "" Tex2Name "" Tex3Name "" TexFlags 0x11 0x00 0x00 0x00 TexOffset 0.000000 0.000000 TexScale 1.000000 1.000000 TexAngle 0.000000 Alpha 000 SpecProps 079 000 040 Fresnel 097 050 001 FallOff 100 050 |
Ich würde gerne wissen, wie ich nach dem Öffnen dieser Datei immer die Zeilen mit dem # anzeigen lassen kann, damit ich diese Abschnitte gezielt bearbeiten kann. Das problem dabei könnte sein, dass die Datei nich immer gleich viele Abschnitte haben muss, sie kann auch mehr oder weniger Abschnitte besitzen.
LG thecloser_
PS: Sollte ich bei der Forumsuche etwas übersehen haben, bitte ich um Verzeihung Moderiert von Narses: Topic aus Neue Einträge / Hinweise / etc. verschoben am Mo 12.11.2012 um 20:18
|
|
ub60
Beiträge: 762
Erhaltene Danke: 127
|
Verfasst: Mo 12.11.12 22:31
Vorschlag:
- Datei in eine Listbox einlesen mit LoadFromFile (nicht schick, aber schnell zu programmieren)
- Listbox zeilenweise durchgehen
- mit der Pos-Funktion abfragen, ob das #-Zeichen in der Zeile vorkommt
- wenn ja, dann Zeile in zweite Listbox übernehmen (mit Add)
|
|
Gerd Kayser
Beiträge: 632
Erhaltene Danke: 121
Win 7 32-bit
Delphi 2006/XE
|
Verfasst: Mo 12.11.12 22:51
Wenn ich das richtig sehe, hat jeder Block die gleiche Länge und beginnt mit einem # in der ersten Spalte. Dann würde ich es mit einem Memo und einer ComboBox realisieren. Beispiel:
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:
| procedure TMainform.Button1Click(Sender: TObject); var Schleife : integer; begin Memo1.Clear; ComboBox1.Clear; Memo1.Lines.LoadFromFile('f:\delphi_xe\test\daten.txt'); for Schleife := 0 to Memo1.Lines.Count - 1 do if Pos('#', Memo1.Lines[Schleife]) = 1 then ComboBox1.Items.Add(Memo1.Lines[Schleife]); ComboBox1.ItemIndex := 0; end;
procedure TMainform.Button2Click(Sender: TObject); begin Memo1.Lines.SaveToFile('f:\delphi_xe\test\daten.txt'); end;
procedure TMainform.ComboBox1Select(Sender: TObject); var IndexWert : integer; Zeile : integer; begin IndexWert := ComboBox1.ItemIndex; Zeile := IndexWert * 21 + 2; Memo1.Perform(EM_LINESCROLL, 0, - Memo1.Lines.Count); Memo1.Perform(EM_LINESCROLL, 0, Zeile); end; |
|
|
bummi
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: Mo 12.11.12 23:34
In einem Edit, nach dem Laden Memo1.lines eine 0 eintragen, Abschnitt wird angesprungen und die Nummer im Edit um 1 erhöht.
Also einfach per Button1Click von Abschnitt zu Abschnitt ...
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:
| Procedure TForm5.SetStartNummer(nr:Integer); var i:Integer; pos : Integer; s : String; begin s := '# 0x' + IntToHex(nr,4); i := 0; pos := -1; while (pos < 0) and (i < Memo1.Lines.Count - 1) do begin if Memo1.Lines[i] = s then pos := i; inc(i); end; pos := pos - GetScrollPos(memo1.Handle,SB_VERT); Memo1.Perform(EM_LINESCROLL, 0, pos); end;
procedure TForm5.Button1Click(Sender: TObject); var i:Integer; begin if TryStrToInt(Edit1.text,i) then begin SetStartNummer(i); Edit1.Text := IntToStr(i+1); end; end; |
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
|
|
>M@steR<
Beiträge: 288
Erhaltene Danke: 3
|
Verfasst: Di 13.11.12 01:16
Zuletzt bearbeitet von >M@steR< am Di 17.09.13 03:02, insgesamt 1-mal bearbeitet
|
|
thecloser_
Hält's aus hier
Beiträge: 7
|
Verfasst: Di 13.11.12 17:57
Ich versuche ja nicht den gesammten Text in einer Memo darzustellen, sondern eben nur diese einzelnen Linien, die auch nicht editierbar sein sollten. Man soll sie nur anwählen können, ich möchte die Spalten darunter jeweils bearbeiten.
Man soll außerdem immer alles diese Zeilen sehen können, wesewegen ich eigentlich wenig von der ComboBox halte.
Ansonsten danke schonmal für die Antworten.
Grüße
|
|
Gerd Kayser
Beiträge: 632
Erhaltene Danke: 121
Win 7 32-bit
Delphi 2006/XE
|
Verfasst: Di 13.11.12 21:21
thecloser_ hat folgendes geschrieben : | Man soll außerdem immer alles diese Zeilen sehen können, wesewegen ich eigentlich wenig von der ComboBox halte. |
Hier eine weiteres Grundgerüst, das Du noch auf Deine Bedürfnisse usw. hin anpassen mußt (z. B. Einbau einer Undo-Funktion), bestehend aus
- ListBox1 für die Anzeige und Auswahl der einzelnen Blöcke (Scrollbars aktiv, wenn die Liste länger als die ListBox1 ist),
- ListBox2 zur Anzeige des jeweiligen Blocks (Größe so festlegen, daß nur ein Block sichtbar ist). Um ein Scrollen per Tastatur zu vermeiden, sind alle Tasten abgeschaltet.
- Editfeld, zur Anzeige und zum Editieren der Zeile, die in ListBox2 selektiert wurde. Änderungen werden sofort übernommen und in der ListBox2 angezeigt.
Die Scrollbars der ListBox2 werden per SendMessage ausgeblendet. Wenn das stört: Hier ist beschrieben, wie man die Scrollbars generell ausschalten kann: groups.google.com/fo...i.winapi/LO3557FJWXc
Ein Screenshot des Programms ist als Anlage beigefügt.
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:
| unit Main;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
type TMainform = class(TForm) Button1: TButton; Button2: TButton; ListBox1: TListBox; ListBox2: TListBox; Edit1: TEdit; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure ListBox1Click(Sender: TObject); procedure ListBox2KeyPress(Sender: TObject; var Key: Char); procedure ListBox2KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure ListBox2KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure ListBox2Click(Sender: TObject); procedure Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure FormCreate(Sender: TObject); private public end;
var Mainform: TMainform;
implementation
{$R *.dfm}
procedure TMainform.Button1Click(Sender: TObject); var Schleife : integer; begin ListBox1.Clear; ListBox2.Clear; ListBox2.ScrollWidth := -1; ListBox2.Items.LoadFromFile('f:\delphi_xe\test\daten.txt'); for Schleife := 0 to ListBox2.Items.Count - 1 do if Pos('#', ListBox2.Items.Strings[Schleife]) = 1 then ListBox1.Items.Add(ListBox2.Items.Strings[Schleife]); ListBox1.ItemIndex := 0; SendMessage(ListBox2.Handle, LB_SetTopIndex, 3, 0); ShowScrollBar(Listbox2.Handle, SB_Both , false); end;
procedure TMainform.Button2Click(Sender: TObject); begin ListBox2.Items.SaveToFile('f:\delphi_xe\test\daten.txt'); end;
procedure TMainform.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin ListBox2.Items.Strings[ListBox2.ItemIndex] := Edit1.Text; ShowScrollBar(Listbox2.Handle, SB_Both , false); end;
procedure TMainform.FormCreate(Sender: TObject); begin Edit1.Enabled := false; end;
procedure TMainform.ListBox1Click(Sender: TObject); var Schleife : integer; Zeile : integer; begin Edit1.Text := ''; Edit1.Enabled := false; Zeile := ListBox1.ItemIndex * 21 + 3; SendMessage(ListBox2.Handle, LB_SetTopIndex, Zeile, 0); ShowScrollBar(Listbox2.Handle, SB_Both , false); end;
procedure TMainform.ListBox2Click(Sender: TObject); begin Edit1.Enabled := true; Edit1.Text := ListBox2.Items[ListBox2.ItemIndex]; end;
procedure TMainform.ListBox2KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin Key := 0; end;
procedure TMainform.ListBox2KeyPress(Sender: TObject; var Key: Char); begin Key := #0; end;
procedure TMainform.ListBox2KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin Key := 0; end;
end. |
Edit1: "Edit1.Enabled" im Source nachträglich eingebaut, weil man sonst unter Umständen neue Zeilen in der Listbox2 hätte einfügen können.
Einloggen, um Attachments anzusehen!
|
|
thecloser_
Hält's aus hier
Beiträge: 7
|
Verfasst: Mi 14.11.12 18:53
Ok, nun hab ich es fast vollständig, bis auf zwei Kleinigkeiten:
- Wenn ich die Datei per OpenFileDialog öfnnen möchte, muss ich ja das ganze in das then nach dem OPenDialog.Execute Befehl reinziehen.
Wie kann ich aber nun in der Loadfromfile() Zeile dies inegrieren? Per Variablendeklaration hat es schonmal nicht geklappt...
- Wie kann ich beim Abspeichern eine Zeile erstellen, in welcher der aktuelle Zeileninhalt der Listbox1 enthalten ist?
LG und nochmal vielen Dank für eure Hilfe
|
|
WasWeißDennIch
Beiträge: 653
Erhaltene Danke: 160
|
Verfasst: Mi 14.11.12 19:39
|
|
thecloser_
Hält's aus hier
Beiträge: 7
|
Verfasst: Mi 14.11.12 21:45
Nein,
ich meinte, dass ich den markierten Zeileninhalt in der Listbox, die oben erstellt wurde, in eine TXT Datei speichern kann.
Soll heißen, wenn in der ersten Zeile der Listbox 0x0000 stehht (und dieser markiert ist), will ich es durch Speichern in einer Textdatei haben. Nur diese eine Zeile, nicht mehr.
LG
PS: Ich mag womöglich noch ein ziehmlicher anfänger sein, aber unfähig bin ich nicht^^
|
|
WasWeißDennIch
Beiträge: 653
Erhaltene Danke: 160
|
Verfasst: Do 15.11.12 09:42
Dann erstell Dir doch eine Stringliste, füge diese eine Zeile ein, speichere sie danach ab und gib sie frei. Alternativ kannst Du auch die alten Pascal-Routinen wie AssignFile, Rewrite, writeln und CloseFile benutzen, aber IMHO ist die Stringliste einfacher zu handhaben.
|
|
zuma
Beiträge: 660
Erhaltene Danke: 21
Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
|
Verfasst: Do 15.11.12 12:25
_________________ Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
|
|
thecloser_
Hält's aus hier
Beiträge: 7
|
Verfasst: Mo 19.11.12 15:41
Danke, es hat soweit geklappt.
Nur hab ich nun schon wieder einer mir unbekannts Problem: Beim Folgenden Code wirft er mir einen "Missing Operator or Semicolon" in der CloseFile(Datei); Zeile aus:
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:
| if not FileExists('MTLWriter_Data\Temp.tem') then begin AssignFile(Datei, 'MTLWriter_data\Temp.tem'); Reset(Datei); WriteLn(Datei, 'ColSetInf "Default"'); WriteLn(Datei); WriteLn(Datei, '#0x'+MatNummer.text); WriteLn(Datei, 'MatClass '+Edit9.text); WriteLn(Datei, 'Diffuse '+Edit2.Text); WriteLn(Datei, 'Ambient '+Edit5.Text); WriteLn(Datei, 'Specular '+Edit4.Text); WriteLn(Datei, 'Reflect2 0xffffff'); WriteLn(Datei, 'Specular2 '+Edit3.Text); WriteLn(Datei, 'XDiffuse 0x000000'); WriteLn(Datei, 'XSpecular 0x000000'); WriteLn(Datei, 'Tex1Name "'+Tex_Name.text+'"'); WriteLn(Datei, 'Tex2Name ""'); WriteLn(Datei, 'Tex3Name ""'); WriteLn(Datei, 'TexFlags 0x11 0x00 0x00 0x00'); WriteLn(Datei, 'TexOffset 0.000000 0.000000'); WriteLn(Datei, 'TexScale 1.000000 1.000000'); WriteLn(Datei, 'Alpha 0'+Edit1.text); WriteLn(Datei, 'SpecProbs '+Edit6.text); WriteLn(Datei, 'Fresnel '+Edit7.text); WriteLn(Datei, 'FallOff '+Edit8.text); CloseFile(Datei); end; |
Meines Erachtes (und laut Google) müsste da aber doch alles drin sein, woran liegt es also?
Moderiert von Narses: Code- durch Delphi-Tags ersetzt
|
|
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Mo 19.11.12 15:57
Hallo,
wenn Du überprüfst, ob die Datei existiert, und die fehlende Datei mit Reset erzeugen willst, geht es garantiert schief.
Gibt es die Datei nicht, so muss sie mit
Delphi-Quelltext
erzeugt werden.
Ansonsten wäre es schön, wenn Du die ganze Unit posten würdest. Dann könnte man besser nach dem Fehler suchen.
Beste Grüße
Mathematiker
_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
|
|
thecloser_
Hält's aus hier
Beiträge: 7
|
Verfasst: Mo 19.11.12 16:47
Verdammt, das hatte ich ursprünglich sogar drin^^.
L479 wirft den Fehler aus
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: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242: 243: 244: 245: 246: 247: 248: 249: 250: 251: 252: 253: 254: 255: 256: 257: 258: 259: 260: 261: 262: 263: 264: 265: 266: 267: 268: 269: 270: 271: 272: 273: 274: 275: 276: 277: 278: 279: 280: 281: 282: 283: 284: 285: 286: 287: 288: 289: 290: 291: 292: 293: 294: 295: 296: 297: 298: 299: 300: 301: 302: 303: 304: 305: 306: 307: 308: 309: 310: 311: 312: 313: 314: 315: 316: 317: 318: 319: 320: 321: 322: 323: 324: 325: 326: 327: 328: 329: 330: 331: 332: 333: 334: 335: 336: 337: 338: 339: 340: 341: 342: 343: 344: 345: 346: 347: 348: 349: 350: 351: 352: 353: 354: 355: 356: 357: 358: 359: 360: 361: 362: 363: 364: 365: 366: 367: 368: 369: 370: 371: 372: 373: 374: 375: 376: 377: 378: 379: 380: 381: 382: 383: 384: 385: 386: 387: 388: 389: 390: 391: 392: 393: 394: 395: 396: 397: 398: 399: 400: 401: 402: 403: 404: 405: 406: 407: 408: 409: 410: 411: 412: 413: 414: 415: 416: 417: 418: 419: 420: 421: 422: 423: 424: 425: 426: 427: 428: 429: 430: 431: 432: 433: 434: 435: 436: 437: 438: 439: 440: 441: 442: 443: 444: 445: 446: 447: 448: 449: 450: 451: 452: 453: 454: 455: 456: 457: 458: 459: 460: 461: 462: 463: 464: 465: 466: 467: 468: 469: 470: 471: 472: 473: 474: 475: 476: 477: 478: 479: 480: 481: 482: 483: 484: 485: 486: 487: 488: 489: 490: 491: 492: 493: 494: 495: 496: 497: 498: 499: 500: 501: 502: 503: 504: 505: 506: 507: 508: 509: 510: 511: 512: 513: 514: 515: 516: 517: 518: 519: 520: 521: 522: 523: 524: 525: 526: 527: 528: 529: 530: 531: 532: 533:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
type TMTLWriter = class(TForm) Load: TButton; Help: TButton; Save: TButton; Mat: TRadioButton; body: TRadioButton; bodytex: TRadioButton; Tex: TRadioButton; glas: TRadioButton; Chrom: TRadioButton; Mirror: TRadioButton; StandartM: TButton; StandartB: TButton; StandartBT: TButton; StandartMI: TButton; StandartC: TButton; StandartG: TButton; StandartT: TButton; Alpha: TCheckBox; Tex_name: TEdit; Label1: TLabel; GroupBox2: TGroupBox; ListBox1: TListBox; Label2: TLabel; GroupBox1: TGroupBox; Expert: TCheckBox; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Edit5: TEdit; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; ListBox2: TListBox; Edit6: TEdit; Edit7: TEdit; Edit8: TEdit; Label9: TLabel; Label10: TLabel; Label11: TLabel; Edit9: TEdit; Label12: TLabel; Edit10: TEdit; Matnummer: TEdit; Label13: TLabel; CloseFile: TButton; procedure LoadClick(Sender: TObject); procedure HelpClick(Sender: TObject); procedure MatClick(Sender: TObject); procedure bodyClick(Sender: TObject); procedure bodytexClick(Sender: TObject); procedure TexClick(Sender: TObject); procedure glasClick(Sender: TObject); procedure ChromClick(Sender: TObject); procedure MirrorClick(Sender: TObject); procedure ExpertClick(Sender: TObject); procedure StandartMClick(Sender: TObject); procedure StandartBClick(Sender: TObject); procedure StandartBTClick(Sender: TObject); procedure StandartTClick(Sender: TObject); procedure StandartGClick(Sender: TObject); procedure StandartCClick(Sender: TObject); procedure StandartMIClick(Sender: TObject); procedure SaveClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure CloseFileClick(Sender: TObject); private { Private declarations } public { Public declarations } end;
var MTLWriter: TMTLWriter;
implementation
{$R *.dfm}
procedure TMTLWriter.LoadClick(Sender: TObject); //Open MTL File var openDialog : TOpenDialog; Schleife: integer; begin DeleteFile('MTLWriter_Data\Temp.tem'); Listbox1.clear; Listbox2.clear; openDialog:=TOpenDialog.Create(self); openDialog.InitialDir:=GetCurrentDir; openDialog.Options:=[ofFileMustExist]; openDialog.Filter:= 'C11 Material Files (*.mtl)|*.mtl|'; if OpenDialog.Execute then begin Save.Enabled:=true; Mat.Enabled:=true; Body.Enabled:=true; bodytex.Enabled:=true; tex.Enabled:=true; Alpha.Enabled:=true; glas.Enabled:=true; Chrom.Enabled:=true; Mirror.Enabled:=true; Expert.Enabled:=true; ListBox1.Clear; ListBox2.Clear; ListBox2.ScrollWidth := -1; ListBox2.Items.LoadFromFile(openDialog.FileName); Edit10.Text:=openDialog.Filename; for Schleife := 0 to ListBox2.Items.Count - 1 do if Pos('#', ListBox2.Items.Strings[Schleife]) = 1 then ListBox1.Items.Add(ListBox2.Items.Strings[Schleife]);
ListBox1.ItemIndex := 0; end; end;
procedure TMTLWriter.HelpClick(Sender: TObject); //Help/About begin ShowMessage( 'Tool written by Söhnlein alias thecloser_ .' +#13#10+'Only downloaded from eleven-games.net' +#13#10+'For help visit eleven-games.net') end;
procedure TMTLWriter.MatClick(Sender: TObject); //Standartbuttons deaktivieren begin if Mat.Checked then StandartM.Enabled:= true; if Mat.Checked then StandartB.Enabled:=false; if Mat.Checked then StandartBT.Enabled:=false; if Mat.Checked then StandartT.Enabled:=false; if Mat.checked then Alpha.Enabled:=false; if Mat.checked then StandartG.Enabled:=false; if Mat.Checked then StandartC.Enabled:=false; if Mat.Checked then StandartMI.Enabled:=false; if Mat.Checked then Tex_name.clear; Edit1.Text:=''; Edit2.Text:=''; Edit3.Text:=''; Edit4.Text:=''; Edit5.Text:=''; Edit6.Text:=''; Edit7.Text:=''; Edit8.Text:=''; Edit9.Text:='';
end;
procedure TMTLWriter.bodyClick(Sender: TObject); begin if body.Checked then StandartB.Enabled:=true; if body.checked then StandartM.Enabled:=false; if body.checked then StandartBT.Enabled:=false; if body.checked then StandartT.Enabled:=false; if body.checked then Alpha.Enabled:=false; if body.checked then StandartG.Enabled:=false; if body.checked then StandartC.Enabled:=false; if body.checked then StandartMI.Enabled:=false; if body.Checked then Tex_name.clear; Edit1.Text:=''; Edit2.Text:=''; Edit3.Text:=''; Edit4.Text:=''; Edit5.Text:=''; Edit6.Text:=''; Edit7.Text:=''; Edit8.Text:=''; Edit9.Text:=''; end;
procedure TMTLWriter.bodytexClick(Sender: TObject); begin if bodytex.Checked then StandartB.Enabled:=false; if bodytex.checked then StandartM.Enabled:=false; if bodytex.checked then StandartBT.Enabled:=true; if bodytex.checked then StandartT.Enabled:=false; if bodytex.checked then Alpha.Enabled:=false; if bodytex.checked then StandartG.Enabled:=false; if bodytex.checked then StandartC.Enabled:=false; if bodytex.checked then StandartMI.Enabled:=false; if bodytex.Checked then Tex_name.clear; Edit1.Text:=''; Edit2.Text:=''; Edit3.Text:=''; Edit4.Text:=''; Edit5.Text:=''; Edit6.Text:=''; Edit7.Text:=''; Edit8.Text:=''; Edit9.Text:=''; end;
procedure TMTLWriter.TexClick(Sender: TObject); begin if tex.Checked then StandartB.Enabled:=false; if tex.checked then StandartM.Enabled:=false; if tex.checked then StandartBT.Enabled:=false; if tex.checked then StandartT.Enabled:=true; if tex.checked then Alpha.Enabled:=true; if tex.checked then StandartG.Enabled:=false; if tex.checked then StandartC.Enabled:=false; if tex.checked then StandartMI.Enabled:=false; if tex.checked then Tex_name.Clear; Edit1.Text:=''; Edit2.Text:=''; Edit3.Text:=''; Edit4.Text:=''; Edit5.Text:=''; Edit6.Text:=''; Edit7.Text:=''; Edit8.Text:=''; Edit9.Text:=''; end;
procedure TMTLWriter.glasClick(Sender: TObject); begin if glas.Checked then StandartB.Enabled:=false; if glas.checked then StandartM.Enabled:=false; if glas.checked then StandartBT.Enabled:=false; if glas.checked then StandartT.Enabled:=false; if glas.checked then Alpha.Enabled:=false; if glas.checked then StandartG.Enabled:=true; if glas.checked then StandartC.Enabled:=false; if glas.checked then StandartMI.Enabled:=false; if glas.Checked then Tex_name.clear; Edit1.Text:=''; Edit2.Text:=''; Edit3.Text:=''; Edit4.Text:=''; Edit5.Text:=''; Edit6.Text:=''; Edit7.Text:=''; Edit8.Text:=''; Edit9.Text:=''; end;
procedure TMTLWriter.ChromClick(Sender: TObject); begin if chrom.Checked then StandartB.Enabled:=false; if chrom.checked then StandartM.Enabled:=false; if chrom.checked then StandartBT.Enabled:=false; if chrom.checked then StandartT.Enabled:=false; if chrom.checked then Alpha.Enabled:=false; if chrom.checked then StandartG.Enabled:=false; if chrom.checked then StandartC.Enabled:=true; if chrom.checked then StandartMI.Enabled:=false; if chrom.Checked then Tex_name.Clear; Edit1.Text:=''; Edit2.Text:=''; Edit3.Text:=''; Edit4.Text:=''; Edit5.Text:=''; Edit6.Text:=''; Edit7.Text:=''; Edit8.Text:=''; Edit9.Text:=''; end;
procedure TMTLWriter.MirrorClick(Sender: TObject); begin if Mirror.Checked then StandartB.Enabled:=false; if Mirror.checked then StandartM.Enabled:=false; if Mirror.checked then StandartBT.Enabled:=false; if Mirror.checked then StandartT.Enabled:=false; if Mirror.checked then Alpha.Enabled:=false; if Mirror.checked then StandartG.Enabled:=false; if Mirror.checked then StandartC.Enabled:=false; if Mirror.checked then StandartMI.Enabled:=true; if Mirror.Checked then Tex_name.clear; Edit1.Text:=''; Edit2.Text:=''; Edit3.Text:=''; Edit4.Text:=''; Edit5.Text:=''; Edit6.Text:=''; Edit7.Text:=''; Edit8.Text:=''; Edit9.Text:=''; end;
procedure TMTLWriter.ExpertClick(Sender: TObject); //Expertmode starten begin if Expert.checked then begin Label3.Enabled:=true; Label4.Enabled:=true; Label5.Enabled:=true; Label6.Enabled:=true; Label7.Enabled:=true; Label8.Enabled:=true; Label9.Enabled:=true; Label10.Enabled:=true; Label11.Enabled:=true; Label12.Enabled:=true; Edit1.Enabled:=true; Edit2.Enabled:=true; Edit3.Enabled:=true; Edit4.Enabled:=true; Edit5.Enabled:=true; Edit6.Enabled:=true; Edit7.Enabled:=true; Edit8.Enabled:=true; Edit9.Enabled:=true; Edit9.Enabled:=true; end; if not Expert.checked then begin Label3.Enabled:=false; Label4.Enabled:=false; Label5.Enabled:=false; Label6.Enabled:=false; Label7.Enabled:=false; Label8.Enabled:=false; Label9.Enabled:=false; Label10.Enabled:=false; Label11.Enabled:=false; Label12.Enabled:=false; Edit1.Enabled:=false; Edit2.Enabled:=false; Edit3.Enabled:=false; Edit4.Enabled:=false; Edit5.Enabled:=false; Edit6.Enabled:=false; Edit7.Enabled:=false; Edit8.Enabled:=false; Edit9.Enabled:=false; end; end;
procedure TMTLWriter.StandartMClick(Sender: TObject); //Standartbuttons zuweisen begin Edit1.Text:='00'; Edit2.Text:='0x191919'; Edit3.Text:='0x191919'; Edit4.Text:='0x323232'; Edit5.Text:='0x000000'; Edit6.Text:='079 000 040'; Edit7.Text:='097 050 001'; Edit8.Text:='100 050'; Edit9.Text:='00 00 00 04'; end;
procedure TMTLWriter.StandartBClick(Sender: TObject); begin Edit1.Text:='00'; Edit2.Text:='0x000000 0x9E9FA5 0x43464B 0x10274B 0x000D19 0x64000F 0x320000 0x96803D 0x64341F 0x14321F'; Edit3.Text:='0x000000 0x000000 0x878D96 0x2564AF 0x003064 0x000000 0x4B0000 0x000000 0x4B3A17 0x1E3227'; Edit4.Text:='0xC8C8C8 0xC8C8C8 0x8A8F96 0x646464 0x646464 0xE5E5E5 0x646464 0x646464 0x646464 0x646464'; Edit5.Text:='0x000000'; Tex_name.Text:='Car'; Edit6.Text:='200 010 059'; Edit7.Text:='095 025 080'; Edit8.Text:='000 010'; Edit9.Text:='00 04 00 05'; end;
procedure TMTLWriter.StandartBTClick(Sender: TObject); begin Edit1.Text:='00'; Edit2.Text:='0x8A8F96'; Edit3.Text:='0xB8BFC8'; Edit4.Text:='0xB8BFC8'; Edit5.Text:='0x000000'; Edit6.Text:='200 010 059'; Edit7.Text:='095 025 080'; Edit8.Text:='000 010'; Edit9.Text:='00 02 00 04'; end;
procedure TMTLWriter.StandartTClick(Sender: TObject); begin if Alpha.Checked then begin Edit1.Text:='00'; Edit2.Text:='0x969696'; Edit3.Text:='0x969696'; Edit4.Text:='0x323232'; Edit5.Text:='0x000000'; Edit6.Text:='079 010 050'; Edit7.Text:='097 050 080'; Edit8.Text:='000 030'; Edit9.Text:='00 01 01 00'; end; if not Alpha.checked then begin Edit1.Text:='00'; Edit2.text:='0xFFFFFF'; Edit3.Text:='0x323232'; Edit4.Text:='0xFFFFFF'; Edit5.text:='0x000000'; Edit7.Text:='065 025 060'; Edit6.Text:='079 010 050'; Edit8.Text:='000 030'; Edit9.Text:='00 02 00 04'; end; end;
procedure TMTLWriter.StandartGClick(Sender: TObject); begin Edit1.Text:='40'; Edit2.Text:='0x000000'; Edit3.Text:='0x0F0F19'; Edit4.Text:='0xA0AAC8'; Edit5.text:='0x000000'; Edit6.Text:='120 010 050'; Edit7.Text:='095 035 075'; Edit8.Text:='000 030'; Edit9.Text:='00 01 01 04'; Tex_name.Text:='Shattglas'; end;
procedure TMTLWriter.StandartCClick(Sender: TObject); begin Edit1.Text:='00'; Edit2.Text:='0x000000'; Edit3.Text:='0x323232'; Edit4.Text:='0xFFFFFF'; Edit5.Text:='0x000000'; Edit6.Text:='079 010 050'; Edit7.Text:='065 025 060'; Edit8.Text:='000 030'; Edit9.Text:='00 00 00 04'; end;
procedure TMTLWriter.StandartMIClick(Sender: TObject); begin Edit1.Text:='00'; Edit2.text:='0x000000'; Edit3.text:='0x000000'; Edit4.Text:='0x000000'; Edit5.Text:='0x000000'; Tex_name.Text:='__mirror'; Edit6.Text:='079 010 060'; Edit7.Text:='065 025 060'; Edit8.Text:='000 030'; Edit9.Text:='00 00 00 04'; end;
procedure TMTLWriter.SaveClick(Sender: TObject); //Save MTL var Datei:Textfile; begin if not FileExists('MTLWriter_Data\Temp.tem') then begin AssignFile(Datei, 'MTLWriter_data\Temp.tem'); ReWrite(Datei); WriteLn(Datei, 'ColSetInf "Default"'); WriteLn(Datei); WriteLn(Datei, '#0x'+MatNummer.text); WriteLn(Datei, 'MatClass '+Edit9.text); WriteLn(Datei, 'Diffuse '+Edit2.Text); WriteLn(Datei, 'Ambient '+Edit5.Text); WriteLn(Datei, 'Specular '+Edit4.Text); WriteLn(Datei, 'Reflect2 0xffffff'); WriteLn(Datei, 'Specular2 '+Edit3.Text); WriteLn(Datei, 'XDiffuse 0x000000'); WriteLn(Datei, 'XSpecular 0x000000'); WriteLn(Datei, 'Tex1Name "'+Tex_Name.text+'"'); WriteLn(Datei, 'Tex2Name ""'); WriteLn(Datei, 'Tex3Name ""'); WriteLn(Datei, 'TexFlags 0x11 0x00 0x00 0x00'); WriteLn(Datei, 'TexOffset 0.000000 0.000000'); WriteLn(Datei, 'TexScale 1.000000 1.000000'); WriteLn(Datei, 'Alpha 0'+Edit1.text); WriteLn(Datei, 'SpecProbs '+Edit6.text); WriteLn(Datei, 'Fresnel '+Edit7.text); WriteLn(Datei, 'FallOff '+Edit8.text); CloseFile(Datei); end; {else AssignFile(Datei, 'MTLWriter_data\Temp.tem'); Append(Datei); WriteLn(Datei); WriteLn(Datei, '#0x'+MatNummer.text); WriteLn(Datei, 'MatClass '+Edit9.text); WriteLn(Datei, 'Diffuse '+Edit2.Text); WriteLn(Datei, 'Ambient '+Edit5.Text); WriteLn(Datei, 'Specular '+Edit4.Text); WriteLn(Datei, 'Reflect2 0xffffff'); WriteLn(Datei, 'Specular2 '+Edit3.Text); WriteLn(Datei, 'XDiffuse 0x000000'); WriteLn(Datei, 'XSpecular 0x000000'); WriteLn(Datei, 'Tex1Name "'+Tex_Name.text+'"'); WriteLn(Datei, 'Tex2Name ""'); WriteLn(Datei, 'Tex3Name ""'); WriteLn(Datei, 'TexFlags 0x11 0x00 0x00 0x00'); WriteLn(Datei, 'TexOffset 0.000000 0.000000'); WriteLn(Datei, 'TexScale 1.000000 1.000000'); WriteLn(Datei, 'Alpha 0'+Edit1.text); WriteLn(Datei, 'SpecProbs '+Edit6.text); WriteLn(Datei, 'Fresnel '+Edit7.text); WriteLn(Datei, 'FallOff '+Edit8.text); Close;} end;
procedure TMTLWriter.FormCreate(Sender: TObject); //Check folder var dirname:string; begin dirName:= 'MTLWriter_Data';
if not DirectoryExists(dirname) then begin ShowMessage('MTLWriter_Data folder is missing. Loading file is not possible!'); Load.Enabled:=false; end; end;
procedure TMTLWriter.CloseFileClick(Sender: TObject); //Close File var filename, old, new:string; begin filename:=Edit10.Text; old:='MTLWriter_Data\Temp.tem'; new:=ChangeFileExt(old, '.mtl');
DeleteFile('Edit10.text'); MoveFile('MTLWriter_Data\Temp.mtl', 'Edit10.Text'); DeleteFile('\MTLWriter_Data\Temp.tem');
end;
end. |
Bitte andere (mögliche) unsauberheiten unbeachtet lassen, ich bin noch recht neu in Delphi
|
|
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Mo 19.11.12 16:56
Hallo,
Du hast einen Button Closefile genannt und damit die Methode "gekillt".
Beste Grüße
Mathematiker
_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
|
|
|