string, как известно, хитрый тип)
Цитата(Ptica_Oz @ 14.3.2007, 09:30 ) | procedure TfrmForm.ComboBox1Change(Sender: TObject); var n : Integer; s : string; <-локальная переменная begin n := ComboBox1.ItemIndex; s := ComboBox1.Items[n]; <- выделили память под s, скопировали значение строки Printer := PChar(s); <- "запомнили" указатель на первый символ локальной переменной s end;<- строка s перестает существовать, указатель на первый символ становиться не валидным. |
вышеприведенный код
Цитата(Ptica_Oz @ 14.3.2007, 12:21 ) | var temp : String; // глобальная переменная ... procedure TfrmForm.ComboBox1Change(Sender: TObject); var n, i : Integer; begin n := ComboBox1.ItemIndex; temp := ComboBox1.Items[n]; end; ... procedure TfrmForm.cmdPrintClick(Sender: TObject); var path: PChar; s : string; ... begin ... s := RunMethod('GetFileById',[ParentVersion.inID, fname, str]); path := PChar(s); Printer := PChar(temp); f := ACADPrint(path, Color, Printer, '!!!', Scale); // вызов ф-ции end; |
я бы переписал проще:
| Код | procedure TfrmForm.cmdPrintClick(Sender: TObject); var path: string; printer : string; ... begin ... path := RunMethod('GetFileById',[ParentVersion.inID, fname, str]); Printer := ComboBox1.Items[ComboBox1.ItemIndex]; f := ACADPrint(PChar(path), Color, PChar(Printer), '!!!', Scale); // вызов ф-ции end;
|
|