![]() |
Clomosy Resmi Forum Sitesidir. Amacımız kullanıcılarımıza, iş ortaklarımıza, danışmanlara, yazılımcılara programlarımız hakkında destek ve bilgi vermektir. |
Syntax Error |
Yanıt Yaz ![]() |
Yazar | |
Emetullah Emine ![]() Yeni Üye ![]() Kayıt Tarihi: 04 Ağustos 2025 Durum: Aktif Değil Puanlar: 2 |
![]() Yanıt Yaz
Alıntı Emetullah Emine
Bu mesaj kurallara aykırıysa buradan yöneticileri bilgilendirebilirsiniz.
![]() ![]() ![]() ![]() Gönderim Zamanı: 28 Ağustos 2025 Saat 15:24 |
Syntax Error Alıyorum 82.satırda
var myForm: TclForm; TopBarPnl, BodyPnl, NavPnl: TclProPanel; StepsContainerPnl: TclProPanel; TitleLbl, SkinTypeLbl, DayNameLbl, DayIndexLbl: TclProLabel; RefreshBtn, PrevDayBtn, NextDayBtn, BackBtn: TClProButton; StepsMemo: TclMemo; Rest: TclRest; API_KEY, RequestBody: String; email, LastSkinType, RoutineRawText: String; CurrentDay: Integer; DaysCount: Integer; DaysList: TClArrayString; q, qSess: TclSQLiteQuery; IsLoading: Boolean; // ------------------------- Yardımcı Fonksiyonlar ------------------------- void DBConnect; { try Clomosy.DBSQLiteConnect(Clomosy.AppFilesPath + 'sonn.db3', ''); except ShowMessage('Veritabanına bağlanırken hata: ' + LastExceptionMessage); } } void CreateRoutineTable; { try Clomosy.DBSQLiteQuery.SQL.Text = 'CREATE TABLE IF NOT EXISTS skin_routine (' + 'id INTEGER PRIMARY KEY AUTOINCREMENT,' + 'email TEXT,' + 'day TEXT,' + 'timeOfDay TEXT,' + 'stepOrder INTEGER,' + 'step TEXT' + ')'; Clomosy.DBSQLiteQuery.OpenOrExecute; except ShowMessage('Tablo oluşturulurken hata: ' + LastExceptionMessage); } } void LoadEmailAndSkinTypeFromDB; { email = ''; LastSkinType = ''; try qSess = Clomosy.DBSQLiteQueryWith('SELECT email FROM app_session WHERE id=1'); qSess.OpenOrExecute; if (not qSess.EOF) email = qSess.FieldByName('email').AsString; qSess.Free; if email <> '' { qSess = Clomosy.DBSQLiteQueryWith('SELECT skin_type FROM skin_profile WHERE email=' + QuotedStr(email) + ' ORDER BY id DESC LIMIT 1'); qSess.OpenOrExecute; if (not qSess.EOF) LastSkinType = qSess.FieldByName('skin_type').AsString; qSess.Free; } except ShowMessage('Oturum veya cilt tipi okunamadı: ' + LastExceptionMessage); } } void SaveRoutineToDB; var lines, cols: TClArrayString; i: Integer; line, dayName, timeOfDay, stepOrder, step: String; { try lines = TClArrayString.Create; cols = TClArrayString.Create; Clomosy.DBSQLiteQuery.SQL.Text = 'DELETE FROM skin_routine WHERE email=' + QuotedStr(email); Clomosy.DBSQLiteQuery.OpenOrExecute; lines = ClGetStringSplit(RoutineRawText, #10); for i = 0 to lines.Count - 1 { line = Trim(lines.GetItem(i)); if line == '' continue; cols = ClGetStringSplit(line, '|'); if cols.Count == 4 { dayName = Trim(cols.GetItem(0)); timeOfDay = Trim(cols.GetItem(1)); stepOrder = Trim(cols.GetItem(2)); step = Trim(cols.GetItem(3)); } if stepOrder == '' stepOrder = '0'; Clomosy.DBSQLiteQuery.SQL.Text = 'INSERT INTO skin_routine (email, day, timeOfDay, stepOrder, step) VALUES (' + QuotedStr(email) + ',' + QuotedStr(dayName) + ',' + QuotedStr(timeOfDay) + ',' + stepOrder + ',' + QuotedStr(step) + ')'; Clomosy.DBSQLiteQuery.OpenOrExecute; else StepsMemo.Lines.Add('Uyarı: atlanan satır (format yanlış): ' + line); } ShowMessage('Bakım rutini DB kaydedildi.'); lines.Free; cols.Free; } except ShowMessage('Rutin DB kaydı sırasında hata: ' + LastExceptionMessage); } } void LoadDaysFromDB; var qdays: TclSQLiteQuery; { DaysList = TClArrayString.Create; try qdays = Clomosy.DBSQLiteQueryWith('SELECT DISTINCT day FROM skin_routine WHERE email=' + QuotedStr(email) + ' ORDER BY id'); qdays.OpenOrExecute; while not qdays.EOF { DaysList.Add(qdays.FieldByName('day').AsString); qdays.Next; } qdays.Free; except { if qdays <> nil qdays.Free; ShowMessage('Günler yüklenirken hata: ' + LastExceptionMessage); } } } void RenderDay; var dayName: String; qday: TclSQLiteQuery; line: String; { try if DaysList == nil { StepsMemo.Lines.Clear; StepsMemo.Lines.Add('Henüz rutin verisi yok. "Yenile (AI)" ile oluşturun.'); Exit; } if DaysList.Count == 0 { StepsMemo.Lines.Clear; StepsMemo.Lines.Add('Henüz kayıtlı gün yok.'); Exit; } if CurrentDay < 0 CurrentDay = 0; if CurrentDay > DaysList.Count - 1 CurrentDay = DaysList.Count - 1; dayName = DaysList.GetItem(CurrentDay); DayNameLbl.Text = dayName; DayIndexLbl.Text = IntToStr(CurrentDay+1) + '/' + IntToStr(DaysList.Count); StepsMemo.Lines.Clear; StepsMemo.Lines.Add('=== ' + dayName + ' ==='); qday = Clomosy.DBSQLiteQueryWith( 'SELECT timeOfDay, stepOrder, step FROM skin_routine WHERE email=' + QuotedStr(email) + ' AND day=' + QuotedStr(dayName) + ' ORDER BY timeOfDay, stepOrder'); qday.OpenOrExecute; /* while not qday.EOF { line = qday.FieldByName('timeOfDay').AsString + ' - ' + IntToStr(qday.FieldByName('stepOrder').AsInteger) + ') ' + qday.FieldByName('step').AsString; StepsMemo.Lines.Add(line); qday.Next; } */ qday.Free; except ShowMessage('Gün render edilirken hata: ' + LastExceptionMessage); } } void OnRoutineCompleted; var aiText, tmp: String; { try IsLoading = False; myForm.FormWaiting.Visible = False; if Rest.StatusCode >= 400 { StepsMemo.Lines.Clear; StepsMemo.Lines.Add('API Hatası: ' + IntToStr(Rest.StatusCode)); Exit; } aiText = ''; try aiText = Clomosy.CLParseJSON(Rest.Response, 'candidates.0.output.0.content.0.text'); except aiText = ''; } if aiText == '' { try aiText = Clomosy.CLParseJSON(Rest.Response, 'candidates.0.output.0.content.0.text'); except aiText = ''; } } if aiText == '' { StepsMemo.Lines.Clear; StepsMemo.Lines.Add('Yanıt metni çıkarılamadı. Gelen ham yanıt DB veya format hatası olabilir.'); StepsMemo.Lines.Add('Ham cevap:'); StepsMemo.Lines.Add(Rest.Response); Exit; } tmp = ClGetStringReplace(aiText, '```json', ''); tmp = ClGetStringReplace(tmp, '```', ''); tmp = ClGetStringReplace(tmp, #13#10, #10); tmp = ClGetStringReplace(tmp, #13, #10); tmp = Trim(tmp); RoutineRawText = tmp; SaveRoutineToDB; LoadDaysFromDB; CurrentDay = 0; if DaysList.Count > 0 RenderDay; else StepsMemo.Lines.Add('Kaydedilen rutin bulunamadı.'); except StepsMemo.Lines.Clear; StepsMemo.Lines.Add('OnRoutineCompleted içinde hata: ' + LastExceptionMessage); } } void RestCreate(ABaseUrl, ABody: String); { try Rest = TclRest.Create; Rest.Accept = 'application/json'; Rest.ContentType = 'application/json'; Rest.Method = rmPOST; Rest.ConnectTimeOut = 30000; Rest.BaseURL = ABaseUrl; Rest.Body = ABody; Rest.OnCompleted = 'OnRoutineCompleted'; Rest.ExecuteAsync; IsLoading = True; myForm.FormWaiting.Visible = True; except IsLoading = False; myForm.FormWaiting.Visible = False; ShowMessage('Sunucuya bağlanırken hata: ' + LastExceptionMessage); } } void RequestRoutineFromAI; var prompt, safePrompt: String; { try if LastSkinType == '' LastSkinType = 'Bilinmiyor'; prompt = 'Sen deneyimli bir cilt bakım uzmanısın. Kullanıcının cilt tipi: ' + LastSkinType + '. ' + '7 günlük (Pazartesi–Pazar), her gün için "sabah" ve "akşam" adım adım kısa ve uygulanabilir bir bakım rutini oluştur. ' + 'Her gün için farklı rutinler yaz. ' + 'Her adımı şu formatta ver: day|timeOfDay|stepOrder|step ' + 'Örnek: Pazartesi|sabah|1|Nazik jel temizleyici. ' + 'Sadece bu formatta, başka açıklama yazma.'; safePrompt = prompt; safePrompt = ClGetStringReplace(safePrompt, '\', '\\'); safePrompt = ClGetStringReplace(safePrompt, '"', '\"'); safePrompt = ClGetStringReplace(safePrompt, #13#10, ' '); safePrompt = ClGetStringReplace(safePrompt, #10, ' '); safePrompt = ClGetStringReplace(safePrompt, #13, ' '); RequestBody = '{ "contents": [ { "parts": [ { "text": "' + safePrompt + '" } ] } ] }'; API_KEY = 'YOUR_API_KEY_HERE'; // ← buraya kendi token'ını koy RestCreate('https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=' + API_KEY, RequestBody); except ShowMessage('RequestRoutineFromAI hata: ' + LastExceptionMessage); } } void PrevDay; { if DaysList == nil Exit; if DaysList.Count == 0 Exit; if CurrentDay > 0 CurrentDay = CurrentDay - 1; RenderDay; } void NextDay; { if DaysList == nil Exit; if DaysList.Count == 0 Exit; if CurrentDay < DaysList.Count - 1 CurrentDay = CurrentDay + 1; RenderDay; } void BuildUIFrame; { myForm = TclForm.Create(Self); myForm.BtnFormMenu.Visible = False; myForm.FormWaiting.Visible = False; TopBarPnl = myForm.AddNewProPanel(myForm, 'TopBarPnl'); TopBarPnl.Align = alTop; TopBarPnl.Height = 64; TitleLbl = myForm.AddNewProLabel(TopBarPnl, 'TitleLbl', 'Haftalık Bakım Rutini'); TitleLbl.Align = alLeft; TitleLbl.Width = 260; TitleLbl.clProSettings.FontSize = 18; TitleLbl.SetclProSettings(TitleLbl.clProSettings); SkinTypeLbl = myForm.AddNewProLabel(TopBarPnl, 'SkinTypeLbl', 'Cilt tipi: '); SkinTypeLbl.Align = alClient; SkinTypeLbl.clProSettings.FontSize = 14; SkinTypeLbl.SetclProSettings(SkinTypeLbl.clProSettings); BackBtn = myForm.AddNewProButton(TopBarPnl, 'BackBtn', 'Kapat'); BackBtn.Align = alRight; BackBtn.Width = 100; myForm.AddNewEvent(BackBtn, tbeOnClick, 'OnBackBtn'); BodyPnl = myForm.AddNewProPanel(myForm, 'BodyPnl'); BodyPnl.Align = alClient; BodyPnl.Margins.Top = 10; BodyPnl.Margins.Left = 10; BodyPnl.Margins.Right = 10; BodyPnl.Margins.Bottom = 10; NavPnl = myForm.AddNewProPanel(BodyPnl, 'NavPnl'); NavPnl.Align = alTop; NavPnl.Height = 52; PrevDayBtn = myForm.AddNewProButton(NavPnl, 'PrevDayBtn', '< Önceki'); PrevDayBtn.Align = alLeft; PrevDayBtn.Width = 120; myForm.AddNewEvent(PrevDayBtn, tbeOnClick, 'PrevDay'); DayNameLbl = myForm.AddNewProLabel(NavPnl, 'DayNameLbl', 'Gün'); DayNameLbl.Align = alClient; DayNameLbl.clProSettings.FontSize = 16; DayNameLbl.SetclProSettings(DayNameLbl.clProSettings); DayIndexLbl = myForm.AddNewProLabel(NavPnl, 'DayIndexLbl', '0/0'); DayIndexLbl.Align = alRight; DayIndexLbl.Width = 60; DayIndexLbl.clProSettings.FontSize = 14; DayIndexLbl.SetclProSettings(DayIndexLbl.clProSettings); NextDayBtn = myForm.AddNewProButton(NavPnl, 'NextDayBtn', 'Sonraki >'); NextDayBtn.Align = alRight; NextDayBtn.Width = 120; myForm.AddNewEvent(NextDayBtn, tbeOnClick, 'NextDay'); RefreshBtn = myForm.AddNewProButton(NavPnl, 'RefreshBtn', 'Yenile (AI)'); RefreshBtn.Align = alRight; RefreshBtn.Width = 120; myForm.AddNewEvent(RefreshBtn, tbeOnClick, 'RequestRoutineFromAI'); // StepsContainer ve memo (gösterim) StepsContainerPnl = myForm.AddNewProPanel(BodyPnl, 'StepsContainerPnl'); StepsContainerPnl.Align = alClient; StepsContainerPnl.Margins.Top = 10; StepsContainerPnl.Margins.Left = 10; StepsContainerPnl.Margins.Right = 10; StepsContainerPnl.Margins.Bottom = 10; StepsMemo = myForm.AddNewMemo(StepsContainerPnl, 'StepsMemo', 'Günlük adımlar burada gösterilecektir...'); StepsMemo.Align = alClient; StepsMemo.ReadOnly = True; StepsMemo.TextSettings.WordWrap = True; StepsMemo.Text = ''; } void OpenRoutineForm; { try DBConnect; CreateRoutineTable; InitializeArrays = nil; BuildUIFrame; LoadEmailAndSkinTypeFromDB; if LastSkinType == '' SkinTypeLbl.Text = '(Cilt tipi bulunamadı)' else SkinTypeLbl.Text = '(Cilt tipi: ' + LastSkinType + ')'; LoadDaysFromDB; CurrentDay = 0; if ((DaysList <> nil) && (DaysList.Count > 0)) RenderDay; else StepsMemo.Lines.Add('Henüz AI ile oluşturulmuş rutin yok. "Yenile (AI)" ile oluşturun.'); myForm.Run; except ShowMessage('Form açılırken hata: ' + LastExceptionMessage); } } /* void OnBackBtn; { myForm.Close; } */ |
|
![]() |
Yanıt Yaz ![]() |
|
Tweet |
Forum Atla | Forum İzinleri ![]() Kapalı Foruma Yeni Konu Gönderme Kapalı Forumdaki Konulara Cevap Yazma Kapalı Forumda Cevapları Silme Kapalı Forumdaki Cevapları Düzenleme Kapalı Forumda Anket Açma Kapalı Forumda Anketlerde Oy Kullanma |