Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Cas Terazi Veri gönderimi Delphi sürüm sorunu
#11
(11-12-2021, Saat: 12:28)sabanakman Adlı Kullanıcıdan Alıntı: UniCode olan Delphi 10.3 sürümü için bir de şunu deneyebilir misiniz?

1 - CASPRTC.pas dosyasında Ctrl+R ile "replace" penceresinde "Char" aratıp "AnsiChar" ile değiştirin. Bu hem Char tiplerini AnsiChar yapacak hem de PChar tiplerini PAnsiChar yapacaktır. Kısacası bu unit (CASPRTC.pas) içinde hiç Char ya da PChar tipinde değişken tanımı bırakmamış olmak gerekiyor.

2 - Unit1.pas dosyasında ise
function StrToPAnsiChar(const S: string): PAnsiChar;
var
  asVal: AnsiString;
begin
  asVal := AnsiString(S);
  Result := PAnsiChar(asVal);
end;
şeklinde bir fonksiyon tanımlayın ve tüm "PChar(" ile yapılan dönüşümleri "StrToPAnsiChar(" olarak değiştirin. Bu unit (Unit1.pas) içinde de hiç PChar(..) şeklinde tip dönüşümü bırakmamış olmak gerekmektedir.

Test etme imkanı bulamadım ama bu iki adımlı değişiklikten sonra delphi 10.3 üzerinden de çalışması gerekiyor gibi duruyor Smile .

Arkadaşlar yoğunluktan yeni test edebildim Teraziyi kurdum @sabanakman dediklerini aynen uyguladım Ctrl+R ile replace edince olmadı bir yerde bakşa bir şeyleri değiştirdim galiba ama tek tek yukardan aşağı tüm char tiplerini AnsiChar ve pchar tiplerini pansichar olarak değiştirdim. dönüşüm içinde fonksiyonu kullandım yine gayet başarılı bir şekilde 10.4 üzerinde çalıştı.
Faydalanılmayan bilgi, harcanmayan ve hiç kimseye hayrı dokunmayan define gibidir.

Hz. Muhammed (sav.)
Cevapla
#12
Bu dönüşümden sonra şöyle bir sorun yaşıyorum.

chName1: Array[0..100] of AnsiChar;

Bu alana örnekte atama yaparken
strerr:=false; s1:=getrec(s, 4, #9); if strerr then goto l1;
StrPCopy(@(plu.chName1),s1);
Sadece değerin ilk harfini alıyor yani ELMA alması gerekirken E alıyor.

Delphi 2005 de kontrol ettiğim zaman ELMA nın tamamını alıyor.

Bir fikriniz varmı bu konuda.

(24-12-2021, Saat: 15:12)KUNTAY Adlı Kullanıcıdan Alıntı: Bu dönüşümden sonra şöyle bir sorun yaşıyorum.

chName1: Array[0..100] of AnsiChar;

Bu alana örnekte atama yaparken
       strerr:=false; s1:=getrec(s, 4, #9); if strerr then goto l1;
       StrPCopy(@(plu.chName1),s1);
Sadece değerin ilk harfini alıyor yani  ELMA alması gerekirken E alıyor.

Delphi 2005 de  kontrol ettiğim zaman ELMA nın tamamını alıyor.

Bir fikriniz varmı bu konuda.


Sorunu çözdüm dikkatimden kaçmış 

        StrPCopy(@(plu.chName1),StrToPAnsiChar(s1));
Faydalanılmayan bilgi, harcanmayan ve hiç kimseye hayrı dokunmayan define gibidir.

Hz. Muhammed (sav.)
Cevapla
#13
(09-06-2021, Saat: 19:19)KUNTAY Adlı Kullanıcıdan Alıntı: merhaba kardes ben pooyadan yaziyorum delphi7 kullaniyorum yardimina ihtiyacim var bazi Terazilerden kilo ve gramlari okuyorum bazilarindan port kontrlu basarili ama veri alamiyorum  yazdimci olurmusun =? sagol

(09-06-2021, Saat: 19:19)KUNTAY Adlı Kullanıcıdan Alıntı: merhaba kardes ben pooyadan yaziyorum delphi7 kullaniyorum yardimina ihtiyacim var bazi Terazilerden kilo ve gramlari okuyorum bazilarindan port kontrlu basarili ama veri alamiyorum  yazdimci olurmusun =? sagol


procedure TForm1.ScaleTimerTimer(Sender: TObject);
{var
  currentRead: Single;
begin
  if timerReadCounter > 0 then begin
    if Length(comBuffer) > 0 then begin
      ScaleTimer.Enabled := False;
    end
    else begin
      //ask for weight
      if ComPortReader.Active then begin
        ComPortReader.WriteAnsiChar(AnsiChar(83));
        ComPortReader.WriteAnsiChar(AnsiChar(120));
        ComPortReader.WriteAnsiChar(AnsiChar(10));
        ComPortReader.WriteAnsiChar(AnsiChar(13));
        ScaleTimer.Enabled := False;
      end;
    end;
    Inc(timerReadCounter);
  end; }

var
  currentRead: Single;
  WeightData: string;
  DataChar: Char;
begin
  if timerReadCounter > 0 then
  begin
    if Length(comBuffer) > 0 then
    begin
      ScaleTimer.Enabled := False;
    end
    else
    begin
      // Tarti agirligini iste
      if ComPortReader.Active then
      begin
        WeightData := '';

        // 16 baytlik veriyi okumak için döngü
        repeat
          DataChar := ComPortReader.ReadChar;
          if (DataChar <> #13) and (DataChar <> #10) then // CR ve LF karakterlerini kontrol et
          begin
            WeightData := WeightData + DataChar;
          end;
        until Length(WeightData) = 16;

        // Veriyi düzenlemek ve agirligi göstermek için ayristirma islemleri
        if Length(WeightData) = 16 then
        begin
          // Ilk karakter "+" veya "-" olmali
          if WeightData[1] = '+' then
            ShowMessage('Tarti agirligi: ' + Copy(WeightData, 3, 8) + ' ' + Copy(WeightData, 12, 4))
          else if WeightData[1] = '-' then
            ShowMessage('Tarti agirligi: -' + Copy(WeightData, 3, 8) + ' ' + Copy(WeightData, 12, 4));
        end;
        
        ScaleTimer.Enabled := False;
      end;
    end;
    Inc(timerReadCounter);
  end;
end;



procedure TForm1.ComPortReaderRxChar(Sender: TObject);
var
  Text: AnsiString;
begin
  Text := ComPortReader.ReadAnsiString;
  Memo.SelText := string(Text);
  comBuffer := comBuffer + Text;
  if CheckBuffer then begin
    comBuffer := '';

  Edit3.Text := FormatFloat('#0.000', previousRead);
end;

end;  bu kod PCE-PB N de calisiyiken ayni firmanin PCE-PB 60N serisinde calismiyor
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  yapay zeka delphi kl007 9 627 26-02-2026, Saat: 09:12
Son Yorum: mrmarman
  Win 11 ve Delphi 7 Minimize sorunu. enigma 7 498 11-02-2026, Saat: 10:27
Son Yorum: RAD Coder
Question Delphi formunu nasıl otomatik tam ekran yapabilirim ? erdemklt0 2 325 23-01-2026, Saat: 10:02
Son Yorum: csunguray
  Delphi SLL kullanım sorunu Bay_Y 12 1.317 22-12-2025, Saat: 18:11
Son Yorum: Bay_Y
  Delphi ile SQL server bağlantı hatası yakalama Under 20 1.982 21-11-2025, Saat: 15:24
Son Yorum: mrmarman



Konuyu Okuyanlar: 1 Ziyaretçi